美文网首页BI学习笔记
BI技巧丨计算Topn品名

BI技巧丨计算Topn品名

作者: Fabric丨白茶 | 来源:发表于2023-01-13 09:13 被阅读0次

    BOSS:白茶,问你个事,能不能动态的根据我们的销量,告诉我销量前三的商品有哪些?这样便于我针对商品进行调控。

    白茶:Topn问题?

    BOSS:什么套不套的,我不懂,你就说能不能整吧!

    白茶:(#%¥%@&@**@)没问题!

    在日常工作中,我们往往需要根据各式各样的业务逻辑去计算相关指标的排名,以便于业务可以有针对性进行调控。

    但是在某些业务场景下,其实需要的不仅仅是针对某个维度的排名,而是需要我们能够将排名前几的某些维度,作为结果呈现出来,以便进行向上汇报。

    针对此需求,我们该如何在PowerBI实现呢?

    案例数据:

    这是本期的案例数据,共计三张表,一张产品表,一张分店表,一张事实表。

    将上述的三张表,导入到PowerBI中,模型关系如下:

    到这里,我们的准备工作结束。

    基础指标:

    销售数量:

    001.Quantity = 
    SUM ( 'Fact_Sales'[Quantity] )
    

    销量排名:

    002.Rankx = 
    RANKX ( ALLSELECTED ( 'Dim_Product'[ProductName] ), [001.Quantity] )
    

    将基础指标放在明细表中呈现,结果如下:

    那么,我们该如何计算销量前三品名呢?

    方法1:利用Topn函数。

    编写如下代码:

    003.Topn = 
    CONCATENATEX (
        TOPN ( 3, VALUES ( 'Dim_Product'[ProductName] ), [001.Quantity], DESC ),
        [ProductName],
        ",",
        [001.Quantity], DESC
    )
    

    结果如下:

    从结果上可以看到,我们利用Topn函数,根据销售数量,从ProductName字段中提取出了销量为前三的品名。

    再通过CONCATENATEX函数将前三的品名拼接起来,“,”为分隔符。

    方法2:利用CalculateTable函数。

    编写如下代码:

    004.CalculateTable = 
    CONCATENATEX (
        CALCULATETABLE (
            VALUES ( 'Dim_Product'[ProductName] ),
            FILTER ( ALLSELECTED ( 'Dim_Product'[ProductName] ), [002.Rankx] <= 3 )
        ),
        [ProductName],
        ",",
        [001.Quantity], DESC
    )
    

    结果如下:

    在这个例子中,我们首先利用的是CalculateTable函数可以对表进行上下文重置的特性,以及Filter函数筛选出排名小于等于3的品名。

    再通过CONCATENATEX函数将前三的品名拼接起来,“,”为分隔符。

    对比Topn的写法,中间多了[Rankx]函数作为度量值中转,写法上绕了一下。

    方法3:利用Calculate函数。

    编写如下代码:

    005.Calculate = 
    VAR T1 =
        CALCULATE (
            MAX ( 'Dim_Product'[ProductName] ),
            FILTER ( ALLSELECTED ( 'Dim_Product'[ProductName] ), [002.Rankx] = 1 )
        )
    VAR T2 =
        CALCULATE (
            MAX ( 'Dim_Product'[ProductName] ),
            FILTER ( ALLSELECTED ( 'Dim_Product'[ProductName] ), [002.Rankx] = 2 )
        )
    VAR T3 =
        CALCULATE (
            MAX ( 'Dim_Product'[ProductName] ),
            FILTER ( ALLSELECTED ( 'Dim_Product'[ProductName] ), [002.Rankx] = 3 )
        )
    VAR Result = T1 & "," & T2 & "," & T3
    RETURN
        Result
    

    结果如下:

    对比前面的两种写法,直接使用Calculate函数的计算显得粗暴了一些。

    通过MAX这类函数可以对文本进行聚合的特性,再利用Filter函数依次筛选出排名为1、2、3的品名。

    最终,通过“&”连接符,将三个结果拼接。

    PS:

    1.白茶其实更建议大家使用方法1,写法和性能上更优;

    2.CalculateTable的写法对比方法1,稍微绕了一下,但是从内部结构上来讲比Topn函数好理解;

    3.直接使用Calculate函数更适用于新手,简单粗暴,但是后续无法与参数搭配使用。

    这里是白茶,一个PowerBI的初学者。


    相关文章

      网友评论

        本文标题:BI技巧丨计算Topn品名

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