March 31 - April 2, 2025, in Las Vegas, Nevada. Use code MSCUST for a $150 discount! Early bird discount ends December 31.
Register NowBe one of the first to start using Fabric Databases. View on-demand sessions with database experts and the Microsoft product team to learn just how easy it is to get started. Watch now
Hi,
I have question about YTD Last year DAX formula. Even though I have read many blogs and topics here in community, I still don't know how to solve this issue.
Suppose I have data like below.
ID | Date | Amount |
1 | 01.01.2016 | 10 |
2 | 02.01.2016 | 15 |
3 | 03.01.2016 | 11 |
4 | 10.01.2016 | 8 |
5 | 20.02.2016 | 7 |
6 | 01.01.2017 | 10 |
7 | 02.01.2017 | 12 |
8 | 03.01.2017 | 9 |
I would like to figure up YTD value of amount for actual data (year 2017) and then YTD value for corresponding period previous year.
For YTD I use formula:
YTD = CALCULATE(SUM(Data[Amount]);DATESYTD(Date[Date]))
For YTD LY I use formula:
YTD LY = CALCULATE([YTD];SAMEPERIODLASTYEAR(Date[Date]))
Then when I use these formulas in PBI, I have got incorrect value for YTD LY. I expect value 36 (dates: 1.1. - 3.1. 2016), but in total I have got 44 (it also calculates Amount 8 in 10.1.2016) - so it gives me period of january 2016, but I want only the corresponding days from 2017.
But YTD LY value in pic below on row for 3.1.2017 is OK.
Does anybody know the solution?
Thanks.
Regards.
Pavel
Solved! Go to Solution.
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
Hello Friends,
I am trying to calculate YTD from previous years, 2022, 2021, 2020.... I dont want to show the full year amount but compare against current YTD, for example Today 4/APR/2023 against 4/APR/2022/2021/2020... Etc, i am connected to a DataSet hence I cannot modify the model but create DAX measures locallly. I will appreciate any input, help from your side.
Thank you.
Luis
Hi,
The measure should be something like this
YTD sales LY = calculate([sales],datesytd(calendar[date],"31/12"))
To the slicer drag Year from the Calendar Table and select a year. To your visual, drag Month name from the Calendar Table.
Step 1. find YTD = TOTALYTD([Total Sales],CALENDAR[Period],"3/31") - for FY from April-March.
Step 2.
VAR MAXDATE =MAX(CALENDAR'[Period])
RETURN
CALCULATE([TOTAL YTD],SAMEPERIODLASTYEAR(DATESBETWEEN(CALENDAR[Period],BLANK(),MAXDATE)))
rajkmr2195,
Thank you for this formula, very useful and beautifuly made 🙂
Carlos
First of, thanks for all the help on the issue @OwenAuger however, I have a problem which I couldn't resolve at all since I am kind of beginner with DAX.
My dataset has unique Sales Year-Month-Day values from 01.01.2016 to 05.20.2017 in date format and was related with a Calendar Date column which ends at 05.20.2017 as well since it's the last data collection date.
First I was struggling to compare MoM for 2016 and 2017 sales. For example, May of 2017 contains only 20 days of data and I wanted to compare the same date range for May of 2016; however, it was fetching all the 2016 data till the end of the year. I solved that issue with your explanation.
For this year sales I used:
This Year Sales = CALCULATE(SUM([SalesRevenue]);DATESYTD('Calendar'[Date].[Date]))
And for last year sales:
Last Year Sales = VAR DataMaxDate = CALCULATE ( MAX ( 'Calendar'[Date] ); ALL ( 'Calendar'[Date] ) ) RETURN CALCULATE ( [This Year Sales]; SAMEPERIODLASTYEAR ( INTERSECT ( VALUES ( 'Calendar'[Date].[Date] ); DATESBETWEEN ( 'Calendar'[Date].[Date]; BLANK (); DataMaxDate ) ) ) )
Since my intention was comparing apples to apples, this was the result I was looking for. I finally was able compare the first 20 days of May 2016 and first 20 days of May 2017.
However, now I am not able to visually filter any of the months. I mean, when I click Last Year Sales, it's automatically accumulating This Year Sales as well. Please see below:
My intention is:
1. To be able to individually filter every year's sales like I was able to before.
2. If I cannot filter individually because of the formulas I used, I am kind of looking for a new way to compare last year's and this year's sales. Like I mentioned, last data date must be taken into account for last year's datas.
3. I created a different Calendar.[Date] and columns related with my sales date data. (Format is in date like 01.01.2016)
Thanks for all the help, rgrds,
When you have a clustered column chart with two or more measures as Value fields, visual filters resulting from clicking on the bars are applied to the axis field.
In your example, the visual filter is applied to the month dimension on the axis to include only "May", but both measures are still visible.
You can de-emphasise bars for a particular measure by clicking on the legend, but this can't be done simultaneously with an axis dimension filter. Also, I don't think this 'filters' any other visual in any way.
Also I couldn't work out what the $3.68m represents. Are you saying that's the total of Last Year Sales and This Year Sales?
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
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
Hi Owen
I had the same probleme and it caused me quite a headache.
Your solution helped me a lot. Many thanks for that.
All I need to do now is to understand the mechanics properly.
Thanks again.
@Anonymous
It's working fine, but i want to show whatever date values are there in the last year. In below example i want to display 10.01.2016 as well
ID Date Amount
1 01.01.2016 10
2 02.01.2016 15
3 03.01.2016 11
4 10.01.2016 8
5 01.01.2017 10
6 02.01.2017 12
7 03.01.2017 9
Is it possible to show please let me know
I used the following formula to find YTD and YTD LY
YTD = CALCULATE(SUM('data'[konto]),
FILTER('year',[Date]>=DATE(YEAR(TODAY()),1,1) && [Date]
<=(DATE(YEAR(TODAY()),MONTH(TODAY()),1)-1)))
YTD LY = CALCULATE(SUM('data'[konto]),
FILTER('year',[Date]>=DATE(YEAR(TODAY())-1,1,1) && [Date]
<=(DATE(YEAR(TODAY())-1,MONTH(TODAY()),1)-1)))
when I select year 2018 It only showes me YTD, how can I fix this to look both YTD and YTD LY when year 2018 is selected?
Hi,
What exactly are you trying to do? Describe your question in detail and share some data.
Just wanted to say thanks @OwenAuger for your solution . Saved me lot of anxiety and time 🙂
@OwenAuger, is it possible to calculate YTD based on fiscal year instead of calendar year (i.e. Starting at Apr 1, instead of Jan 1)?
Hi,
The second input of the DATESYTD function is the year end date. See here.
@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.
Proud to be a 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
Thanks for the reply.
>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?<
Not exactly. YTD should look at the current date, and apply that respective end date to the previous years. If today is the 22nd of August, there is no fact data beyond today, and for prior years I would expect to see data from 1/1/2016 up through 8/22/2016, and likewise 1/1/2015 up through 8/22/2015, and on down the years. Come September 2, 3, and 4, (Labor Day holiday weekend in the US) there will be no fact data generated, but the filter context should be current date, not the last date for which we have data.
I'm usually pretty good with DAX but this one seems to have me stumped. I do have YTD measure defined as follows:
YTD = TOTALYTD ( [Base Measure], 'Dates'[Date] )
Thanks in advance.
-Todd
Proud to be a Super User! | |
March 31 - April 2, 2025, in Las Vegas, Nevada. Use code MSCUST for a $150 discount!
Your insights matter. That’s why we created a quick survey to learn about your experience finding answers to technical questions.
Arun Ulag shares exciting details about the Microsoft Fabric Conference 2025, which will be held in Las Vegas, NV.
User | Count |
---|---|
129 | |
90 | |
75 | |
58 | |
53 |
User | Count |
---|---|
200 | |
104 | |
101 | |
67 | |
55 |