五月天青色头像情侣网名,国产亚洲av片在线观看18女人,黑人巨茎大战俄罗斯美女,扒下她的小内裤打屁股

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

Power BI之DAX神功:第3卷第3回 CALCULATETABLE與FILTER函數(shù)的區(qū)別

2021-11-28 13:31 作者:孫興華zz  | 我要投稿

一、Calculatetable與Calculate只是返回結(jié)果不同

表名:Sheet1

【度量值】總銷售 = SUM(Sheet1[銷售])

【度量值】男生成績 = CALCULATE([總銷售],'Sheet1'[性別]="男")

【新建表】男生成績的表 = CALCULATETABLE('Sheet1','Sheet1'[性別]="男")

總結(jié):Calculate返回的是一個值,Calculatetable返回一張表。除此之外,Calculatetable繼承了Calculate幾乎所有能力,其中包含對上下文轉(zhuǎn)換的功能。

例如:sumx生成行上下文,套上Calculate后被轉(zhuǎn)換成篩選上下文。Calculatetable也可以進(jìn)行上下文轉(zhuǎn)換。

二、Calculatetable與filter的區(qū)別

我們?yōu)镾heet1這張表增加一行,與第1行重復(fù)的:張三,男,1

表名:Sheet1

【新建表】男生成績的表1 = CALCULATETABLE('Sheet1','Sheet1'[性別]="男")

【新建表】男生成績的表2 = FILTER('Sheet1','Sheet1'[性別]="男")

表面上看二者在結(jié)果上是一樣的,只是在這種情況下結(jié)果相同,我們看看不同情況

區(qū)別1:使用ALL表對Calculatetable的影響

我們以all函數(shù)為例,它既是表函數(shù)又是Calculate的調(diào)節(jié)器,剛才我們說了Calculatetable只是結(jié)果返回表,它繼承了Calculate幾乎所有的功能。

all函數(shù)在Filter中使用時,它是表函數(shù),在Calculate或Calculatetable中使用時是調(diào)節(jié)器

【新建表】表1 = FILTER(all('Sheet1'),'Sheet1'[性別]="男")

// all(表)就是復(fù)制這張表,?filter中使用all不會影響篩選,《DAX神功》第2卷第3回 計算移動平均值再次理解Filter+ALL 已經(jīng)得到了證明

【新建表】表2 = CALCULATETABLE(all('Sheet1'),'Sheet1'[性別]="男")

// 但是當(dāng)ALL放在Calculate或Calculatetable引擎中,ALL是調(diào)節(jié)器的作用,表2的意思是篩選男生并返回Sheet1這張表的所有行。等于沒篩選,結(jié)果返回的是Sheet1表中的所有行

區(qū)別2:使用ALL列注意去重和能否使用的問題

【新建表】表3 = FILTER(all(Sheet1[姓名]),'Sheet1'[性別]="男")

// all(Sheet1[姓名])是取姓名去重后的表,這張表中沒有性別列,所以無法篩選。

但是列名相同時可以使用

【新建表】表3 = FILTER(all(Sheet1[姓名]),'Sheet1'[姓名] in {"張三","王五"})


【新建表】表4 = CALCULATETABLE(all('Sheet1'[姓名]),'Sheet1'[性別]="男")

// 使用Calculatetable就可以這樣篩選(如果想得到正確結(jié)果去掉all函數(shù)改用Values或DISTINCT),原理:Calculate(計算器,篩選器)先執(zhí)行篩選器再執(zhí)行計算器,Calculatetable除了結(jié)果是表以外繼承了Calculate幾乎所有的功能,所以Calculatetable也是先執(zhí)行篩選器,后執(zhí)行計算器。先在Sheet1表中篩選所有男生的表,再取Sheet1表中姓名列去重后的表所有行。(等于篩選沒生效,因為all返回去重后的所有行)

想實現(xiàn)對男生的篩選結(jié)果,換用VALUES或DISTINCT

// 《DAX神功》第1卷第9回 詳細(xì)講解了Values或DISTINCT的區(qū)別

【新建表】表4 = CALCULATETABLE(VALUES('Sheet1'[姓名]),'Sheet1'[性別]="男")

【新建表】表4 = CALCULATETABLE(DISTINCT('Sheet1'[姓名]),'Sheet1'[性別]="男")

區(qū)別3:calculatetable與filter計值順序與上下文轉(zhuǎn)換

我們先使用ADDColumns對Sheet1添加列

《DAX神功》答網(wǎng)友問05 返回表的迭代函數(shù)你應(yīng)該注意什么?我們講解了ADDCOLUMNS與SELECTCOLUMNS的區(qū)別

ADDCOLUMNS相當(dāng)于整容,例如你長了兩只眼睛,整容可以讓你變成3只,但你還是你。

SELECTCOLUMNS相當(dāng)于克隆再整容,克隆你再整容成3只眼,長的一樣,但是那不是你。

