Pages

Monday, 10 February 2020

Building a Better Record ID tool ...


Whilst visiting the Shambles in York, I was treated to a set of ACE inspired ghosts from my friend and fellow ACE, Rafal Olbert.  We searched the community of ghosts at the Ghost Merchant for the perfect trio of goblins to complete the set.  If you notice the coloring, they closely resemble the ACE logo on Raf's polo.  Who except us would spend the time rummaging through hundreds of ghosts to complete this task?
Now comes the question that you might be asking, "What does this have to do with CReW macros?"  It has everything to do with them.  Often there will be a simple task that has to be configured by many in the community.  The time spent in configuring a task could be better spent elsewhere (e.g. visiting York with friends).

There are multiple posts in the Alteryx Community asking how to get unique record IDs on groups of records.  There are also multiple ideas in the community to modify the functionality of the RecordID tool.  James Dunkerley presented at Inspire 2020 on the magic of modifying XML.  One example that he showed was the adding of the grouping functionality to the Record ID.

I grabbed a copy of his macro and have had it waiting for an opportunity to release it to the CReW user-base.  If you think about the construction of a macro that allows for GROUPING, you'll realize that the dynamic nature of grouping requires you to build a solution that allows for multiple (any) selections of fields from the incoming data stream.  James solved the grouping by modifying the XML in a formula:

IIF(IsEmpty([#1]) OR [#1]='""', "<GroupByFields />", 
'<GroupByFields><Field field=' 
+ Replace([#1], '","', '"/><Field field="')
+ '/></GroupByFields>')+ "/*" + [#1] + "*/"

He's modifying the XML of a standard Multi-Row Formula to update the GROUP BY parameter.  When no fields are selected, the resulting xml (grouping) looks like this:

<GroupByFields />

If the incoming data has three (3) fields selected for grouping, the results need to look like this:

<GroupByFields>
   <Field field="Field1"  />
   <Field field="Field2"  />
   <Field field="Field3"  />
</GroupByFields>

The macro is configured to read the incoming metadata and will populate a LIST BOX interface tool with all of the incoming fields.  When the user selects the fields (e.g. Field1, Field2, Field3), the question results are passed to an ACTION tool as a comma delimited series of values.  James then creates a formula to modify the output to produce the XML component displayed above.

If James had attended the BUILD 2 event in Nashville, this was one of the challenges posed.  He would have won that event.

If you'd like to download a copy of the macro, it is in the Alteryx Gallery and can be found here . Any feedback is welcomed.

Cheers,

Mark

Thursday, 30 January 2020

Then Is Not Now


I'm in the U.K. and visiting the Leeds Alteryx User Group.  Just prior to my journey I had generated an idea for Alteryx to improve the generate rows tool:  Please Read & Give Likes.  At the same time I suggested that if you: 1) click on a tool that is on your canvas & 2) go to the pallet and double-click a tool, that the tool will be inserted onto the canvas after the previous tool and that your cursor is moved to the configuration window Please Read & Give Likes.  But now I'm in Manchester and what have I done for CReW?

With a little help from my friends, I decided to tackle joining to date ranges (Tool Mastery: How to Join on Date Ranges).  The question comes up frequently in the community.  What I did was simplify the GENERATE ROWS tool and make it create date or datetime intervals between two end date or datetime points.

If you need to have a record for every day in 2020, you could feed it a start of 2020-01-01 and 2020-12-31 and get 366 output records.  Note:  I just tested and updated the macro.  If you set the TYPE of the output field as datetime and try this, you'll only get 365 records.  Thankfully, I caught this.

So if you want a simple way to generate date records, please look to the Alteryx Gallery for the new macro.  A link is provided below:


Cheers,

Mark