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

Earn a 50% discount on the DP-600 certification exam by completing the Fabric 30 Days to Learn It challenge.

Reply
charleshale
Responsive Resident
Responsive Resident

Lowest processor way to calc a trailing 4 quarter sum

Hi.   I'm wondering if anyone has opinions on the least processor-intensive way to do basic trailing X period measures in DAX for very large tables.

 

Ie lets say I want to do a simple CALCULATE ( /measure/,   /prior 4 quarters excluding current quarter/),  any thoughts on whether you'd use DATESINPERIOD, EDATE,  VAR with DimDate[Date] < _date, etc)?

 

I'm working with a 20m row table looking simply to reduce processor load

Thank you for any thoughts.

1 ACCEPTED SOLUTION

Thanks, @amitchandak .   Maybe best I handle this with semi-actual-DAX.

 

Any thoughts on which would be faster computationally for a trailing 4 quarters measurement of the following?

 

 

Trailing4Q (homemade) =

var _Lastq1 = CALCULATE([__measure__],PARALLELPERIOD(DimDate[Date],-1,QUARTER))
var _Lastq2 = CALCULATE([__measure__],PARALLELPERIOD(DimDate[Date],-2,QUARTER))
var _Lastq3 = CALCULATE([__measure__],PARALLELPERIOD(DimDate[Date],-3,QUARTER))
var _Lastq4 = CALCULATE([__measure__],PARALLELPERIOD(DimDate[Date],-4,QUARTER))
var _Trailng4Q = _Lastq1+_Lastq2+_Lastq3+_Lastq4

RETURN
_Trailng4Q 

 

vs this one suggested by QuickMeasure

 

Trailing4Q (QuickMeasure) = 

var _Trail4Q = 
IF(
	ISFILTERED('DimDate'[Date]),
	ERROR("Time intelligence quick measures can only be grouped or filtered by the Power BI-provided date hierarchy or primary date column."),
	var __LAST_DATE = DATEADD(ENDOFQUARTER('DimDate'[Date]),-3,MONTH)
	var __DATE_PERIOD =
		DATESBETWEEN(
			'DimDate'[Date],
			STARTOFQUARTER(DATEADD(__LAST_DATE, -3, QUARTER)),
			__LAST_DATE
		)
	RETURN
		sumx(
			CALCULATETABLE(
				SUMMARIZE(
					VALUES('DimDate'),
					'DimDate'[Date].[Year],
					'DimDate'[Date].[QuarterNo],
					'DimDate'[Date].[Quarter]
				),
				__DATE_PERIOD
			),
			CALCULATE(
				[_measure_],
				ALL(
					'DimDate'[Date].[MonthNo],
					'DimDate'[Date].[Month],
					'DimDate'[Date].[Day]
				)
			)
		)
)

RETURN 
_Trail4Q

 

 Note for PBIX geeks: My favorite formulation is Marco Russo's @SQLBI, which is the following -- super fast and elegant as usual from SQLBI -- but I couldnt see any easy way to map it to a measure -- ie it's built for a table

 

Months12M = 
CALCULATE (
    CALCULATE ( COUNTROWS ( VALUES ( Calendar[MonthName] ) ), Sales ),
    DATESBETWEEN (
        Calendar[FullDate],
        NEXTDAY ( SAMEPERIODLASTYEAR (LASTDATE ( Calendar[FullDate] ) ) ),
        LASTDATE ( Calendar[FullDate] )
    )
)

 

 

View solution in original post

5 REPLIES 5
amitchandak
Super User
Super User

I did not get it completely.

But with time intelligence and date calendar, we can get current prior and training qtr

 

QTD Sales = CALCULATE(SUM(Sales[Sales Amount]),DATESQTD(('Date'[Date])))

Last QTD Sales = CALCULATE(SUM(Sales[Sales Amount]),DATESQTD(dateadd('Date'[Date],-1,QUARTER)))
Last to last QTD Sales = CALCULATE(SUM(Sales[Sales Amount]),DATESQTD(dateadd('Date'[Date],-2,QUARTER)))
Next QTD Sales = CALCULATE(SUM(Sales[Sales Amount]),DATESQTD(dateadd('Date'[Date],1,QUARTER)))

