如何在 powerbi 中使用 dax 返回某一值对应的字段名

原始数据


我们有一个APP的月活数据,并对每个APP进行了分类,在dax案例中,我们主要使用黄色圈出来的前三列。

需要解决的问题一

我们需要用计算每个系列中月活最大值对应的APP,如:社交类返回“微信”;视频类返回“爱奇艺”等

解决思路:

我们知道,如果需要求最大值的话,我们可以直接用maxx,或者calculate+max解决,但是要返回值对应的行字段相对复杂一些。
我们先看下公式:

类别最大月活APP = CALCULATE(MAX('信息流流量'[app]),FILTER('信息流流量','信息流流量'[月活(万台)]=MAX('信息流流量'[月活(万台)])))

我们使用filter对当前表做一个筛选,筛选条件用:'信息流流量'[月活(万台)]=MAX('信息流流量'[月活(万台)],筛选中,max函数会忽略当前行上下文,始终返回外部上下文对应的最大值。

然后我们使用CALCULATE+MAX('信息流流量'[app]) 的方式获取当前筛选条件下的[app]名称(ps:此处max只是为了将单一行聚合为值,也可以使用min替代)

公式拖入矩阵中,我们看下结果:

结果中,每个app行对应的自己的值,我们不需要,我们可以使用if+hasonevalue给过滤掉,最终公式:

类别最大月活APP = IF(HASONEVALUE('信息流流量'[app]),"", CALCULATE(MAX('信息流流量'[app]),FILTER('信息流流量','信息流流量'[月活(万台)]=MAX('信息流流量'[月活(万台)]))))

结果也就是我们所需要的结果了。

那如果我们需要返回月活排名第二,或者第三的app呢?

思考

涉及到排名,我们想到的函数肯定是rankx函数,其实我们是需要计算每个[系列]对应的app的月活排名,然后对齐排名进行筛选,然后利用calculate+max 套路返回我们对应的app

系列内app月活排名,我们使用如下公式:
系列内APP排名 = RANKX(ALLEXCEPT('信息流流量','信息流流量'[系列]),CALCULATE(SUM([月活(万台)])))

使用前面的思路我们套入公式

返回月活第2的APP = CALCULATE(MIN('信息流流量'[app]),FILTER(VALUES('信息流流量'[app]),RANKX(ALLEXCEPT('信息流流量','信息流流量'[系列]),CALCULATE(SUM([月活(万台)])))=2))


我们可以看到,结果中,为我们返回了月活排名第二的app

可以将公式调整为VAR更好理解

返回月活第2的APP-VAR = 
VAR n = 2
VAR app_list = VALUES('信息流流量'[app])
VAR app_filter = FILTER(app_list,RANKX(ALLEXCEPT('信息流流量','信息流流量'[系列]),CALCULATE(SUM('信息流流量'[月活(万台)])))=n)
RETURN CALCULATE(MIN('信息流流量'[app]),app_filter)

关于dax值对应字段返回的问题就简单介绍到这块,需要下载文件,欢迎大家关注公众号,回复:dax01

雷公子 | 简快EXCEL【powerbipro】