群友:PowerBI可以实现两年的排名差异么?
白茶:可以!安排!
本期的问题,来自于群内小伙伴的一个实际应用场景。在实际业务中,这个需求属于常见类型,展示当前排名时,用户关注的不只是当下的排名,还有对比以往排名的变化情况,这样才能发现到底是哪些产品的排名发生了变动,变动情况是怎样的,产生变化的原因是什么,进行问题的溯源。
案例数据:
案例数据共计三张表,产品表,分店表,事实表。
将其导入到PowerBI中,添加日期表。
Dim_Date =
GENERATE (
CALENDAR ( MIN ( 'Fact_Sales'[Date] ), MAX ( 'Fact_Sales'[Date] ) ),
VAR DA = [Date]
VAR YEAR =
YEAR ( DA )
VAR QUARTER =
"Q" & FORMAT ( DA, "Q" )
VAR MONTE =
FORMAT ( DA, "MM" )
VAR DAY =
DAY ( DA )
RETURN
ROW (
"Year", YEAR,
"Quarter", QUARTER,
"Month", MONTE,
"DayOfMonth", DAY,
"YearQuarter", YEAR & QUARTER,
"YearMonth", YEAR & MONTE
)
)
模型关系如下:
基础指标:
我们添加如下度量值。
销售数量:
001.Quantity =
SUM ( 'Fact_Sales'[Quantity] )
当前年份:
002.CurrentYear =
MAX ( 'Dim_Date'[Year] )
这里用Selectedvalue其实也是可以的,用Max的好处在于可以避免切片器无筛选的情况。当前排名:
003.QuantityRankx =
IF (
HASONEVALUE ( 'Dim_Store'[StoreName] ),
RANKX ( ALLSELECTED ( 'Dim_Store'[StoreName] ), [001.Quantity] )
)
将上述度量值拖放到表中展示如下:
那么,如何计算两年排名差异呢?
1.计算出去年的销售数量
2.计算出去年的排名
3.根据今年和去年排名计算差异
思路缕清了,添加如下度量值:
去年销量:
004.LastYearQuantity =
VAR CurrentYear = [002.CurrentYear]
RETURN
CALCULATE (
[001.Quantity],
FILTER ( ALL ( 'Dim_Date' ), 'Dim_Date'[Year] = CurrentYear - 1 )
)
去年排名:
005.LastYearQuantityRankx =
IF (
HASONEVALUE ( 'Dim_Store'[StoreName] ),
RANKX ( ALLSELECTED ( 'Dim_Store'[StoreName] ), [004.LastYearQuantity] )
)
排名差异:
006.RankxYoY =
[003.QuantityRankx] - [005.LastYearQuantityRankx]
展示效果如下:
当然,有不喜欢分段写法的小伙伴,我们也可以一段代码出结果。
007.FinalRankxYoY =
VAR CurrentYear = [002.CurrentYear]
VAR CurrentYearRankx =
RANKX ( ALLSELECTED ( 'Dim_Store'[StoreName] ), [001.Quantity] )
VAR LastYearRankx =
RANKX (
ALLSELECTED ( 'Dim_Store'[StoreName] ),
CALCULATE (
[001.Quantity],
FILTER ( ALL ( 'Dim_Date' ), [Year] = CurrentYear - 1 )
)
)
VAR Result = CurrentYearRankx - LastYearRankx
RETURN
IF ( HASONEVALUE ( 'Dim_Store'[StoreName] ), Result )
展示效果如下:
PS:
数据格式,可以在度量值格式里面直接修改为“+0;-0;0”,这里就不赘述了。
这里是白茶,一个PowerBI的初学者。