国产精品天干天干,亚洲毛片在线,日韩gay小鲜肉啪啪18禁,女同Gay自慰喷水

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

Power BI之DAX神功:第2卷第21回 數(shù)據(jù)沿襲和TREATAS函數(shù)

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

數(shù)據(jù)沿襲我們一直在用,只是你不知道他的概念而已。如果不利用數(shù)據(jù)沿襲并非不能實現(xiàn)想要的效果,這節(jié)課我們就展開講一下數(shù)據(jù)沿襲。

一、什么是數(shù)據(jù)沿襲?

《DAX神功》答網(wǎng)友問05 返回表的迭代函數(shù)你應該注意什么?

我向大家證明了:

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

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

表名:Sheet1

【新建表】

tb =?ADDCOLUMNS(SELECTCOLUMNS('Sheet1',"學生姓名",'Sheet1'[姓名]),"分數(shù)",[總分])

//?SELECTCOLUMNS克隆Sheet1,新字段名是:學生姓名,取Sheet1表中的姓名列生成新字段,用ADDCOLUMNS在克隆表新字段中添加“分數(shù)”列,使用度量值【總分】按人篩選。

友情提示:我的案例Sheet1是一端表,如果是多端表你要考慮姓名去重的問題。將公式中SELECTCOLUMNS的第1參數(shù)'Sheet1'替換為Values('Sheet1'[姓名])??DISTINCT('Sheet1'[姓名])?。

《DAX神功》第1卷第9回講到二者區(qū)別:根據(jù)自己需求選擇使用

Values(表):復制一張表。

Distinct(表):所有列都重復才去重并返回去重后的表。

雖然我在克隆表中新建了字段,但是我給新字段做了一個記號,記號上寫著原來的字段是Sheet1[姓名]。我為克隆表中新字段匹配度量值【總分】時,其實度量值是按原字段規(guī)則給新字段匹配。

這樣說我覺得還是很官方,咱們說個通俗易懂的,我叫孫興華,我是男的,我通過手術變成了女人,通過合法途徑改變了姓名、身份證號碼、性別。但是公安機關會在公安系統(tǒng)里做標識,注明了我原身份證號。(如下圖所示)

一年之后,某法院受理了一起孫興華欠他人5萬元的案件,借款人叫孫興華,身份證123。但是現(xiàn)在的孫興華和身份證號123已經(jīng)不存在了。法院傳票不是發(fā)給孫興華,而是發(fā)給貂蟬,通過原身份證號這個標識,找到變成女人之后的孫興華。--這就是沿襲,也可以叫它延續(xù),血脈相傳,叫什么不重要,你開心就好。

多個列之間也可以沿襲:

兩張表之間建立關系:

【新建表】tb1 = SELECTCOLUMNS('Sheet3',"姓名新",'Sheet3'[姓名],"科目新",RELATED('Sheet4'[科目]) )

// 從Sheet3表中獲取姓名列,從Sheet4表中獲取科目列,分別重命名

我們?yōu)檫@張新表分配度量值:

【新建表】tb1 = ADDCOLUMNS(SELECTCOLUMNS('Sheet3',"姓名新",'Sheet3'[姓名],"科目新",RELATED('Sheet4'[科目]) ),"分數(shù)",[總分])

在這個基礎上還可以使用度量值篩選:

【新建表】tb1 = filter(ADDCOLUMNS(SELECTCOLUMNS('Sheet3',"姓名新",'Sheet3'[姓名],"科目新",RELATED('Sheet4'[科目]) ),"分數(shù)",[總分]),[總分]<7 && [總分]>2)

二、什么情況下失去數(shù)據(jù)沿襲

【1】通過新建表保存的表會失去數(shù)據(jù)沿襲

孫興華變成女人后,電腦記錄了這一切,但是這只限于我在國內(nèi)通過合法途徑改名、改性別、改身份證號。如果我是偷渡到泰國,做了手術,改了性別,通過泰國的關系上了戶口。找我就不容易了。

【新建表】tb1 = ADDCOLUMNS(SELECTCOLUMNS('Sheet3',"姓名新",'Sheet3'[姓名],"科目新",RELATED('Sheet4'[科目]) ),"分數(shù)",[總分])

