Announcements
See what Drew Clarke has to say about the Qlik Talend Cloud launch! READ THE BLOG
cancel
Showing results for
Did you mean:
Creator

## min() does not transform all dates to their StartOfMonth equivalent in AGGR()

Hello,

IN order to aggregate data I used the following expression:

sum(

aggr(

if(

monthstart(min(Total <CustomerId,LocationId> RegistrationDate))=StartOfMonth,1,0

)

,CustomerId,LocationId,StartOfMonth

)

)

The data snapshot has been attached (refer to data_snapshot.png)

Initially, I had data for dates for 2016-2017 and the expression above worked perfectly well.

MIN() converted dates to their StartOfMonth equivalent.

However, when I added dates for the first six months of 2018 (see lower part of data_snapshot.png), only those RegistrationDate values which fall on the first of a given Month were accounted for.

in other words out of about a hundred dates which I added for 2018, only 20 are accounted for in the resulting Pivot Table resulting_table.png), while for 2016 and 2017 I get an accurate count for all Customers who registered throughout 2016-2017.

Note: StartOfMonth is product of MonthStart("Date") whereas Date is a column in the Calendar table which contains a range of all dates for 2016-2018 (refer to date_snapshot)

Question: how can I correct the SUM() expression above to ensure that all CustomerIDs for all years are accounted for for all RegistrationDate\s and not just the ones who happened to had registered on the first date of the month?

(Refer expected_result.png which was calculated using flags and SUM())

Thank you

12 Replies
MVP

I am a little confused... what really changed between 2016/2017 and 2018? The dates seems to be randomly spread out in month for 2016/2017 and 2018... why would the expression work for 2016/2017, but not 2018? It seems you understand the difference between the two... would you be able to elaborate on this a little bit more?

Creator
Author

Nothing changed between 2016/17, I just added random dates for 2018/01 until 2018/07.

Dates for 2016/17 were also generated at random previously.

The expression worked fine for two yearly periods 2016 and 2017 yet fails to aggregate correctly for the 97 (random) records for the first half of 2018.

thanks

MVP

I know you mentioned that StartOfMonth is created as a MonthStart field... but may be add MonthStart to StartOfMonth in the expression just to be sure

sum(

aggr(

if(

monthstart(min(Total <CustomerId,LocationId> RegistrationDate))=MonthStart(StartOfMonth),1,0

)

,CustomerId,LocationId,StartOfMonth

)

)

Creator
Author

tried MonthStart(StartOfMonth) and the same output.

I have attached a snapshot (see calendar.png) of qvd which I  generated from Calendar table for testing purposes previously.

As one can see StartOfMonth column was getting populated correctly in any case.

thanks

MVP

Nothing seems obviously wrong by looking at your expression and images, would you be able to share a sample to may be help you better?

Creator
Author

I have attached the following images with snapshots of data for 2018:

• CustomerDetails_1.png
• CustomerDetails_2.png
• geography.png - refer to lookup() below
• OnlineCustHist.png - customer transactions with LocationIds of the online stores purchases were made from

As I mentioned prev. it is only data for 2018 which is not getting aggregated correctly.

...

CustomerStats:

Year(RegistrationDate) & Num(Month(RegistrationDate)) as YearMonth,

lookup('Country','LocationId',LocationId,'Geography') as RegistrationCountry,

Count(CustomerId) as CountOfCust

Resident

CustomerDetails

Group by

lookup('Country','LocationId',LocationId,'Geography'),

Year(RegistrationDate) & Num(Month(RegistrationDate));

thank you

MVP

Would you be able to provide the data you have provided as image as a Excel file? I might be able to load them to see what you mean, because images might take a long time to see what issue you might be having