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

Register now to learn Fabric in free live sessions led by the best Microsoft experts. From Apr 16 to May 9, in English and Spanish.

Reply
Anonymous
Not applicable

Dynamic Calculation Based on Date

Hi Everyone, 
I am writing to ask question to the following problem: I am attempting to calculate deltas based on varying time intervals that are picked by the user with a slicer built on my M Date table . 
Data Tables:

1) Forecasted $ (contains data from 11/23/21 - 12/31/21)

2) Actual $ (contains data from 1/1/21 - 11/22/21)
3) Budget $ (contains data from 1/1/21 - 12/31/21)
4) M Date Table (M table showing all dates for 2019 - 2021). All tables are connected to M Date table through a date column. 
Calculations:
I need to calculate deltas based on 3 different time criterias:

1)Historical - example: (1/1/21 to 10/31/21) -> SUM(Actual $ [1/1/21,10/31/21] ) - SUM(Budget $ [1/1/21,10/31/21])
2)Historical + Future - example: (1/1/21 to 11/31/21) ->
(SUM(Actual $ [1/1/21,11/22/21]) + SUM(Forecast $ [11/23/21,11/31/21])) - SUM(Budget $ [1/1/21,11/31/21]) 
3) Future - example: (12/1/21 - 12/31/21) -> SUM(Forecasted $ [12/1/21,12/31/21]) - SUM(Budget $ [12/1/21, 12/31/21]) 
I can generate the proper results but when I choose different time intervals the measure breaks. On another note, the chart will show all dates from 2019-2021 even though only 2021 dates are selected and the filter shows that only 2021 dates are being used although 2019/2020 appear visually. 

The DAX Formula I used:

Calculation =

// Variables
VAR Cost_MinDate = MIN(Actual$ [Date])
VAR Cost_MaxDate = MAX(Actual$ [Date])
VAR Date_MinSlicer = MIN(MDate[Date])
VAR Date_MaxSlicer = MAX(MDate[Date])
VAR ACT_DATE_PLUS_ONE = Cost_MaxDate + 1

// Variable Calculations
VAR Variable1 =
(CALCULATE(SUM(Actual$[Dollars]),DATESBETWEEN(s_Date[Date],Date_MinSlicer,Cost_MaxDate))
+ CALCULATE(SUM(Forecast$[Dollars]),DATESBETWEEN(s_Date[Date],Cost_Date_Plus_One,Date_MaxSlicer)))

VAR Variable2 = CALCULATE(SUM(Actual$[Dollars]),DATESBETWEEN(s_Date[Date],Date_MinSlicer,Cost_MaxDate))

VAR Variable3 = CALCULATE(SUM(Forecast$[Dollars]),DATESBETWEEN(s_Date[Date],Date_MinSlicer,Date_MaxSlicer))

