假如分別有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中都顯得毫不費力。
