數據可視化之powerBI技巧(七)從Excel到PowerBI,生成笛卡爾積的幾種方式


假如分別有100個不重復的姓和名,把每個姓和名進行組合匹配,就可以得到一萬個不重復的姓名組合,這種完全匹配的方式就是生成一個姓名的笛卡爾積。

下面就來看看生成笛卡爾積的幾種方式,為了展現的方便,以5個姓和5個名為例,更多的數據也是一樣操作的。

 

在Excel中生成笛卡爾積

 

在Excel中可以利用INDEX函數實現,假如A列是姓,B列是名,那么在C2中輸入公式:

 

C2=
INDEX(A:A,INT((ROW(A2)-2)/(COUNTA(B:B)-1))+2)&
INDEX(B:B,MOD(ROW()-2,COUNTA(B:B)-1)+2)

 

然后公式向下填充,就可以在C列生成笛卡爾積。

 

 

在Power Query中生成笛卡爾積

 

在PQ中相比Excel要簡單的多,假如有兩個表,'姓'和'名',操作步驟如下,

 

 

↑添加輔助列,值設置為1(或其他任何值)

 

 

↑合並查詢-按輔助列-完全外部聯結

 

 

↑展開合並查詢

 

 

↑合並列

 

 

 

通過簡單的點擊操作,就生成了一個笛卡爾積,雖然看起來步驟很多,其實就是秒秒鍾的事。

 

使用DAX生成笛卡爾積

 

依然假設已經有兩個表,'姓'和'名',在【建模】選項卡下點擊"新表",輸入,

 

姓名 = GENERATE('姓','名')

 

 

二者逐一匹配的笛卡爾積的結果就出來了,這里GENERATE函數還可以使用CROSSJOIN替代,效果是一樣的。

當然我們並不想要姓和名分開為兩列,而是想直接得到姓名合並的結果,可以用ADDCOLUMNS把這兩列合並,再利用SELECTCOLUMNS函數提取出需要的列,把公式改為,

 

表=SELECTCOLUMNS(ADDCOLUMNS(CROSSJOIN('姓','名'),"姓名",[姓]&[名]),"姓名",[姓名])

 

一步實現最終結果,

 

 

 

 

總結

 

以上三種方式操作起來都不難,數據處理雖不是DAX的長處,但也可以簡單實現,學會這幾個DAX函數,以后在數據分析時可以靈活構建度量。

當然在Power Query中最簡單的,數據處理本來就是PQ的核心功能,這個案例中無需任何代碼或者公式,只是通過簡單的界面操作,就可以輕松完成。

在Excel中雖然也僅需一個公式,但能靈活使用INDEX函數的都是高手級的,能達到這個水平的人少之又少,大部分人看到這個公式可能也不理解,並且如果數據量較大,通過Excel處理速度也會變得很慢。

所以說學習Power Query可以讓你在數據處理上彎道超車,輕松逆襲,之前在Excel中很難處理,或者需要用到各種稀奇古怪函數才能得到的結果,在PQ中都顯得毫不費力。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM