PowerBI之DAX神功:第1卷第5回 聚合函數(shù)與迭代函數(shù)介紹
提示:這節(jié)課的知識(shí)建議配合視頻觀看,有的地方需求測(cè)試才能理解
一、什么是聚合函數(shù)?
聚合函數(shù)對(duì)一組值執(zhí)行計(jì)算,并返回單個(gè)值。這一組值一般指一個(gè)列。
《孫興華講PowerBI火力全開》第9集 <1> 聚合函數(shù)
我們先回顧一下,聚合函數(shù)在Excel工作表中的應(yīng)用

很多人,在做數(shù)據(jù)分析時(shí)出錯(cuò)了,問題就出在Excel使用時(shí)隨心所欲。
? ? ? ?你問問自己(打印在紙上或者就是以觀看為目的除外):為什么要在Excel中使用合并單元格?為什么要使用多行表頭?一列數(shù)據(jù)為什么胡寫亂寫數(shù)據(jù)類型?為什么別人給你們分享數(shù)據(jù)庫(kù)知識(shí)時(shí),你們會(huì)組團(tuán)抵觸,因?yàn)槟阕杂蓱T了,受不了約束?可能我說話不好聽,但是你要仔細(xì)想想這些問題都是誰造成的?不如,以后就直接將表格截個(gè)圖,這樣可以有效的防止別人修改你的數(shù)據(jù):)
? ? ? ?你們可以觀看《孫興華答網(wǎng)友問》欄目中,很多WordVBA比較復(fù)雜的單元格合并和拆分我都會(huì)用數(shù)學(xué)的方法去算,講給提問者聽,盡力的幫助他,因?yàn)閃ord是打印在紙上或是觀看為目的。但是ExcelVBA中合并拆分比Word簡(jiǎn)單N倍,我基本上沒有回答過關(guān)于合并/拆分單元格和多行表頭的事情,因?yàn)樗谧鲆患e(cuò)誤的事情,如果你縱容他,他會(huì)「得寸進(jìn)尺」「變本加厲」的將數(shù)據(jù)搞亂,你最終不是幫他而是害他,你一定要讓他撞南墻,頭破血流,直到他浪子回頭。
多表頭、合并單元格,就不要拿來做數(shù)據(jù)分析
? ? ? ? 你自己研究煩了,以后也就不會(huì)去用多表頭、合并單元格了因?yàn)槟愕男袨?,給別人造成了太大麻煩,我怎么可能幫你呢?有些人一定會(huì)找借口說,我是做表格匯總的,他們給我的表格。那我問你,模板誰給他們的?要追究責(zé)任,我建議追究做模板的人。
? ? ? ? DAX基于SQL思維,SQL是處理數(shù)據(jù)庫(kù)的,數(shù)據(jù)庫(kù)中每個(gè)列所有單元格的數(shù)據(jù)類型是一致的。如果你的數(shù)據(jù)很亂,可以先使用PowerQuery等工具進(jìn)行數(shù)據(jù)清洗,不是我套娃,這明顯是你自己整自己
https://www.bilibili.com/video/BV1oa4y1j75e
接下來我們看看PowerBI中的DAX聚合函數(shù):

當(dāng)你將圖1-5-1的Excel文件導(dǎo)入PowerBI那一刻起,PowerBI會(huì)自動(dòng)分析每一列的數(shù)據(jù)類型。
【列1】里面有個(gè)“孫”,所以他就會(huì)用文本型保存這一列。
【列2】中的True是邏輯值,但是0.1和0.2他不能給你轉(zhuǎn)成True吧?所以這一列也會(huì)使用文本型。

如圖1-5-2所示,我們可以選中一列,調(diào)整數(shù)據(jù)類型
接下來我們看一下在PowerBI中聚合函數(shù)的情況:×未必都是報(bào)錯(cuò),有時(shí)它只返回一個(gè)0,更坑人。

