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

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

Power BI之DAX神功:第4卷第4回 使用虛擬關(guān)系在DAX中轉(zhuǎn)換篩選器

2021-12-19 16:20 作者:孫興華zz  | 我要投稿

一、區(qū)間范圍處理方案

需求:每個促銷品在促銷日期范圍內(nèi)的銷售情況

如上圖所示,每個商品都有它的促銷期,根據(jù)相關(guān)規(guī)定一般情況下(不排除有特例),商品促銷期不得超過14天,且促銷期過后必需恢復(fù)原價賣至少7天,才能再次促銷。假設(shè):一臺游戲機(jī)原價3899,促銷價格2899,2021/1/1~2021/1/14促銷14天后,2021/1/15要恢復(fù)原價3899,如果我還想繼續(xù)促銷,那我的促銷價格必須低于2899,例如促銷價2898,并且要注明原價是2899,不能寫3899。否則涉嫌價格欺詐。假設(shè)2021/1/15此商品正常價格跌至1999元,可以修改價格,但是不能使用促銷標(biāo)志。此規(guī)定暫時不適用于電商。

很多商家并沒有按此規(guī)定執(zhí)行,買方懂的人少,就算買家懂去舉報的也是少數(shù)。你分析,當(dāng)一個商家賣的價格比別人都便宜時(前提是正品),那舉報他的肯定不是正常的消費(fèi)者。

上面兩張表,促銷表列出了四種商品的促銷日期。但是我們無法直接建立關(guān)系。

【1】數(shù)據(jù)清洗

導(dǎo)入促銷表時,先進(jìn)入PowerBI的PowerQuery模塊,使用M函數(shù)增加兩個列

如果你的表格本身就是有開始日期和結(jié)束日期這兩列,那么你就可以省略數(shù)據(jù)清洗的步驟,我一直告訴大家數(shù)據(jù)清洗不是必需的,是表格不規(guī)范造成的。

【2】使用商品編碼,建立關(guān)系

【3】編寫度量值

《DAX神功》第1卷第14回講到,var x=SELECTEDVALUE('表'[列]) 代表當(dāng)前行

《火力全開》筆記27.3.3??DATESBETWEEN函數(shù)取區(qū)間范圍

【4】返回結(jié)果

二、按促銷類別計算方法同上

【1】對促銷表利用M函數(shù)進(jìn)行數(shù)據(jù)清洗

Ps:如果促銷表中有開始和結(jié)束日期這兩列,數(shù)據(jù)清洗可以省略。

【2】按下圖建立多表關(guān)系

【3】寫度量值

【4】返回結(jié)果

其實(shí)就是修改一下字段名稱,方法是沒有區(qū)別的。但是《權(quán)威指南》本節(jié)課提供的案例使用了CONTAINS函數(shù),聲明人家案例對,但是有局限性,也就是說你的促銷品或類別必須是整月促銷。

三、CONTAINS函數(shù)

每個國家都有自己的法律法規(guī),也許國外沒有促銷時間的限制,人家就整月做促銷?!禗AX權(quán)威指南》是高飛老師翻譯的,并不是作者,所以案例也不會考慮我們國家的情況。

《火力全開》筆記24.01 我們講了CONTAINS函數(shù)

語法:CONTAINS(表,列名1,查找的值1,列名2,查找的值2,...)

如果第1參數(shù)表至少存在一行滿足所有列名都有對應(yīng)的查找的值,返回 true,否則返回 false。

注意:列名必須屬于第一參數(shù)或第一參數(shù)的擴(kuò)展表。(擴(kuò)展表原理就不再重復(fù)了)

因?yàn)橐紤]年和月,所以我們需要更多顆粒度,需要新建日期表:

【1】新建動態(tài)日期表

【2】日期表與銷售表建立關(guān)系

【3】從促銷表中多條件查找

CONTAINS('促銷','促銷'[年],'日期表'[年],'促銷'[月],'日期表'[月],'促銷'[類別],'商品表'[類別])

但是CONTAINS返回的是True和False

現(xiàn)在我問你,銷量在哪張表中?答:在銷售表中,現(xiàn)在應(yīng)該用上面的條件篩選哪張表?答:篩選銷售表。

FILTER('銷售表',CONTAINS('促銷','促銷'[年],RELATED('日期表'[年]),'促銷'[月],RELATED('日期表'[月]),'促銷'[類別],RELATED('商品表'[類別])))

// 因?yàn)镕ilter創(chuàng)建的是行上下文逐行迭代,銷售表是多端,日期和商品表是一端表,多端找一端使用關(guān)系函數(shù)RELATED

【4】最后度量值

