Forum Discussion
Cumulative total between two dates in monthly allocation
Hello, I m trying to figure out formula to display monthly total between two dates for one record. Data sample:
| CUSTOMER | START DATE | END DATE | MONTHLY GP |
| 99555 | 27/01/2020 | 27/04/2020 | 10 |
| 99778 | 09/01/2020 | 27/08/2020 | 20 |
| 99816 | 01/04/2020 | 27/10/2020 | 15 |
| 7111 | 15/04/2020 | 27/10/2020 | 10 |
| 7147 | 10/04/2020 | 31/12/2020 | 15 |
| 715 | 01/04/2020 | 27/08/2020 | 30 |
Result should be
| CUSTOMER | START DATE | END DATE | MONTHLY GP | 2020-01 | 2020-02 | 2020-03 | 2020-04 | 2020-05 | 2020-06 | 2020-07 | 2020-08 | 2020-09 | 2020-10 | 2020-11 | 2020-12 |
| 99555 | 27/01/2020 | 27/04/2020 | 10 | 10 | 10 | 10 | 10 | ||||||||
| 99778 | 09/01/2020 | 27/08/2020 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | ||||
| 99816 | 01/04/2020 | 27/10/2020 | 15 | 15 | 15 | 15 | 15 | 15 | 15 | 15 | |||||
| 7111 | 15/04/2020 | 27/10/2020 | 10 | 10 | 10 | 10 | 10 | 10 | 10 | 10 | |||||
| 7147 | 10/04/2020 | 31/12/2020 | 15 | 15 | 15 | 15 | 15 | 15 | 15 | 15 | 15 | 15 | |||
| 715 | 01/04/2020 | 27/08/2020 | 30 | 30 | 30 | 30 | 30 | 30 |
Ideally it would be
CumulativeBetweenDates:=TOTALYTD(SUM(Opportunity[BaseYear_MonthAGP]),
'Calendar'[Day],USERELATIONSHIP([START DATE],'Calendar'[Day]),[END DATE]])Unfortunatelly last parameter is a string and can't be used in this manner.
This would be run on SSAS threfore some limitations are in place(Direct Query, VAR not available)
Pointing to right direction would be appriciated
Thanks in advance
Michal
Hello v-alq-msft and amitchandak ,
Thanks for your support on this. Unfortunately both of the solutions did not solve calculation in SSAS environment but taking under consideration both comments and advice from local guru I came to above which did allocate GP across months.
CumulativeBetweenDates:=CALCULATE( SUM(Customer[DAY_AGP]), FILTER(CALCULATETABLE(Customer,ALL('Calendar')), Customer[START_DATE] <=MAX('Calendar'[Day])&& Customer[END_DATE]>MIN('Calendar'[Day]) ))
7 Replies
- amitchandak
Super User
Mich_J , I did not get what you want to give the last parameter. You need to tell where year is going to end. In case it end at 12/31 no need for that. It is optional.
like
TOTALYTD(SUM(Opportunity[BaseYear_MonthAGP]),
'Calendar'[Day],USERELATIONSHIP([START DATE],'Calendar'[Day]),"12/31")TOTALYTD(SUM(Opportunity[BaseYear_MonthAGP]),
'Calendar'[Day],USERELATIONSHIP([START DATE],'Calendar'[Day]),"3/31") // Year ending March- Mich_JFrequent Visitor
amitchandak This has to be dynamic parameter and its different for each record to achieve total between two dates therefore above won’t work. It needs to be time intelligence calculation but I cant find any references on web. Most calculations would work to summarise for each month based on date in one column. Where in here I would like to present monthly cumulative between two dates.
- amitchandak
Super User
Mich_J , refer if this can help
Or this file this sum up days between dates
https://www.dropbox.com/s/bqbei7b8qbq5xez/leavebetweendates.pbix?dl=0
- v-alq-msft
Community Support
Hi, Mich_J
Based on your description, I created data to reproduce your scenario. The pbix file is attached in the end.
Table:
Calendar(a calculated table):
Calendar = CALENDARAUTO()There is no relationship between two tables. You may create three calculated columns and a measure as below.
Calculated column: Year-Month = VALUE(FORMAT('Calendar'[Date],"yyyymm")) StartYearMonth = VALUE(FORMAT('Table'[START DATE],"yyyymm")) EndYearMonth = VALUE(FORMAT('Table'[END DATE],"yyyymm")) Measure: Result = var _cYearMonth = SELECTEDVALUE('Calendar'[Year-Month]) var _startYearMonth = SELECTEDVALUE('Table'[StartYearMonth]) var _endYearMonth = SELECTEDVALUE('Table'[EndYearMonth]) return IF( _cYearMonth>=_startYearMonth&&_cYearMonth<=_endYearMonth, SUM('Table'[MONTHLY GP]) )Result:
Best Regards
Allan
If this post helps, then please consider Accept it as the solution to help the other members find it more quickly.
- Mich_JFrequent Visitor
Hello v-alq-msft and amitchandak ,
Thanks for your support on this. Unfortunately both of the solutions did not solve calculation in SSAS environment but taking under consideration both comments and advice from local guru I came to above which did allocate GP across months.
CumulativeBetweenDates:=CALCULATE( SUM(Customer[DAY_AGP]), FILTER(CALCULATETABLE(Customer,ALL('Calendar')), Customer[START_DATE] <=MAX('Calendar'[Day])&& Customer[END_DATE]>MIN('Calendar'[Day]) ))- mussaenda
Community Champion