? ? ? ? 講實(shí)話,你腦容量有限,這些規(guī)則你根本就記不住,就算當(dāng)時(shí)記住了,時(shí)間久了一樣忘記,從根源上解決問題就是數(shù)據(jù)類型工整化,現(xiàn)在非打印表或觀賞表使用多表頭或合并單元格或同一列中數(shù)據(jù)類型瞎寫的,如果開導(dǎo)不了就孤立他們,讓他們成為一座孤島。就跟一個(gè)國(guó)家的治安,增加執(zhí)法人員數(shù)量是沒有用的,對(duì)全民普法教育才是最重要的。
二、什么是迭代函數(shù)(以SumX為例)
跨表計(jì)算或者為了減少生成計(jì)算列

如圖1-5-3,我想在銷售表中生成【銷售金額】這一列
設(shè)想一下,如果我使用《孫興華講PowerBI火力全開》02.建模與關(guān)系函數(shù) <1>Lookupvalue函數(shù)?
將商品表中的售價(jià)列V過來?再新建列使用【銷售】*【售價(jià)】可以實(shí)現(xiàn),但是會(huì)增加容量,占用內(nèi)存,數(shù)據(jù)量過大時(shí)不現(xiàn)實(shí)


這時(shí),用使用迭代函數(shù)就可以簡(jiǎn)單實(shí)現(xiàn),由于涉及多張表格,所以我們使用關(guān)系函數(shù)
《孫興華講PowerBI火力全開》02.建模與關(guān)系函數(shù) <2>Related函數(shù)與Relatedtable函數(shù)
《孫興華講PowerBI火力全開》06.被翻譯耽誤的上下文



使用關(guān)系函數(shù)時(shí),涉及使用列的表,必需連線!
? ? ? ? 2021年初《孫興華講PowerBI火力全開》殺青,部分收費(fèi)講課的人生氣,開著小號(hào)找麻煩,以「二哈到底哈不哈」(化名) 為代表的各類人群,紛紛質(zhì)疑我講關(guān)系函數(shù)時(shí),講的不清楚,原理不對(duì),他們說,關(guān)系函數(shù)不需要表與表連線。
? ? ? ? 你用關(guān)系函數(shù)時(shí)將連線刪除,看看效果,關(guān)系函數(shù)會(huì)不會(huì)報(bào)錯(cuò)。我們要依據(jù)事實(shí)說話。
《孫興華講PowerBI火力全開》第2課.建模與關(guān)系函數(shù)?
<1>Lookupvalue(把哪張表的哪個(gè)列拿過來,找那張表上的誰?,找自己表里的誰?)
售價(jià) = Lookupvalue('商品表'[售價(jià)],'商品表'[商品],'銷售表'[商品])
? ? ? ? 這個(gè)函數(shù)不需要建立關(guān)系,與Excel看人Vlookup一樣,他第1參數(shù)是V哪個(gè)列?第2和第3參數(shù)是指這兩張表通過什么建立關(guān)系?
? ? ? ? 這個(gè)函數(shù)一般是不會(huì)用的,因?yàn)楦呤謸?dān)心占內(nèi)存和效率很少新建列,在PowerBI做類似Vlookup的事情,那你不如直接在Excel里V好了。
? ? ? ? 但是話不能說絕,有時(shí)為了減少邏輯的思考,你會(huì)用到的,用到他并不能提高效率,但是可以簡(jiǎn)化代碼,對(duì)初學(xué)者很有幫助。
? ? ? ?你在使用中會(huì)發(fā)現(xiàn),雖然Lookupvalue可以不連線,但是你并不是只V一個(gè)或幾個(gè)列過來,最終其它操作仍然要連線,否則矩陣表上怎么用其它表中的字段?
建議關(guān)系不影響使用Lookupvalue函數(shù),你抬這個(gè)扛的目的又是什么呢?影響你付費(fèi)課的不是免費(fèi)課,而是你們自己:
1.神化英語,很多案例全英文化,你已經(jīng)將英語薄弱人趨之門外。
2.過份使用專業(yè)術(shù)語,沿襲,循環(huán)依賴....你真的認(rèn)為大家都能聽懂嗎?還有很多人聽不懂“唯一值”和“四則運(yùn)算”是什么意思,還有很多人,拿著一個(gè)網(wǎng)盤鏈接,不會(huì)下載網(wǎng)盤上的文件。
大家基礎(chǔ)不同,雖然不能全面考慮,但是英語和專業(yè)術(shù)語的問題屬于人為障礙,可以控制。