---恢復內容開始---
原始數據

我們有一個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
---恢復內容結束---
