BI技巧丨RankxYoY

作者: Fabric丨白茶 | 来源:发表于2022-12-29 20:23 被阅读0次

    群友: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的初学者。


    相关文章

      网友评论

        本文标题:BI技巧丨RankxYoY

        本文链接:https://www.haomeiwen.com/subject/bphiartx.html