Skip to main content
cancel
Showing results for 
Search instead for 
Did you mean: 
OmarBenSalem

Question for champions (can't find a right title to my question :D )

Hi all, stalwar1

I have this scenario:

I have multiple clients :

let's say : 3 clients

each client has different start and end dates

what I want to do: if a yearEnd ( a calculated field) is btwn StartDate and EndDate, we take the Measure into consideration, else, we don't:

the red line are the good ones:

(till now, it's fine)

clientStartDateEndDateYearEnd(calculated = yearEnd(StartDate)Measure
client1

04/05/2014

05/10/2014

01/05/2015

15/10/2015

20/04/2016

04/09/2014

05/02/2015

10/09/2015

15/01/2016

15/01/2017

31/12/2014

31/12/2014

31/12/2015

31/12/2015

31/12/2016

100

200

300

400

500

client2

10/01/2015

12/12/2015

01/02/2017

20/09/2017

05/08/2015

20/02/2016

10/05/2017

15/01/2018

31/12/2015

31/12/2015

31/12/2017

31/12/2017

100

200

300

400

client3

10/07/2015

15/01/2016

11/01/2016

15/01/2017

31/12/2015

31/12/2016

100

200

Now, what I want to do is create a new bar chart as follow:

as dimension: year  (probably, year(StartDate) ?

as a measure : My Measure

and it would be as follow:

2014 : 200 (the first red of client1)

2015 : 400 (2nd red for client1) + 200 (1st red for client2) + 100 (first red for client3)

2016 : 500 (3rd red for client1) + 200 (2nd red of client3)

2017 ; 400 (2nd red for client2)

How can I do this?

thanks !

19 Replies
sunny_talwar

Not sure, but this seems to be working for your sample

=Sum(If(Year(EndDate + 1) > Year(StartDate), Measure))

Capture.PNG

OmarBenSalem
Author

I'll do some tests on my actual dta, to see why this does not work.. I already tried ur suggested expressions and it did not do the trick..

If I find any clue , I'll keep u in touch.

Thanks for all of u !

kaanerisen
Creator III

Hi Omar,

I guess you have to assign a unique id to all rows.

Script:

test:

LOAD AutoNumber(Client&StartDate&EndDate&Measure) as id,* INLINE [

    Client, StartDate, EndDate, Measure

    client1, 4/5/2014, 4/9/2014, 100

    client1, 5/10/2014, 5/2/2015, 200

    client1, 1/5/2015, 10/9/2015, 300

    client1, 15/10/2015, 15/01/2016, 400

    client1, 20/04/2016, 15/01/2017, 500

    client2, 10/1/2015, 5/8/2015, 100

    client2, 12/12/2015, 20/02/2016, 200

    client2, 1/2/2017, 10/5/2017, 300

    client2, 20/09/2017, 15/01/2018, 400

    client3, 10/7/2015, 11/1/2016, 100

    client3, 15/01/2016, 15/01/2017, 200

];

Untitled2.png

Bar Chart Expressions:

Dimensions 1:

year(date#(StartDate,'DD/MM/YYYY'))

Dimension 2:

Client

Measure:

Sum({<id={"=date#(EndDate,'DD/MM/YYYY')>yearend(date#(StartDate,'DD/MM/YYYY'))"}>}Measure)

Untitled.png

Hope İt helps...

pradosh_thakur
Master II

if possible just paste your expression Omar. Lets find out if there is anything you need to change from the expression itself. Data won't be needed i guess.

Learning never stops.
sunny_talwar

So even this new expression doesn't work for your actual data?

OmarBenSalem
Author

I'm really sorry for the late answer, I was on my launch break

The answer of sunny did work on my actual data set :

=Sum(If(Year(EndDate + 1) > Year(StartDate), Measure))

while this:

SUM({<StartDate={"=(EndDate>yearend(StartDate))"}>}Measure)


did not (and it was my first try also)



stalwar1‌, can u explain why? why qlik interpets the 2 expressions differently?

OmarBenSalem
Author

every contribution is helpful !

sunny_talwar

The expression that pradosh_thakur‌ provided looks at a table where StartDate is a dimension and checks if EndDate >YearEnd(StartDate)... the problem is that you might have a single StartDate associated with more than one EndDate.... that is where is fails... if this was always one-to-one relation... it would have worked....

My expression is just doing a row level evaluation of each and every single StartDate and EndDate.... If you were to have a UniqueKey, you could have used this

=Sum({<UniqueKey = {"=Year(EndDate + 1) > Year(StartDate)"}>} Measure)

Alternatively, Pradosh's response might work like this

Sum(If(EndDate > YearEnd(StartDate), Measure))

OmarBenSalem
Author

very well explained ! thanks !

pradosh_thakur
Master II

yeah!!! Never thought of the one to many connection between dates while writing expression . Will keep it in mind from now.

Learning never stops.