方法一:Calculate([總銷量],filter創(chuàng)建的表)

如果你感覺filter遍歷整個銷售表太慢了,也可以利用summzrize+擴(kuò)展表原理,得到你需要的行和列。詳見本文章:五、利用擴(kuò)展表與交集的特性公式tb1 來代替銷售表

方法二:Sumx(filter創(chuàng)建的表,'銷售表'[銷量])

返回結(jié)果:

《權(quán)威指南》給出的建議,它認(rèn)為這樣寫速度慢,因?yàn)镕ilter迭代的整個銷售表如果數(shù)據(jù)量大會影響性能。Sumx又重復(fù)迭代每一行,數(shù)據(jù)量大了以后,這是非常可怕的事情。

四、利用數(shù)據(jù)沿襲特性

《DAX神功》第2卷第21回 我們詳細(xì)講解了數(shù)據(jù)沿襲

【1】獲取促銷表中的所有列

如果在新建表里面,我們可以使用SUMMARIZECOLUMNS,但是要寫到度量值中,由于SUMMARIZECOLUMNS不支持大部分度量值,我們選擇使用SUMMARIZE。

tb1 = SUMMARIZE('促銷','促銷'[類別],'促銷'[年],'促銷'[月])

他返回的就是促銷表,與我們使用表構(gòu)造函數(shù)寫出來的{"張三","李四","王五"}是一個意思

【2】數(shù)據(jù)沿襲打標(biāo)記要換SUMMARIZE順序來

tb2 = TREATAS(tb1,'商品表'[類別],'日期表'[年],'日期表'[月])

按常理來說,SUMMARIZE這一步是多余的,我直接使用促銷表不香嗎?問題就在數(shù)據(jù)沿襲這里,他需要按你提取出來的列順序去在相關(guān)表上打標(biāo)簽。

【3】寫出完整度量值

《DAX神功》第2卷第21回 我們證明了

TREATAS({"張三","李四"},Sheet1[姓名])? ? 相當(dāng)于? ?'Sheet1'[姓名] in {"張三","李四"}??

在Calculate的篩選器中使用這種布爾篩選時,相當(dāng)于指定列取消篩選,恢復(fù)篩選的方法可以使用Keepfilters。

返回結(jié)果:

五、利用擴(kuò)展表與交集的特性

《DAX神功》第3卷第8回?INTERSECT函數(shù)

銷售表是多端表,商品表和日期表都是一端表,并且連線成一對多關(guān)系,那么,銷售表的擴(kuò)展表就是銷售表、商品表、日期表中的所有列。我可以使用SUMMARIZE取我需要的列:

tb1 = SUMMARIZE('銷售表','商品表'[類別],'日期表'[年],'日期表'[月])

讓這張表與

tb2 = SUMMARIZE('促銷','促銷'[類別],'促銷'[年],'促銷'[月])

取共有部分

這兩張表在INTERSECT中的位置一定要注意:

《DAX神功》第3卷第8回 我們提到INTERSECT函數(shù)交換參數(shù)位置影響數(shù)據(jù)沿襲

圖片來自《DAX神功》第3卷第8回

我們需要保留tb1中列的數(shù)據(jù)沿襲(列名雖然一樣,但是不來自一張表,tb2都來自己促銷表,而tb1來自銷售表的擴(kuò)展表),但又需要tb2中的數(shù)據(jù),這時使用INTERSECT取交集,保留第1參數(shù)數(shù)據(jù)沿襲是最好的方法。

返回結(jié)果:

六、總結(jié)

從速度上講利用數(shù)據(jù)沿襲特性利用擴(kuò)展表與交集的特性,會比CONTAINS函數(shù)快,但是國內(nèi)企業(yè)利用率更高的還是我第一個就講的DATESBETWEEN函數(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

《DAX神功番外篇》文字版合集:

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

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

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

Power BI之DAX神功:第4卷第4回 使用虛擬關(guān)系在DAX中轉(zhuǎn)換篩選器的評論 (共 條)

分享到微博請遵守國家法律
丰台区| 即墨市| 临武县| 德州市| 琼结县| 本溪市| 尤溪县| 郴州市| 博湖县| 东乌珠穆沁旗| 寿光市| 巫山县| 娱乐| 微博| 昌吉市| 抚顺县| 浦东新区| 涟水县| 凌源市| 镶黄旗| 石景山区| 宿州市| 普陀区| 灵石县| 临西县| 临泽县| 曲靖市| 沙洋县| 仪征市| 汽车| 高碑店市| 囊谦县| 清镇市| 定安县| 资溪县| 藁城市| 迭部县| 长岛县| 朝阳市| 元阳县| 松江区|