如何在 powerbi 中使用 dax 返回某一值对应的字段名
如何在 powerbi 中使用 dax 返回某一值对应的字段名
Last edited 2022-5-31
原始数据
notion image
我们有一个 APP 的月活数据,并对每个 APP 进行了分类,在 dax 案例中,我们主要使用黄色圈出来的前三列。
notion image
需要解决的问题一我们需要用计算每个系列中月活最大值对应的 APP,如:社交类返回 “微信”;视频类返回“爱奇艺” 等
解决思路:我们知道,如果需要求最大值的话,我们可以直接用 maxx,或者 calculate+max 解决,但是要返回值对应的行字段相对复杂一些。我们先看下公式:类别最大月活 APP = CALCULATE(MAX('信息流流量'[app]),FILTER('信息流流量','信息流流量'[月活(万台)]=MAX('信息流流量'[月活(万台)])))我们使用 filter 对当前表做一个筛选,筛选条件用:’信息流流量’[月活(万台)]=MAX(‘信息流流量’[月活(万台)],筛选中,max 函数会忽略当前行上下文,始终返回外部上下文对应的最大值。然后我们使用 CALCULATE+MAX(‘信息流流量’[app]) 的方式获取当前筛选条件下的 [app] 名称(ps: 此处 max 只是为了将单一行聚合为值,也可以使用 min 替代)公式拖入矩阵中,我们看下结果:
notion image
结果中,每个 app 行对应的自己的值,我们不需要,我们可以使用 if+hasonevalue 给过滤掉,最终公式:类别最大月活 APP = IF(HASONEVALUE('信息流流量'[app]),"", CALCULATE(MAX('信息流流量'[app]),FILTER('信息流流量','信息流流量'[月活(万台)]=MAX('信息流流量'[月活(万台)]))))
notion image
结果也就是我们所需要的结果了。那如果我们需要返回月活排名第二,或者第三的 app 呢?思考涉及到排名,我们想到的函数肯定是 rankx 函数,其实我们是需要计算每个 [系列] 对应的 app 的月活排名,然后对齐排名进行筛选,然后利用 calculate+max 套路返回我们对应的 app系列内 app 月活排名,我们使用如下公式:系列内APP排名 = RANKX(ALLEXCEPT('信息流流量','信息流流量'[系列]),CALCULATE(SUM([月活(万台)])))
notion image
使用前面的思路我们套入公式返回月活第 2 的 APP = CALCULATE(MIN('信息流流量'[app]),FILTER(VALUES('信息流流量'[app]),RANKX(ALLEXCEPT('信息流流量','信息流流量'[系列]),CALCULATE(SUM([月活(万台)])))=2))
notion image
我们可以看到,结果中,为我们返回了月活排名第二的 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
  • PowerBI
  • DAX
  • Power BI 重磅推出:自助数据仓库 掌控数据就是掌控力量 通过PowerBI与百度API打造账户异常实时监控调整系统
    Catalog