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

歡迎光臨散文網 會員登陸 & 注冊

PowerBI之DAX神功:第1卷第16回 創(chuàng)建篩選上下文與Filter+ALL應用

2021-08-19 11:40 作者:孫興華zz  | 我要投稿

《DAX神功》第1卷第12回?我們學習了創(chuàng)建行上下文可以使用迭代函數(shù),例如sumx等

DAX中有兩個函數(shù)可以創(chuàng)建篩選上下文:Calculate和Calculatetable

二者區(qū)別:Calculate返回值,Calculatetable返回表

接下來,我們以Calculate為例,進行介紹:

一、創(chuàng)建篩選上下文

例如:我們需要計算,同比增長率=(本期-同期)/ 同期

同比增長率1 =?

? ? VAR tb1=FILTER('銷售表','銷售表'[日期]="本期")

? ? VAR B=sumx(tb1,'銷售表'[銷售數(shù)量]*RELATED('商品表'[售價]))

? ? VAR tb2=FILTER('銷售表','銷售表'[日期]="同期")

? ? VAR T=sumx(tb2,'銷售表'[銷售數(shù)量]*RELATED('商品表'[售價]))

return

? ? DIVIDE((B-T),T)

將度量值放到矩陣中:

《The Definitive Guide to DAX》中指出上面的代碼不優(yōu)雅,它認為下面的代碼優(yōu)雅:

銷售金額 = sumx('銷售表','銷售表'[銷售數(shù)量]*RELATED('商品表'[售價]))

同比增長率2 =?

? ? VAR B=CALCULATE([銷售金額],'銷售表'[日期]="本期")

? ? VAR T=CALCULATE([銷售金額],'銷售表'[日期]="同期")

return

? ? DIVIDE((B-T),T)


我們可以合并這兩個度量值

同比增長率2 =?

? ? VAR B=CALCULATE(sumx('銷售表','銷售表'[銷售數(shù)量]*RELATED('商品表'[售價])),'銷售表'[日期]="本期")

? ? VAR T=CALCULATE(sumx('銷售表','銷售表'[銷售數(shù)量]*RELATED('商品表'[售價])),'銷售表'[日期]="同期")

return

? ? DIVIDE((B-T),T)


然而同比增長率1,書中是故意分成多行寫的,讓你看上去很繁瑣,你將TB變量都放到sumx

同比增長率1 =?

? ? VAR B = sumx(FILTER('銷售表','銷售表'[日期]="本期"),'銷售表'[銷售數(shù)量]*RELATED('商品表'[售價]))

? ? VAR T = sumx(FILTER('銷售表','銷售表'[日期]="同期"),'銷售表'[銷售數(shù)量]*RELATED('商品表'[售價]))

return

? ? DIVIDE((B-T),T)


這叫視覺假像:例如下圖是一個靜態(tài)圖片,但是你可能會看到它在動

但是問題并不是出現(xiàn)在代碼優(yōu)雅上面,而是篩選上下文作用于整個模型

也許它在實際分析中的意義不大,但是你要知道他的區(qū)別。雖然兩個同比增長率都不能夠使用日期篩選,但是通過創(chuàng)建篩選上下文返回的值是正確的,同比增長率2只是日期列被取消了篩選。

二、Calculate另一種寫法和秘密

講這個知識之前,我們要先回憶《DAX神功》第1卷第14回講的變形金剛,我們已經推導了這種寫法的由來

例如:拿到銷售表中本期所有行的表

【新建表】新表 = FILTER(ALL('銷售表'),'銷售表'[日期]="本期")

解讀:從銷售表中篩選日期是"本期"的所有行數(shù)據。(將這張表做為篩選條件放到Calculate篩選器中任何字段都不能篩選,因為ALL(表))

例如:拿到銷售表中日期列本期表

新表 = FILTER(ALL('銷售表'[日期]),'銷售表'[日期]="本期")

解讀:從銷售表的日期列中找到本期。(將這張表做為篩選條件放到Calculate篩選器中只有日期列不能篩選,因為ALL(列)

我們通過上述過程,書寫以下度量值:

本期銷量1 = CALCULATE([總銷量],'銷售表'[日期]="本期")

本期銷量2 = CALCULATE([總銷量],filter(all('銷售表'[日期]),'銷售表'[日期]="本期"))

本期銷量3 = CALCULATE([總銷量],filter(all('銷售表'),'銷售表'[日期]="本期"))

現(xiàn)在問題來了:以下3個度量值是等價的嗎?

本期銷量1 = CALCULATE([總銷量],'銷售表'[日期]="本期")

本期銷量2 = CALCULATE([總銷量],filter(all('銷售表'[日期]),'銷售表'[日期]="本期"))

本期銷量4 = CALCULATE([總銷量],FILTER('銷售表','銷售表'[日期]="本期"))

本期銷量1與本期銷量2是等價的,但是與本期銷量4是不一樣的,這又是為什么呢?

本期銷量2 = CALCULATE([總銷量],filter(all('銷售表'[日期]),'銷售表'[日期]="本期"))

本期銷量2,由于我們使用了all(列),它不能使用日期篩選是正常的。

本期銷量4 = CALCULATE([總銷量],FILTER('銷售表','銷售表'[日期]="本期"))

本期銷量4,我們沒有使用all函數(shù),他可以篩選也是正常的。

【不正常的是本期銷量1】

本期銷量1 = CALCULATE([總銷量],'銷售表'[日期]="本期")

本期銷量1,我們沒有使用all函數(shù),但是它仍然無法使用日期篩選


這個問題,我們下回再說。


《DAX神功》文字版合集,同步更新中:

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

《DAX神功》視頻版合集,同步更新中:

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

更多教程合集:

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

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


PowerBI之DAX神功:第1卷第16回 創(chuàng)建篩選上下文與Filter+ALL應用的評論 (共 條)

分享到微博請遵守國家法律
拉孜县| 迁安市| 长武县| 山东| 达州市| 旺苍县| 呼图壁县| 武夷山市| 利川市| 凤冈县| 祁门县| 青阳县| 宜兴市| 宁德市| 津南区| 涡阳县| 陵水| 荣昌县| 温州市| 呼图壁县| 泽州县| 牙克石市| 台中市| 六盘水市| 安庆市| 若羌县| 西华县| 安新县| 綦江县| 丹巴县| 安平县| 孝感市| 拜城县| 林口县| 南丹县| 玉龙| 建德市| 沙坪坝区| 富川| 延吉市| 翁源县|