首先看兩個(gè)新建度量值的公式:
度量值1=rankx(all('公司信息'[城市]),[1.金額合計(jì)])
度量值=rankx(all('公司信息'[城市]),sum('商機(jī)記錄'[商機(jī)金額(M)])
其中[1.金額合計(jì)]的公式就是sum('商機(jī)記錄'[商機(jī)金額(M)]的公式
然而,兩個(gè)度量值在拖入表格后的結(jié)果不同
前者是1,2,3,4,5
后者是1,1,1,1,1
這因?yàn)樵赑owerBI的底層運(yùn)算邏輯中存在“行上下文”和“篩選上下文”的區(qū)別,要完全弄懂兩者的區(qū)別很浪費(fèi)時(shí)間,可以簡(jiǎn)單理解為行上下文是雙層循環(huán),篩選上下文是單層循環(huán),而計(jì)算排名如果使用篩選上下文會(huì)導(dǎo)致錯(cuò)誤。
個(gè)人的淺顯理解如下(可能很片面,希望讀者能夠補(bǔ)充):
篩選上下文,因?yàn)槭菃螌友h(huán),只會(huì)遍歷一次城市名列表,所以在算完一個(gè)城市的金額以后會(huì)直接排序,此時(shí)其他城市沒(méi)有計(jì)算結(jié)果,所以排名是1,在遍歷下一個(gè)城市的時(shí)候,前面的計(jì)算值會(huì)刷新,第二個(gè)城市有金額,然后直接排序,其他的還是沒(méi)金額,仍然是第1,以此類推。
行上下文是兩層循環(huán),外層第一個(gè)城市北京,內(nèi)層sum全部遍歷,返回了所有城市的金額,然后對(duì)外層的第一個(gè)城市排序,這時(shí)候名次正確,然后外層循環(huán)到第二個(gè)城市,這時(shí)候內(nèi)層sum又全部計(jì)算一次,第二個(gè)城市又生成排名,然后是外層第三個(gè)城市,這時(shí)候內(nèi)層sum再次全部遍歷,生成第三個(gè)城市正確排名,以此類推。
如果僅僅是數(shù)據(jù)分析,我們需要做到的是避免犯這種錯(cuò)誤,所以“不要把聚合函數(shù)直接嵌套進(jìn)其他函數(shù)內(nèi)部使用,需要先把聚合函數(shù)在外部創(chuàng)建度量值,然后將度量值引用進(jìn)入其他函數(shù)內(nèi)部”或者“使用calculate函數(shù)包裹聚合函數(shù)放入其他函數(shù)內(nèi)部,因?yàn)閏alculate可以把篩選上下文轉(zhuǎn)成行上下文”。








暫無(wú)數(shù)據(jù)