// 當我通過新建表,創(chuàng)建了一張新表時,列上的標記就不存在了。

【新建表】tb2 = FILTER(tb1,[總分]<7 && [總分]>2)

// 這時就沒有沿襲了

【2】修改列表達式失去沿襲

例如下圖所示,雖然貂蟬記錄了原身份證號,但是寫錯了,也就查不到孫興華了。

【新建表】tb1 = ADDCOLUMNS(SELECTCOLUMNS('Sheet3',"姓名新","姓名:"&'Sheet3'[姓名],"科目新","科目:"& RELATED('Sheet4'[科目]) ),"分數(shù)",[總分])

三、為什么表構(gòu)造函數(shù)不能直接做Calculate的篩選器

有下面兩張表,我們不建立關系

【度量值】總分 = sum(Sheet1[分數(shù)])

【度量值】篩選 = CALCULATE([總分],'Sheet2')

// Sheet1和Sheet2沒有關系,沒有關系就沒辦法篩選,上面的度量值【篩選】返回結(jié)果:1+2+3=6 (張三、李四、王五三個人的成績),就是沒進行篩選

表構(gòu)造函數(shù)就是這樣的情況:《DAX神功》第1卷第3回 表構(gòu)造函數(shù)

【新建表】表構(gòu)造函數(shù) = {"張三","李四"}??

// 官方語言管這個叫“匿名表”,我不管你是匿名還是實名,沒關系就是沒關系

那我問問你,下面這兩個公式有什么區(qū)別:

【度量值】篩選 =?CALCULATE([總分],'Sheet2')

【度量值】篩選表構(gòu)造函數(shù) =?CALCULATE([總分],?{"張三","李四"})

// 一樣的,都是沒有篩選【總分】,為什么沒有篩選?因為你沒有建立關系

四、如果我想使用表構(gòu)造函數(shù)篩選度量值應該怎么做?

【度量值】篩選張三和李四 = CALCULATE([總分],'Sheet1'[姓名] in {"張三","李四"})

// 因為:總分 =?sum(Sheet1[分數(shù)])? 在本案例上,我想篩選度量值【總分】中張三和李四的分數(shù),那就只能在Sheet1這張表的姓名字段上下手。我需要讓表構(gòu)造函數(shù)關聯(lián)到Sheet1姓名字段。于是我使用了?'Sheet1'[姓名]?in?{"張三","李四"} Sheet1姓名字段中找出張三和李四

拓展問題:當我們將度量值放到矩陣中會發(fā)現(xiàn),度量值不能被姓名篩選,但是它可以被班級篩選

為什么會出現(xiàn)這樣的情況?《DAX神功》第1卷第17回 KEEPFILTERS函數(shù) 中我們講到:

【度量值】篩選張三和李四 =?CALCULATE([總分],'Sheet1'[姓名]?in?{"張三","李四"})

【度量值】等價公式=CALCULATE([總分],filter(all('Sheet1'[姓名]),'Sheet1'[姓名] in {"張三","李四"}))

我在《DAX神功》番外篇 第1回?Calculate+ALL表 與 Filter+ALL表 是兩個概念 中對此做出了詳盡的解釋。

如果我們想實現(xiàn)篩選功能如何處理呢?

【1】Calculate使用Keepfilters恢復指定列的篩選

篩選張三和李四 = CALCULATE([總分],KEEPFILTERS('Sheet1'[姓名] in {"張三","李四"}))

【2】filter中將all改成Values或DISTINCT

等價公式=CALCULATE([總分],filter(DISTINCT('Sheet1'[姓名]),'Sheet1'[姓名] in {"張三","李四"}))

等價公式=CALCULATE([總分],filter(Values('Sheet1'[姓名]),'Sheet1'[姓名] in {"張三","李四"}))

Ps:關于VALUES與DISTINCT函數(shù)的區(qū)別,詳見《DAX神功》第1卷第9回

總結(jié): {"張三","李四"}就是我們說的貂蟬,'Sheet1'[姓名] 就是我們說的孫興華,意思是{"張三","李四"}來源于'Sheet1'[姓名]中,這就是數(shù)據(jù)沿襲。

五、使用 TREATAS 函數(shù)修改數(shù)據(jù)沿襲

