Do not input private or sensitive data. View Qlik Privacy & Cookie Policy.
Skip to main content

Announcements
Qlik GA: Multivariate Time Series in Qlik Predict: Get Details
cancel
Showing results for 
Search instead for 
Did you mean: 
Not applicable

Pivot table with two calculated dimensions - rank()

Hi all,

I have a question concerning two calculated dimensions in a pivot table (see file attached).

In ArtikelsGM you can find all sorts of articles.

In the pivot table I only want to show specific articles, as you can see. I managed to do this with if(match()) as a calculated dimension.

My question is: I only want to show the top 3 of the sales (per Name)

So basically, the pivot table should only show me Name9, Name7 and Name4 (in that order)

I tried to use the code below as another calculated dimension, but it does not seem to work.

=if(aggr(rank

(sum(Sales))

,Name)<=3,Name)

Can you guys help me out?

Thank you!

1 Solution

Accepted Solutions
Gysbert_Wassenaar
Partner - Champion III
Partner - Champion III

Try this as calculated dimension:

=aggr( if(rank(aggr(sum({<ArtikelsGM={'42110 GIPS ZAKGOED','42210 GIPS SILO','42220 GIPS ZAK M'}>}Sales),Name))<=3,Name),Name)

The part {<ArtikelsGM={'42110 GIPS ZAKGOED','42210 GIPS SILO','42220 GIPS ZAK M'}>} is necessary because you 'select' these values in your other calculated dimension.

You could also use sum({<ArtikelsGM={'42110 GIPS ZAKGOED','42210 GIPS SILO','42220 GIPS ZAK M'}>} Sales) as expression and use ArtikelsGM as dimension instead of the calculated dimension. That's a better way to achieve the same result.

See attached qvw.


talk is cheap, supply exceeds demand

View solution in original post

6 Replies
Not applicable
Author

hi

try this

rank:

LOAD * INLINE [

    name, sales

    a, 200

    b, 100

    c, 300

    d, 500

    e, 450

    f, 356

];

expression--

if(aggr(rank(sum(sales)),name)<=3,name)

or simply write this expression

aggr(if(rank(sum(sales))<=3,name),name)


then output like this

namesales

if(aggr(rank(sum(sales)),name)<=3,name)
d500d
e450e
f356f
Not applicable
Author

Hi Vishwaranjan,

Thanks for the reply, but I am a bit lost. I am pretty new to Qlikview and I only know expressions and dimensions.

Where should I enter the code written below?

rank:

LOAD * INLINE [

    name, sales

    a, 200

    b, 100

    c, 300

    d, 500

    e, 450

    f, 356

];

And the expressions you have given me, is this an expression or a calculated dimension?

Thank you for your help!

Z

Gysbert_Wassenaar
Partner - Champion III
Partner - Champion III

Try this as calculated dimension:

=aggr( if(rank(aggr(sum({<ArtikelsGM={'42110 GIPS ZAKGOED','42210 GIPS SILO','42220 GIPS ZAK M'}>}Sales),Name))<=3,Name),Name)

The part {<ArtikelsGM={'42110 GIPS ZAKGOED','42210 GIPS SILO','42220 GIPS ZAK M'}>} is necessary because you 'select' these values in your other calculated dimension.

You could also use sum({<ArtikelsGM={'42110 GIPS ZAKGOED','42210 GIPS SILO','42220 GIPS ZAK M'}>} Sales) as expression and use ArtikelsGM as dimension instead of the calculated dimension. That's a better way to achieve the same result.

See attached qvw.


talk is cheap, supply exceeds demand
Not applicable
Author

hi

firstly go to script--

then write this code

rank:

LOAD * INLINE [

    name, sales

    a, 200

    b, 100

    c, 300

    d, 500

    e, 450

    f, 356

];

now on dashboard, right clik, and select new object--->

select pivote table.

take

dimension----  name , sales

expression---- 
if(aggr(rank(sum(sales)),name)<=3,name)



Not applicable
Author

@ vishwaranjan: Thank you for your help, I tried Gysbert's answer and it worked, so I perfer to not touch the script. But I tried yours in a test-file and it works as well. So many thanks!

@ Gysbert: thank you for your reply, it works like a charm! Just one small qestion though:

Instead of "Sales", the formule to calculate my sales is a bit more complex:

sum({$<Jaar={$(=only(Jaar))}>} OmzetBedrag)

How should I enter this in your codes? I copied the bold part to put it at the Sales part, but it did not work. How should I squeeze it in?

In calculated dimensions I now have;

=aggr( if(rank(aggr(sum({<ArtikelsGM={'42110 GIPS ZAKGOED','42210 GIPS SILO','42220 GIPS ZAK M'}>}Sales),Name))<=3,Name),Name)

and in expressions I use;

=sum({<ArtikelsGM={'42110 GIPS ZAKGOED','42210 GIPS SILO','42220 GIPS ZAK M'}>}Sales)

So both times, the sales part should become

sum({$<Jaar={$(=only(Jaar))}>} OmzetBedrag)

Thanks a lot!

Zipke

Not applicable
Author

Alright, I have found the solution.

Thanks for the help!

Cheers,

Zipke