Last year same QTD Sales = CALCULATE(SUM(Sales[Sales Amount]),DATESQTD(dateadd('Date'[Date],-1,Year)))
trailing QTR = CALCULATE(SUM(Sales[Sales Amount]),dateadd('Date'[Date],-1,QUARTER))
trailing  4 QTR = CALCULATE(SUM(Sales[Sales Amount]),dateadd('Date'[Date],-4,QUARTER))

 

To get the best of the time intelligence function. Make sure you have a date calendar and it has been marked as the date in model view. Also, join it with the date column of your fact/s. Refer :
https://radacad.com/creating-calendar-table-in-power-bi-using-dax-functions
https://www.archerpoint.com/blog/Posts/creating-date-table-power-bi
https://www.sqlbi.com/articles/creating-a-simple-date-table-in-dax/

 

Appreciate your Kudos.

Thanks, @amitchandak .   Maybe best I handle this with semi-actual-DAX.

 

Any thoughts on which would be faster computationally for a trailing 4 quarters measurement of the following?

 

 

Trailing4Q (homemade) =

var _Lastq1 = CALCULATE([__measure__],PARALLELPERIOD(DimDate[Date],-1,QUARTER))
var _Lastq2 = CALCULATE([__measure__],PARALLELPERIOD(DimDate[Date],-2,QUARTER))
var _Lastq3 = CALCULATE([__measure__],PARALLELPERIOD(DimDate[Date],-3,QUARTER))
var _Lastq4 = CALCULATE([__measure__],PARALLELPERIOD(DimDate[Date],-4,QUARTER))
var _Trailng4Q = _Lastq1+_Lastq2+_Lastq3+_Lastq4

RETURN
_Trailng4Q 

 

vs this one suggested by QuickMeasure

 

Trailing4Q (QuickMeasure) = 

var _Trail4Q = 
IF(
	ISFILTERED('DimDate'[Date]),
	ERROR("Time intelligence quick measures can only be grouped or filtered by the Power BI-provided date hierarchy or primary date column."),
	var __LAST_DATE = DATEADD(ENDOFQUARTER('DimDate'[Date]),-3,MONTH)
	var __DATE_PERIOD =
		DATESBETWEEN(
			'DimDate'[Date],
			STARTOFQUARTER(DATEADD(__LAST_DATE, -3, QUARTER)),
			__LAST_DATE
		)
	RETURN
		sumx(
			CALCULATETABLE(
				SUMMARIZE(
					VALUES('DimDate'),
					'DimDate'[Date].[Year],
					'DimDate'[Date].[QuarterNo],
					'DimDate'[Date].[Quarter]
				),
				__DATE_PERIOD
			),
			CALCULATE(
				[_measure_],
				ALL(
					'DimDate'[Date].[MonthNo],
					'DimDate'[Date].[Month],
					'DimDate'[Date].[Day]
				)
			)
		)
)

RETURN 
_Trail4Q

 

 Note for PBIX geeks: My favorite formulation is Marco Russo's @SQLBI, which is the following -- super fast and elegant as usual from SQLBI -- but I couldnt see any easy way to map it to a measure -- ie it's built for a table

 

Months12M = 
CALCULATE (
    CALCULATE ( COUNTROWS ( VALUES ( Calendar[MonthName] ) ), Sales ),
    DATESBETWEEN (
        Calendar[FullDate],
        NEXTDAY ( SAMEPERIODLASTYEAR (LASTDATE ( Calendar[FullDate] ) ) ),
        LASTDATE ( Calendar[FullDate] )
    )
)

 

 

Note - the (homemade) function is testing as about 3x faster than the QuickMeasure version, perhaps ironically!  

 

 

Thanks for sharing. Kudos !!
Greg_Deckler
Super User
Super User

Difficult to be specific without sample data. Please see this post regarding How to Get Your Question Answered Quickly: https://community.powerbi.com/t5/Community-Blog/How-to-Get-Your-Question-Answered-Quickly/ba-p/38490


@ me in replies or I'll lose your thread!!!
Instead of a Kudo, please vote for this idea
Become an expert!: Enterprise DNA
External Tools: MSHGQM
YouTube Channel!: Microsoft Hates Greg
Latest book!:
The Definitive Guide to Power Query (M)

DAX is easy, CALCULATE makes DAX hard...

Helpful resources

Announcements
LearnSurvey

Fabric certifications survey

Certification feedback opportunity for the community.

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.