VAR Variable4 = CALCULATE(SUM(Budget$[Dollars),DATESBETWEEN(s_Date[Date],Date_MinSlicer,Date_MaxSlicer))
// Calculation
RETURN
SWITCH(

TRUE(),

AND(Cost_MinDate >= Date_MinSlicer, Date_MaxSlicer <= Cost_MaxDate),
(Variable2 - Variable4),
AND(Cost_MinDate >= Date_MinSlicer,Cost_MaxDate < Date_MaxSlicer),
(Variable1 - Variable4),
Cost_MaxDate < Date_MinSlicer,
(Variable3 - Variable4)
)


Thank you in advance for your help and time. This problem has been perplexing me for about 2 weeks now. 

1 ACCEPTED SOLUTION

@Anonymous  DAX can do all the work that relationships do, so if you want to pick up all data between dates, you don't actually need any relationship. Seems really counter-intuitive, but it works.

 

Other option is to keep the relationship between Date and Fact table, but then need to use the ALL or similar function  (such as DATESBETWEEN ) to ensure that the relationship doesn't restrict you to only seeing the date that is selected. As you have pointed out, it all comes down to using the right date in the right place in the DAX formulas.

 

Feel free to mark your most recent post as a solution, as it looks like you've solved this now?


Please @mention me in your reply if you want a response.

Copying DAX from this post? Click here for a hack to quickly replace it with your own table names

Has this post solved your problem? Please Accept as Solution so that others can find it quickly and to let the community know your problem has been solved.
If you found this post helpful, please give Kudos C

I work as a Microsoft trainer and consultant, specialising in Power BI and Power Query.
www.excelwithallison.com

View solution in original post

4 REPLIES 4
AllisonKennedy
Super User
Super User

@Anonymous  what does your relationship model view look like? You may need some unrelated Date tables for each slicer the user can select.

 

https://excelwithallison.blogspot.com/2021/09/power-bi-forecasting-with-irregular.html 


Please @mention me in your reply if you want a response.

Copying DAX from this post? Click here for a hack to quickly replace it with your own table names

Has this post solved your problem? Please Accept as Solution so that others can find it quickly and to let the community know your problem has been solved.
If you found this post helpful, please give Kudos C

I work as a Microsoft trainer and consultant, specialising in Power BI and Power Query.
www.excelwithallison.com

Anonymous
Not applicable

@AllisonKennedy 
Wouldn't there need to be one data table that is connected to each tables date columns (1-many relationship or 1-1) in order to filter properly? My slicer is built using the s_Date table which is controllable by picking a [startdate, enddate]. 
On another note, 
I actually was able to fix the issue by changing the DATESBETWEEN function to reference each individual tables date column instead of "s_Date[Date]" as the date column reference. 
I altered variables within the script to now be: 

VAR Variable1 =
(CALCULATE(SUM(Actual$[Dollars]),DATESBETWEEN(Actual$[Date] ,Date_MinSlicer,Cost_MaxDate))
+ CALCULATE(SUM(Forecast$[Dollars]),DATESBETWEEN(Forecast$[Date],Cost_Date_Plus_One,Date_MaxSlicer)))

VAR Variable2 = CALCULATE(SUM(Actual$[Dollars]),DATESBETWEEN(Actual$[Date],Date_MinSlicer,Cost_MaxDate))

VAR Variable3 = CALCULATE(SUM(Forecast$[Dollars]),DATESBETWEEN(Forecast$[Date],Date_MinSlicer,Date_MaxSlicer))

VAR Variable4 = CALCULATE(SUM(Budget$[Dollars),DATESBETWEEN(Budget$[Date],Date_MinSlicer,Date_MaxSlicer))


No other parts were altered. The deltas evaluate properly (tested under various conditions) and data is no longer being pulled from 2019/2020 on the chart. I believe there must have been a problem using "s_Date[Date]" because it was returning the full date column range of 2019-2021. Let me know your input if you have time, I have often found the calculations using varying timeframe criteria/future dates are difficult to debug. 

@Anonymous  DAX can do all the work that relationships do, so if you want to pick up all data between dates, you don't actually need any relationship. Seems really counter-intuitive, but it works.

 

Other option is to keep the relationship between Date and Fact table, but then need to use the ALL or similar function  (such as DATESBETWEEN ) to ensure that the relationship doesn't restrict you to only seeing the date that is selected. As you have pointed out, it all comes down to using the right date in the right place in the DAX formulas.

 

Feel free to mark your most recent post as a solution, as it looks like you've solved this now?


Please @mention me in your reply if you want a response.

Copying DAX from this post? Click here for a hack to quickly replace it with your own table names

Has this post solved your problem? Please Accept as Solution so that others can find it quickly and to let the community know your problem has been solved.
If you found this post helpful, please give Kudos C

I work as a Microsoft trainer and consultant, specialising in Power BI and Power Query.
www.excelwithallison.com

Anonymous
Not applicable

Thank you for the thourough explanation, I am going to try the way you suggested so that I can fully understand both options.
Marking your explanation as the answer seeing that it provides a broader level of insight which would be helpful for any other users who have a similar question vs my problem specific answer! Thanks again! 

Helpful resources

Announcements
Microsoft Fabric Learn Together

Microsoft Fabric Learn Together

Covering the world! 9:00-10:30 AM Sydney, 4:00-5:30 PM CET (Paris/Berlin), 7:00-8:30 PM Mexico City

PBI_APRIL_CAROUSEL1

Power BI Monthly Update - April 2024

Check out the April 2024 Power BI update to learn about new features.

April Fabric Community Update

Fabric Community Update - April 2024

Find out what's new and trending in the Fabric Community.