I’m very pleased to announce that one of our very favorite functions has been finally upgraded with a nice and longtime requested functionality. Aggr() virtual table is now sortable!
Note: For those of you not familiar with what Aggr() is and what can do for you, please review the following materials:
Despite the fact that we have been able to do some crazy stuff with Aggr(), every time we wanted to explore the possibilities of inter-record or range functions we faced a wall, Aggr() array of values couldn’t be sorted by any means. You couldn’t control how the data was ‘stored’ in the aggr() virtual table (load order by default) making it hardly usable for a variety of cases such as cumulative calculations, inter-record and range calculations, etc.
From now on, we count in with a brand new Aggr() chart function that allows us to sort the resulting array (both in Qlik Sense 2.2 and QlikView 12*). The magic happens in the new StructuredParameter.
An Aggr() array can contain virtually anything so you have to specify what data type will be sorted within the array of data (numeric, text, frequency or Load_Order) and the sort criteria, basically ASC or DESC. I strongly recommend you to check the Aggr() help page and get familiar with the new syntax.
Real life example
Please read this blog post to discover a real usage scenario.
(...) I needed to capture the percentage and number of the gains and losses in a KPI object(...) In order for the Aggr() function to work as I expected, I needed to make sure the MonthYear field was sorted properly in ascending order so I handled this in my script. Note that if the MonthYear field was not in ascending order, the Above() function may not always return the previous month thus returning the wrong results.
Now, to solve Jennell's dilemma we could simply use Aggr() avoiding any extra steps such as sorting the data in the script and making our calculation fully dynamic.
I've used aggr() sometimes for accumulations (full or rolling), and I always needed to ensure the right load order for the last aggr() dimension.
It would have been not great, but awesome news if we could use a sort by expression, like Sum(Value).
This would allow to answer questions like "how many customers make 80% of my sales" without having to use triggers, alternate states and pareto select actions.
Two more questions:
- Any reason why there are so many synonyms for the sort order criteria? Just wondering why.
- I noticed that the {SetExpression} now actually seems to work (AFAIR, it hasn't worked in older versions, though it's in the syntax help for ages). That's a very recent change, too, right?
Nice! Can we fix Distinct Load now so it only applies to the specified table? Today was about the 4th time that I spent at least an hour wondering why my data no longer made since because I joined or concatenated a table that was using Distinct.