Scenario:
Suppose we have a Data Model as follows:
The relationships between tables are as follows:
The sample data for the Current Year (2023) and Previous Year (2022) is as per below:
The relationships between tables are as follows:
The sample data for the Current Year (2023) and Previous Year (2022) is as per below:
In the below sample data, for Current Year (2023), the data is only available for until 03rd May of W1.
For the Previous Year (2022) we have data for the Whole Year, until the last Week of Year.
Units Sold = SUM(tbl_Sales[Units_Sold])
1) Using SAMEPERIODLASTYEAR Method:
The following is a very standard method that considers all the Dates in Previous Year instead of exact dates. Hence this method will NOT return the accurate results.
Units Sold LY =
CALCULATE( [Units Sold],
SAMEPERIODLASTYEAR(DimCalendar[DimDate]))
)
YoY Growth =
VAR _CY = [Units Sold]
VAR _LY = [Units Sold LY]
VAR _Ratio = DIVIDE(_CY,_LY)-1
RETURN
IF ( _CY<>BLANK() && _LY<>BLANK(), _Ratio, BLANK())
2) Using DATESBETWEEN Method:
The following method considers all Dates in Previous Year until end of the same Month (May) based on the Max Sales Month in Current Year.
This method also will NOT return the accurate results, as the Current Month (May) is not yet completed in the Current Year.
Units Sold LY (till Same Month) =
VAR _MinDtLY = EDATE(MIN(DimCalendar[DimDate]),-12)
VAR _LimitMaxDtLY = EOMONTH(MAX(tbl_OrderDetails[Order_Date]),-12)
VAR _MaxSaleDT = MAX(tbl_OrderDetails[Order_Date])
VAR _LY_Dates = DATESBETWEEN(DimCalendar[DimDate], _MinDtLY, _LimitMaxDtLY)
VAR _LY_Sales = CALCULATE( [Units Sold], _LY_Dates)
VAR _Result = IF(_MinDtLY<=_MaxSaleDT, _LY_Sales, BLANK())
RETURN
_Result
YoY Growth (till Same Month) =
VAR _CY = [Units Sold]
VAR _LY = [Units Sold LY (till Same Month)]
VAR _Ratio = DIVIDE(_CY,_LY)-1
RETURN
IF ( _CY<>BLANK() && _LY<>BLANK(), _Ratio, BLANK())
The results of the above 2 Methods are as follows:
----------------------------------------------------------------
3) Using SAMEPERIODLASTYEAR Method (same Dates from LY):This method considers only exact same dates from the Last Year to calculate Sales for same period Last Year.
Units Sold LY (till Same Dates Method1) =
VAR _MinDtLY = EDATE(MIN(DimCalendar[DimDate]),-12)
/* VAR _LimitMaxDtLY = EOMONTH(MAX(tbl_OrderDetails[Order_Date]),-12) */
VAR _MaxSaleDT = MAX(tbl_OrderDetails[Order_Date])
VAR _LimitDatesLY =
SAMEPERIODLASTYEAR(
FILTER(VALUES(DimCalendar[DimDate]),
DimCalendar[DimDate]<= _MaxSaleDT
)
)
VAR _LY_Sales = CALCULATE( [Units Sold], _LimitDatesLY)
VAR _Result = IF(_MinDtLY<=_MaxSaleDT, _LY_Sales, BLANK())
RETURN
_Result
YoY Growth (Same Dates Method1) =
VAR _CY = [Units Sold]
VAR _LY = [Units Sold LY (till Same Dates Method1)]
VAR _Ratio = DIVIDE(_CY,_LY)-1
RETURN
IF ( _CY<>BLANK() && _LY<>BLANK(), _Ratio, BLANK())
4) Using DATESBETWEEN Method (same Dates from LY):
This method considers only exact same dates from the Last Year to calculate Sales for same period Last Year.
This method considers only exact same dates from the Last Year to calculate Sales for same period Last Year.
Units Sold LY (till Same Dates Method2)=
VAR _MinDtLY = EDATE(MIN(DimCalendar[DimDate]),-12)
/* VAR _LimitMaxDtLY = EOMONTH(MAX(tbl_OrderDetails[Order_Date]),-12) */
VAR _MaxSaleDT = MAX(tbl_OrderDetails[Order_Date])
VAR _LimitMaxDtLY =
LASTDATE(
SAMEPERIODLASTYEAR(
FILTER(VALUES(DimCalendar[DimDate]),
DimCalendar[DimDate]<= _MaxSaleDT
)
)
)
VAR _LY_Dates = DATESBETWEEN(DimCalendar[DimDate], _MinDtLY, _LimitMaxDtLY)
VAR _LY_Sales = CALCULATE( [Units Sold], _LY_Dates)
VAR _Result = IF(_MinDtLY<=_MaxSaleDT, _LY_Sales, BLANK())
RETURN
_Result
YoY Growth (Same Dates Method2) =
VAR _CY = [Units Sold]
VAR _LY = [Units Sold LY (till Same Dates Method2)]
VAR _Ratio = DIVIDE(_CY,_LY)-1
RETURN
IF ( _CY<>BLANK() && _LY<>BLANK(), _Ratio, BLANK())
The results of the above 2 Methods are as follows:
No comments:
Post a Comment
Hi User, Thank You for visiting My Blog. Please post your genuine Feedback or comments only related to this Blog Posts. Please do not post any Spam comments or Advertising kind of comments which will be Ignored.