前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >ONLY ONE度量值解决问题:并列排名

ONLY ONE度量值解决问题:并列排名

作者头像
陈学谦
发布2022-01-05 09:21:18
8450
发布2022-01-05 09:21:18
举报
文章被收录于专栏:学谦数据运营

大家好,我是学谦,这里是PowerBI学前班

今天继续更新【ONLY ONE度量值】专题。

全文1500字,阅读需5min。

引言

RANKX函数大家都很熟悉了,可以用来做排名。

比如,有这么一个数据:

我们拖到表中做个RANKX,有两种写法:

代码语言:javascript
复制
rankx1 = 
RANKX(
    CALCULATETABLE(
        VALUES(Data[Item]),
        ALL(Data[Item])
    ),
    CALCULATE(SUM(Data[Value]))
)

rankx2 = 
RANKX(
    CALCULATETABLE(
        VALUES(Data[Item]),
        ALL(Data[Item])
    ),
    CALCULATE(SUM(Data[Value])),
    ,
    ,
    Dense
)
//是否在第五个参数设置为dense

呈现结果:

rankx1是跳过了并列排名,比如从4个1直接跳到了5,而rankx2是不间断的排名,区别就在于rankx的第五参数dense。

两者都有不同的应用场景。

不过,今天要实现的目标是这样的,看最后一列,也就是并列排名中也有大小顺序,即去掉了并列排名:

今天将计算列写法和度量值写法都分享给大家,视情况进行选择。

计算列步骤

第一步:添加一列数值完全不同的辅助列,使用earlier或者var都可以:

代码语言:javascript
复制
列 = countrows(filter('data','data'[Item]>earlier('data'[Item])))

第二步:再添加一列排名的索引,以便让并列排名的小数点后的数值也不相同:

代码语言:javascript
复制
排名索引 = 'data'[Value]+value(("0.0"&'data'[列]))

第三步:接下来我们只要对这一列排名索引进行rankx就可以了:

代码语言:javascript
复制
rankx3 = 
RANKX(
    CALCULATETABLE(
        VALUES(data[Item]),
        ALL(data[Item])
    ),
    CALCULATE(SUM(data[排名索引]))
)

大功告成!

但是,还是那个问题,这样我们需要对模型添加2列额外的内容,会显得模型并不完美。

我们想通过不修改数据模型的前提下,进行不重复的排名。

也就是只使用一个度量值。

关注这一点的原因,也请大家再次参考这篇文章:

多用度量值,少用新建列:一个度量值解决分月均摊

度量值步骤

写度量值使用的办法与计算列可以说是完全一致,只不过所有的内容都是在度量值里进行:

代码语言:javascript
复制
排名 = 
var index_table=//第一步:先给这个数据表新建一个index列
ADDCOLUMNS(
    ALL(data),//此处一定要用ALL,去掉列的筛选器
    "Index",
    var a=[Item] //在var中使用var,这个技能可以好好利用
    return COUNTROWS(FILTER(ALL(data),[Item]>=a))
)

var rankx_table1=//第二步:根据index列加成新建一列
ADDCOLUMNS(
    index_table,
    "new_col",
    [value]+[Index]*0.01
)
var rankx_table2=//第三步:根据新建的列rankx
ADDCOLUMNS(
    rankx_table1,
    "rank1",
    rankx(rankx_table1,[new_col])
)
var rank_out=//第四步:根据选择的item确定rankx数字
MINx(
    FILTER(rankx_table2,[Item]=SELECTEDVALUE(Data[Item])),
    [rank1]
)
return rank_out

两种方案的计算步骤基本上一致,结果略有差异,但也只是在并列排名里顺序不太一样。

大家可以对比两种方案,写法上有什么优劣。并且在以后遇到数据表无法进行更改或者不想进行数据表的修改时,我们就可以通过写一个度量值的方式来避免。

而这,会让你对DAX的理解更加深刻!

我是学谦,这里是PowerBI学前班

如果觉得有用, 请对本文点赞、在看、转发三连,谢谢!

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-12-30,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 PowerBI生命管理大师学谦 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档