最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊

Power BI之DAX神功:第2卷第9回 多張表建立關(guān)系時(shí)RankX的應(yīng)用

2021-09-26 14:09 作者:孫興華zz  | 我要投稿

一、多表排名【度量值】

【度量值】總銷售 = sum('表2'[銷售])

【度量值】排名1 = rankx(ALLEXCEPT('表2','表2'[銷售]),[總銷售])

解釋:如果只有【表2】這一張表,我們要得到排名可以寫上面的公式也可以寫成

【度量值】排名2 = rankx(ALL('表2'[編碼]),[總銷售])

但是,有多張表時(shí)(建立關(guān)系時(shí)),一端可以篩選多端,RankX就是要控制這些列不能實(shí)現(xiàn)篩選功能。所以,我們的寫法是:除了【表2】中的“銷售”列以外,都不能篩選。

Ps:如果您想釋放某個(gè)列使其可以篩選,REMOVEFILTERS為您服務(wù)。詳見《DAX神功》答網(wǎng)友問06

這是最簡單、最好理解的一種方法,當(dāng)然方法不止一種,還有一種方法是通過笛卡兒積的方式

但是在回答這個(gè)方法之前,我先回答一個(gè)網(wǎng)友的問題。

Ps:這種方法應(yīng)用于度量值可以,應(yīng)用于新建列時(shí)非常麻煩。本文章會(huì)詳細(xì)講解。

二、回答網(wǎng)友問題

問:網(wǎng)友看到某作者使用GENERATE函數(shù),網(wǎng)友問:為什么我操作就失敗了呢?可是我用人家作者提供的表操作正常呀?

【度量值】消費(fèi)額 = SUM ( '示例'[消費(fèi)] )

【度量值】排名1=RANKX ( GENERATE ( ALL ( '客戶表' ), ALL ( '示例' ) ), [消費(fèi)額] )

以上公式正常針對上表正常,但是換成自己的表就出錯(cuò)!

答:因?yàn)槿思沂褂玫氖且粚σ魂P(guān)系,在《DAX神功》第1卷第1回,我就告訴大家,我遇到一對一關(guān)系會(huì)將其合并成一張表,再將類型和消費(fèi)為空的記錄過濾掉,就會(huì)減少很多原理知識(shí)。如下圖所示:

你現(xiàn)在用這張表算排名,是不是就非常簡單了?詳細(xì)操作步驟雷同于《DAX神功答網(wǎng)友問06》這里就不再重復(fù)去講了。

總結(jié):表關(guān)系如果不是一對多關(guān)系,可以操作,但是你要多學(xué)原理知識(shí)。北京到天津做火車30分鐘左右就到了,可你駕著筋斗云去了趟南天門,又跑了趟大雷音寺,最終到達(dá)目的地天津,不是不行是太繞了。如果你有10張表都是多對多關(guān)系,《The Definitive Guide to DAX》作者可能也會(huì)蒙。比如這個(gè)案例,我將其進(jìn)行數(shù)據(jù)清洗,變成一張表,操作就簡單了。一對一關(guān)系,不僅是用到了笛卡兒積,還要考慮示例表中缺失值的問題。

但是,當(dāng)你照貓畫虎,放到咱們這個(gè)一對多的案例上,【排名3】顯示的結(jié)果并不是你需要的。

【度量值】排名3 = RANKX ( GENERATE ( ALL ( '表1' ), ALL ( '表2' ) ), [總銷售] )

我先說一下你套用公式出錯(cuò)的原因:

GENERATE(表1,表2) :返回一個(gè)表,其中包含 表1 中的每一行與在 表1 的當(dāng)前行的上下文中計(jì)算 表2 所得表之間的笛卡爾乘積?

GENERATE(all(表1),all(表2)) :返回一個(gè)表,其中包含 去重后的表1 中的每一行與在 去重后的表1 的當(dāng)前行的上下文中計(jì)算 去重后的表2 所得表之間的笛卡爾乘積?

說人話:就是兩張表做笛卡兒積(關(guān)于笛卡兒積的概念我就不再這里啰嗦了)

【1】友情提示

【新建表】 表 = GENERATE ( ALL ( '表1' ), ALL ( '表2' ) )

