Forum Discussion
YTD last year DAX
- 9 years ago
It should work fine in Power BI.
You didn't have any dates in your Data table beyond 3 Jan 2017 did you?
Here is a sample PBIX file with your data posted above where the measure is working:
I made a small change to the YTD measure so that it is not displayed after the max date in Data table, but the YTD LY measure is the same as I posted.
Have a play with that - there must be some difference in your model if it is not working.
Owen
It sounds like you want your YTD LY measure to detect the last date that appears in your Data table, and only translate dates up to that date back to last year within SAMEPERIODLASTYEAR.
You can use a pattern like this (note the distinction between Data[Date] which I assume is a column of Data, and Date[Date]):
YTD LY (limited by last date in Data table) =
VAR DataMaxDate =
CALCULATE ( MAX ( Data[Date] ), ALL ( Data ) )
RETURN
CALCULATE (
[YTD],
SAMEPERIODLASTYEAR (
INTERSECT (
VALUES ( Date[Date] ),
DATESBETWEEN ( Date[Date], BLANK (), DataMaxDate )
)
)
)DataMaxDate is the global maximum date in your Data table. You can define it differently if you want to apply different logic.
Cheers,
Owen :)
Hi OwenAuger, thanks for your response,
when I implement your measure to PBI I get the same value of 44, as in previous YTD LY measure. Am I wrong with something? Is there some additional prerequisite in PBI or something?
Thanks and regards
Pavel
- OwenAuger9 years ago
Super User
It should work fine in Power BI.
You didn't have any dates in your Data table beyond 3 Jan 2017 did you?
Here is a sample PBIX file with your data posted above where the measure is working:
I made a small change to the YTD measure so that it is not displayed after the max date in Data table, but the YTD LY measure is the same as I posted.
Have a play with that - there must be some difference in your model if it is not working.
Owen
- PavelR9 years ago
Solution Specialist
Awesome OwenAuger, thanks a lot!
I really appreciate your effort. I will try it implement to my PBI file.
Could you also explain to me please, why the function SAMEPERIODLASTYEAR doesn't do that comparison as default behavior? I mean the comparison of the corresponding previous period? Why it compute YTD LY as the whole month (value 44)?
I think that my requirement ("business case") is quite standard, but the solution is not so easy :smileyhappy:
Regards.
Pavel
- PavelR9 years ago
Solution Specialist
OwenAuger I've just found the prerequisity I had asked before. It is connected with the way how the date dimension is created. You use CALENDARAUTO function, but I use formula with CALENDAR function.
Date = CALENDAR(MIN(Data[Date]);MAX(Data[Date]))
When there is implemented CALENDARAUTO function, everything works fine. When CALENDAR function implemented it doesn't work - again I get 44 value.
Why is that so please? I don't want to use CALENDARAUTO function because of the fact, that you then see dates that have not occured.
Regards.
Pavel
- ToddChitt9 years ago
Super User
@OwenAuger: I tried your DAX formula and it works, to an extent. It works for the current year. I'm looking to display a table that shows the following three columns: [Year], [YTD], [YTD Last Year].
To test your formula I built a simple Excel sheet with two columns: [Sale Date] and [Sales] and populted it with every date between 1/1/2015 and today (8/18/2017) and $1.00 of Sales on each day (hey, makes it easy to test, right?). This table is joined to a fully populated Date table with dates ranging back and forward several years.
After adjusting your formula and building my table, I see this:
2017 is showing correct LYTD value of 231 (one over this year because of Feb. 29 2016) but Year 2016 should show 230. Instead it show 365.
Seems LYTD should be a VERY simple calculation in DAX. (MDX had the function ParallelPeriod that made this SUPER EASY!) I've spent hours pouring over blogs, forums and technet and still can't seem to get it.
Frustrated.
Thanks in advance.
- OwenAuger9 years ago
Super User
The requirement from the original post was to createa a "YTD Last Year" measure that restricts the dates for "last year" just in the special case where the current date filter context goes past the last date for which data exists.
The reason for even wanting such a measure is that the built-in behaviour of time intelligence functions is to shift the current Date table filter context in some way. So if 2017 is selected on the Date table, the filter context is 1 Jan 2017 to 31 Dec 2017, and "last year" is 1 Jan 2016 to 31 Dec 2016, regardless of whether any data exists relating to particular dates within those years.
It sounds like you're wanting something slightly different...
Is it correct that you want you YTD Last Year measure to always look at the number of days for which data is present in the "latest" year (2017 in your example), and restrict the date context accordingly when shifting back dates not only from 2017 but also 2016 or any earlier year?
Is this because in your model, "YTD" is defined relative to the actual date when the model is refreshed (i.e. today in the real world), rather than the current date filter context?
Would you still want the YTD measure to behave as they currently are, or also restrict all years based on the latest year?
It can all be done, just a matter of defining the desired behaviour of the measures.
Regards,
Owen
- rajibmahmud9 years ago
Helper III