BI技巧丨计算Topn品名

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


©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 最近在群里,小伙伴提出了一个有意思的算法逻辑,决定分享给大家。 先来看看本期的案例数据: 如图,数据相对而言比较简...
    Fabric丨白茶阅读 2,472评论 0 4
  • 还记得之前白茶写过关于移动平均的内容么?当时白茶曾经说过,实际需求中,难免会遇到销售挂蛋的时候(也就是当天没有销售...
    Fabric丨白茶阅读 3,379评论 0 0
  • 之前白茶曾经分享过《同比环比问题》,但是在实际需求中还远远不能满足实际的需要。为什么呢?说来也很简单,假如我开了一...
    Fabric丨白茶阅读 3,902评论 0 1
  • 在DAX函数中,关于排名的函数有RANKX和TOPN函数,这两个函数白茶已经写过很多文章了,都是关于排名问题的,但...
    Fabric丨白茶阅读 3,332评论 0 1
  • TOP函数 TOP函数,属于高级函数之一,通常可以用来返回固定数量的行数。 对于一定数据量级的事实表来说,此函数可...
    Fabric丨白茶阅读 2,555评论 0 1

友情链接更多精彩内容