如果你兩個(gè)表中有相同名稱的列,新建表時(shí)會(huì)提示你,生成的新表不能有重復(fù)列。因?yàn)槟闶窃谏蓪?shí)體表。如果你放在RankX第1參數(shù)中,它是虛擬存在,不會(huì)有這個(gè)問題。

防止有人一定要在新建表里測試,我們暫且將案例修改了字段名稱:

【2】當(dāng)表是一對一時(shí)的工作原理

【度量值】總銷售=sum(表2[銷售])

【度量值】排名 = RANKX ( GENERATE ( ALL ( '表1' ), ALL ( '表2' ) ), [總銷售] )

這樣可以正確的拿到每個(gè)人對應(yīng)的排名。

【3】當(dāng)表是一對多時(shí)的工作原理

【度量值】總銷售=sum(表2[銷售])

【度量值】1排名 = RANKX ( GENERATE ( ALL ( '表1' ), ALL ( '表2' ) ), [總銷售] )

這樣就拿不到正確的排名!

【4】正確的方法

【度量值】2排名 = RANKX ( GENERATE ( ALL ( '表1'[名稱] ), ALL ( '表2'[編碼2] ) ), [總銷售] )

這樣就可以拿到正確排名了:

當(dāng)然,還可以使用另一個(gè)函數(shù):

GENERATE函數(shù)可以應(yīng)用兩張表的笛卡兒積

CROSSJOIN函數(shù)可以應(yīng)用多張表的笛卡兒積,例如:CROSSJOIN(表1,表2,表3……)

所以上面的案例我們換成CROSSJOIN也可以

【度量值】3排名 = RANKX ( CROSSJOIN ( ALL ( '表1'[名稱] ), ALL ( '表2'[編碼2] ) ), [總銷售] )

三、多表排名【新建列】

我非常不建議你在新建列里做這樣事,因?yàn)槟憧紤]的東西要更多,比如,上節(jié)課講的度量值要通過Calculate對計(jì)值的列取消篩選。例如:

【新建列】排名 = rankx(ALLEXCEPT('表2','表2'[銷售]),CALCULATE([總銷售],all('表2'[銷售])))

這時(shí)又出現(xiàn)循環(huán)依賴,我們還要改!這個(gè)公式再改下去,你就暈了!

這時(shí),我們可以用笛卡兒積(多表)的方式是最簡單的:

【新建列】排名 = RANKX ( CROSSJOIN ( ALL ( '表1'[名稱] ),ALL('表1'[編碼]), ALL ( '表2'[編碼] ) ), CALCULATE([總銷售],ALL('表2'[銷售]) ))

Ps:ALL('表2'[銷售]) 這個(gè)事情我上節(jié)課說讓你在新建列算排名時(shí)記住,否則7秒以后你就忘記了。

我們RankX部分的原理知識(shí)先暫時(shí)告一段落!下節(jié)課我們學(xué)習(xí)新知識(shí)!

《孫興華講PowerBI火力全開》PowerBI必學(xué)課程

https://www.bilibili.com/video/BV1qa4y1H7wp

《DAX神功》文字版合集:

https://www.bilibili.com/read/readlist/rl442274

《DAX神功》視頻版合集:

https://www.bilibili.com/video/BV1YE411E7p3

PowerBI(DAX函數(shù))、PowerQuery(M函數(shù))、Python辦公自動(dòng)化、Python爬蟲、Python數(shù)據(jù)分析、ExcelVBA、WordVBA、AccessVBA、MySQL等等

https://www.bilibili.com/read/cv10222110?


Power BI之DAX神功:第2卷第9回 多張表建立關(guān)系時(shí)RankX的應(yīng)用的評論 (共 條)

分享到微博請遵守國家法律
陕西省| 达州市| 乡宁县| 封开县| 瓦房店市| 湘西| 闽侯县| 津市市| 威信县| 长葛市| 庆元县| 嵊泗县| 抚松县| 桑植县| 格尔木市| 阿拉善左旗| 方正县| 阿合奇县| 唐山市| 韩城市| 鸡西市| 巴马| 从化市| 株洲市| 营口市| 云南省| 万山特区| 康平县| 蒙山县| 南投市| 富蕴县| 内乡县| 黄平县| 合阳县| 加查县| 文山县| 滦平县| 信宜市| 巴塘县| 汉寿县| 夏邑县|