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

Announcements
Qlik Open Lakehouse is Now Generally Available! Discover the key highlights and partner resources here.
cancel
Showing results for 
Search instead for 
Did you mean: 
Not applicable

Advanced Aggr function help

Hi, I have a dataset at the moment which I create in Qlik, then extract to Excel for further calculation. I am sure it can all be done in Qlik, but need assistance to work out how.

PROBLEM DESCRIPTION:

I have a Base table with the following fields:

CUSTOMERPRODUCTYearMonthSALES_REVENUE

I Use a straight Table (dimensions CUSTOMER & PRODUCT) to show which Customers bought in different years:

CUSTOMERPRODUCTSales Revenue 20082008FlagSales Revenue 20092009Flag
CUSTOMERPRODUCTSUM({<Year={2008}>}SALES_REVENUE)IF(SUM({<Year={2008}>}SALES_REVENUE)=0,0,1)

SUM({<Year={2009>}SALES_REVENUE)

IF(SUM({<Year={2009}>}SALES_REVENUE)=0,0,1)
A110012001
A250100
B1001001
B20000
B3751751

Then I take the data to Excel and filter the flag columns to show, per product, how much Revenue is from Lost, New or continuing customers ("Customer Base") - without showing the customer as a dimension

(eg Customer A bought Product 2 for $50 in 2008, but $0 in 2009. They are lost customer. Their Revenue from 2008 should show in the "Lost Customers" field below for Product 2.:

Sales Revenue
Lost CustomersCustomer BaseNew Customers
PRODUCT

IF(2008Flag = 1 AND 2009Flag=0),

SUM(Sales Revenue 2008),0)

IF(2008Flag = 1 AND 2009Flag=1),

SUM(Sales Revenue 2009),0)

IF(2008Flag = 0 AND 2009Flag=1),

SUM(Sales Revenue 2009),0)

10200100
25000
30750

I do the same with a Count of customers to work out how many customers are "Lost", "New" or "Base".

I want to do all of this as one step in a Straight Table.

If I keep CUSTOMER & PRODUCT as dimensions I can get the data to show correctly.

E.g. Lost Customer Revenue code: 

IF

(SUM({<Year={2008}>}SALES_REVENUE)>0 AND SUM({<Year={2009}>}SALES_REVENUE)<=0,
SUM({<Year={2008}>}SALES_REVENUE),0)

But if I remove the CUSTOMER field as a dimension the calculation is a sum of all revenue for 2008 vs 2009, not "per customer".

Therefore I need an "Aggr" function.

I have tried:

IF

(Aggr(SUM({<Year={2008}>}SALES_REVENUE),CUSTOMER)>0 AND Aggr(SUM({<Year={2009}>}SALES_REVENUE),CUSTOMER)<=0,
Aggr(SUM({<Year={2008}>}SALES_REVENUE),CUSTOMER),0)

Also tried:

IF

(Aggr(SUM(Total {<Year={2008}>}SALES_REVENUE),CUSTOMER,Year)>0 AND Aggr(SUM(Total {<Year={2009}>}SALES_REVENUE),CUSTOMER,Year)<=0,

Aggr(SUM(Total {<Year={2008}>}SALES_REVENUE),CUSTOMER,Year),0)

I think I need an "Aggr" function around the whole IF statement.

Does anyone have any ideas?

1 Solution

Accepted Solutions
perumal_41
Partner - Specialist II
Partner - Specialist II

Hi

Try This Expression .for helpful for u

Sum(Aggr(if(SUM({<Year={2008}>}SALES_REVENUE)>0 AND SUM({<Year={2009}>}SALES_REVENUE)<=0,
SUM({<Year={2008}>}SALES_REVENUE)),CUSTOMER))

View solution in original post

4 Replies
perumal_41
Partner - Specialist II
Partner - Specialist II

Hi

Try This Expression .for helpful for u

Sum(Aggr(if(SUM({<Year={2008}>}SALES_REVENUE)>0 AND SUM({<Year={2009}>}SALES_REVENUE)<=0,
SUM({<Year={2008}>}SALES_REVENUE)),CUSTOMER))

Not applicable
Author

Excellent. This works. Thanks for your help.

Not applicable
Author

Hi Ricki

This one should work for LOST

 

Sum

     (
          Aggr(
               IF(
                    SUM({<Year={2008}>}SALES_REVENUE)>0 AND SUM({<Year={2009}>}SALES_REVENUE)<=0
                         ,
SUM({<Year={2008}>}SALES_REVENUE)
                         ,0
               )
               ,
CUSTOMER

     )
)

Remember that the AGGR function is really just a method of building an array of values, so putting multiple AGGR statements together in a single expression really doesn't work because each is evaluated on its own.

Good luck,

Nigel.

Not applicable
Author

Thanks,

I also found that to have "PRODUCT" as a dimension it needs including in the AGGR Function, so:

Aggr (xxxxx, CUSTOMER,PRODUCT)