【新建表】測試 = ADDColumns('Sheet1',"數(shù)量",CountRows('Sheet1'))

//?CountRows('Sheet1')返回4,在Sheet1中新建一個列,每一行都賦值為4

【新建表】表5 = FILTER(ADDColumns('Sheet1',"數(shù)量",CountRows('Sheet1')),'Sheet1'[性別]="男")

// filter生成的是行上下文,所以每一行顯示的都是CountRows('Sheet1')生成的值:4

Filter計算順序:

【新建表】表6 = CALCULATETABLE(ADDColumns('Sheet1',"數(shù)量",CountRows('Sheet1')),'Sheet1'[性別]="男")

//?CALCULATETABLE除了結(jié)果返回表外,幾乎繼承了calculate所有功能,它具備將行上下文轉(zhuǎn)換成篩選上下文的功能,所以每一行的CountRows('Sheet1')返回的是篩選后表中有多少行。

CALCULATETABLE計值順序:

如果我們想實現(xiàn)內(nèi)部的CountRows實現(xiàn)篩選功能:

根據(jù)《DAX神功》第1卷第19回?獨創(chuàng)的"母子關(guān)系"

我們講了下面sumx創(chuàng)建行上下文,寫在度量值中,就相當(dāng)于外面套上了Calculate實現(xiàn)了上下文轉(zhuǎn)換功能,但是他內(nèi)層的sum還是行上下文,無法換轉(zhuǎn),如果想轉(zhuǎn)換,就要在sum前面套上calculate實現(xiàn)內(nèi)層的轉(zhuǎn)換。

我們現(xiàn)在的案例可以改寫成:

【新建表】表7?=?CALCULATETABLE(ADDColumns('Sheet1',"數(shù)量",calculate(CountRows('Sheet1'))),'Sheet1'[性別]="男")

三、Filter代替Calculatetable

【新建表】表 8 = ADDCOLUMNS(FILTER('Sheet1','Sheet1'[性別]="男"),"數(shù)量",CALCULATE(COUNTROWS('Sheet1')))

運算過程:

四、Calculatetable缺點


當(dāng)初講calculate時,就詳細(xì)說明了一個問題

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

【度量值】指定日期1 = Calculate([總銷售],'銷售表'[日期]=date(2021,1,1))

【度量值】指定日期2 = Calculate([總銷售],FILTER(all('銷售表'[日期]),'銷售表'[日期]=date(2021,1,1)))

以上兩個度量值,既然可以用第1個度量值完成,為什么要使用第2個度量值呢?

因為Filter是高級篩選器,《孫興華講PowerBI火力全開》第5課 講到

【新建表】表 9 = CALCULATETABLE('商品表',[總銷售]>6)

// 與calculate一樣,calculatetable不支持 度量值與一個固定值進(jìn)行比較


【新建表】表 10 = FILTER('商品表',[總銷售]>6)

《DAX神功》第1卷第8回 基礎(chǔ)表函數(shù)之ALL與ALLEXCEPT函數(shù) 中,我重點講解了filter第1參數(shù)為何使用一端表的問題。

還是那句話,沒有什么時候就應(yīng)該用什么的說法,一切取決你的業(yè)務(wù),你需求用什么你就用什么。比如很多人問我,他有一個財務(wù)需求或是一個人力需求,自己不會做問我用PowerBI怎么做,甚至還有人這樣問,他說自己的需求保密不能給我看,問我應(yīng)該怎么辦。我想告訴大家,即便你給我看了,我也不一定幫得了你。隔行如隔山,我都不懂你的業(yè)務(wù),又何談分析呢?業(yè)務(wù)都是一點點積累起來的,大家應(yīng)該清楚,很多科學(xué)家、科研人員都是有常年實踐經(jīng)驗的,沒有誰能只坐在辦公室里對著屏幕搞分析,醒一醒,想用PowerBI分析一件事,你必需自己先要會做這件事,DAX只是計算。就好比你不會做一道數(shù)學(xué)題,你買什么樣的計算器也幫不了你。

孫興華講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辦公自動化、Python爬蟲、Python數(shù)據(jù)分析、ExcelVBA、WordVBA、AccessVBA、MySQL等等

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

Power BI之DAX神功:第3卷第3回 CALCULATETABLE與FILTER函數(shù)的區(qū)別的評論 (共 條)

分享到微博請遵守國家法律
桃江县| 方正县| 五家渠市| 饶阳县| 简阳市| 黄冈市| 驻马店市| 晴隆县| 南溪县| 海口市| 舞钢市| 凤台县| 英山县| 三江| 蓬安县| 合山市| 阜南县| 浏阳市| 海林市| 株洲市| 化德县| 天全县| 安丘市| 余干县| 河南省| 图木舒克市| 盐边县| 靖宇县| 扶绥县| 措勤县| 瑞金市| 鄂托克旗| 云安县| 北京市| 菏泽市| 神农架林区| 丰原市| 乳山市| 雅江县| 宁乡县| 龙岩市|