相信大家在实际工作业务中经常会遇到排名情况,比如消费高低排名,销售业绩排名,门店盈利排名等等,如果少量数据直接排序就可以看出来,但是如果有大量数据进行排名怎么才能直观的看出来排名高低以及排名前几的占比呢,那么今天我们可以学2个DAX函数,就可以轻松实现。
首先介绍第一个函数RANKX排名函数,在学一个函数之前首先要搞明白这个函数是干什么的,然后知道其语法以及函数参数,掌握基本功再去实际工作中练习才能真正掌握,要知其然更要知其所以然。
语法:rankx(表,表达式,值,[升降序],[排序方法])
参数:
第一个参数是表
第二个参数是表达式,聚合表达式,也就是要按照什么对表进行排名
第三个参数值,可选,一般写空即可
第四个参数是升降顺序,可以是0或1,desc升序,asc降序
第五个参数是排序方法,默认skip是跳过,dense是紧凑,如果有相同值的话,跳过相同值的排名,直接下一个
返回:一个值
下面来实例,模拟了一个数据,针对测试数据表中关键词消费进行排名:
先编写基本的代码:
测试消费=SUM('测试数据'[消费])
编写RANKX代码:
RANKX消费排名 = RANKX(ALL('测试数据'[关键词]),[测试消费],,DESC,Dense)
结果如下:
从表中结果可以看到有不合理的地方,就是总计那块排名显示1,根据上下文影响,总计数据是61,进行排名的话肯定要比单个关键词消费要多,这块不难理解,那么怎么去掉这个1呢,毕竟原意是不想出现的,接下来就需要用到另外一个DAX函数:hasonevalue只有一个值,意思跟countrows( values(列名) ) = 1是一样的
语法:hasonevalue(列名)
作用:判断某列是否是一个值
返回:一个逻辑值
hasonevalue经常是跟if函数搭配使用的,两个搭配使用是黄金搭档
公式编写:
hasonevalue消费排名 = IF(HASONEVALUE('测试数据'[关键词]),[RANKX消费排名],BLANK())
结果如下:消费排名就可以了
那么如果想要看关键词消费前3名的占比怎么求呢,接下来就用到topn函数了
语法:topn(n,表,排序依据,[排序类型])
参数:
第一个参数返回的行数,前N行
第二个参数是需要提取的表
第三个参数是对表进行排序的依据,度量值,就是根据什么进行排序,消费还是资源等
第四个参数是排序类型,默认为0,是降序排序,1为升序排序
返回:是一个排名前几的表,所以需要和calculate等其他函数结合使用
注意:它最终返回可能不止N行,假如第N名有多个相等值,会全部计算进来
它与rankx的一个最大区别就是rankx返回排名的值,topn返回前N行的表,一个值,一个表
公式编写:
消费top2 = CALCULATE([测试消费],TOPN(2,ALL('测试数据'[关键词]),[测试消费],DESC))
求top2消费占比:
top2消费占比 = DIVIDE([消费top2],CALCULATE([测试消费],ALL('测试数据')))
最终结果如下:
再升级一下,topn函数中的n在工作中往往不是固定的,虽然说可以手工更改,但是如果一份报告交给上级,老板不懂bi得话,那么这么操作是不是不适合了呢,所以我们需要把n设定成可以选择得,这就得需要使用辅助表
在BI中选择“主页”-“输入数据”,建立一张数字表,由于此实例中模拟数据少,先建立1-5得排名表
书写度量值:
排名值 = MAX('排名辅助表'[排名列])
此函数中用max得意义就是要把排名列转换成值,便于放入topn中
在消费top2度量值中更改topn中得N,如下:
消费top2 = CALCULATE([测试消费],TOPN([排名值],ALL('测试数据'[关键词]),[测试消费],DESC))
当当当,结果就出来了,可以随意筛选前N名
本章内容只是简单得介绍了2个排名函数得用法,足以应对工作中得问题,今天内容就到这里,我是Sugarg,如果可以解决您的问题,可以点个赞,欢迎关注我,88
网友评论