《PowerBI火力全開》第24課??TREATAS 函數(shù)

我告訴大家,TREATAS 函數(shù)功能是:把第1參數(shù)當做第2參數(shù)的篩選器,通過一參篩選二參

TREATAS({"張三","李四"},Sheet1[姓名])? // 用{"張三","李四"}篩選Sheet1中的姓名列

相當于

'Sheet1'[姓名] in {"張三","李四"}??// 將Sheet1中的姓名列中包含{"張三","李四"}的篩選出來

現(xiàn)在你應該清楚的看到了TREATAS函數(shù)的作用,所以我們將公式寫成:

【度量值】改變數(shù)據(jù)沿襲 = CALCULATE([總分],TREATAS({"張三","李四"},Sheet1[姓名]))

這樣返回的結(jié)果,仍然是姓名列不能篩選,我們還是用Keepfilters處理:

改變數(shù)據(jù)沿襲 = CALCULATE([總分],keepfilters(TREATAS({"張三","李四"},Sheet1[姓名])))

六、實戰(zhàn)練習

我們想看每個會員卡號最后一次消費的金額:

【新建表】

日期表 = ADDCOLUMNS(

CALENDAR(FIRSTDATE('銷售表'[日期]),LASTDATE('銷售表'[日期])),

"年", YEAR ( [Date] ),

"季度", ROUNDUP(MONTH([Date])/3,0),

"月", MONTH([Date]),

"周", weeknum([Date]),

"年季度", year([date]) & "Q" & ROUNDUP(MONTH([Date])/3,0),

"年月", year([Date]) * 100 + MONTH([Date]),

"年周", year([Date]) * 100 + weeknum([Date]),

"星期幾", WEEKDAY([Date])

)

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

【度量值】最后一次購買的金額 = SUMX ('銷售表',CALCULATE ([總金額],'日期表'[Date] = max('銷售表'[日期])))

拓展知識:看到最后購買的日期

【度量值】最后一次購買的日期 = SUMX ('銷售表',CALCULATE (VALUES('銷售表'[日期]),'日期表'[Date] = max('銷售表'[日期])))

//?VALUES('銷售表'[日期])去重后以標題值的方式返回,詳見《DAX神功》第1卷第10回

《DAX神功》第1卷第15回?我們證明了以下內(nèi)容:

SUMMARIZECOLUMNS并不完美,它不支持上下文轉(zhuǎn)換時發(fā)生的計算,所以絕大部分度量值中不能使用,如果需要在度量值中執(zhí)行分組和新建列時用SUMMARIZE+ADDCOLUMNS

我們新建表時可以使用SUMMARIZECOLUMNS,現(xiàn)在需要寫度量值,我們改用SUMMARIZE+ADDCOLUMNS的組合:

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

【度量值】最后一次購買的日期=max('銷售表'[日期])?

【度量值】利用數(shù)據(jù)沿襲計算最后一次購買金額 =?

VAR tb1 = SUMMARIZE ('銷售表','銷售表'[會員卡號])

VAR tb2 =ADDCOLUMNS (tb1,"最后一次",[最后一次購買的日期])

return

CALCULATE ([總金額],TREATAS (tb2,'銷售表'[會員卡號],'日期表'[Date]))

// TREATAS 中tb2是第1參,'銷售表'[會員卡號],'日期表'[Date]是第2參

計算過程:

《孫興華講PowerBI火力全開》PowerBI必學課程

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神功:第2卷第21回 數(shù)據(jù)沿襲和TREATAS函數(shù)的評論 (共 條)

分享到微博請遵守國家法律
兰考县| 澳门| 西乌珠穆沁旗| 绥滨县| 凤阳县| 广丰县| 定陶县| 威海市| 渑池县| 汶上县| 将乐县| 浦城县| 昌图县| 凤阳县| 麻栗坡县| 乌海市| 略阳县| 融水| 眉山市| 盐边县| 固始县| 虹口区| 收藏| 华宁县| 西畴县| 中方县| 嘉善县| 库车县| 年辖:市辖区| 呈贡县| 烟台市| 清原| 柳州市| 正镶白旗| 木里| 德兴市| 孝昌县| 东乡族自治县| 汉寿县| 西宁市| 仲巴县|