如何在 Excel 外掛 PowerPivot 中實現詞根模糊匹配

weixin_34185364發表於2019-01-06

如下情景,我們有以對詳細的地址,我們想從中提取城市已作分析。在 Excel 中我們可以使用 lookup+find 實現如下效果,如有不明白的同學可以翻閱我之前釋出的博文:

13807623-59aa3ee474e6c715.JPEG
image

那麼這種需求如何在 powerpivot 中實現呢,有人說可以通過表格生成載入到 pivot 中,但是,這有一個問題,如果我們是合併多表生成的地域資料呢,可能就需要通過 dax 連結回表的複雜操作趨勢線,會嚴重降低模型的執行效率,如果在 powerbi 中這種方法根本沒辦法使用,今天我們就介紹下如何通過 powerpivot 在複雜的地址中直接提取城市名稱:

13807623-91a67a6bb034f0ca.JPEG
image

操作步驟

1、首先,我們有一張地址的明細表和城市的參數列,我們將兩張表分別載入進 power pivot 中。

2、在地址表中我們新增自定義列,輸入如下公式,回車,我們看到如下效果:

=FIRSTNONBLANK(FILTER(VALUES(‘城市’[城市]),SEARCH(‘城市’[城市],’省份’[地址],1,0)),1)

13807623-0b0897bdb25a5926.JPEG
image

所有的城市名稱就被我們提取出來了。

上邊公式為幾個函式巢狀而成,首先我們看下微軟官網對於 Firstnonblank 函式的介紹:

13807623-2b025780cdf83e54.JPEG
image

我們可以看到 Firstnonblank 通過兩個引數,一個單列,和一個表示式(改公式中使用 1),返回了第一個不為空的值。

FILTER(VALUES(‘城市’[城市]),SEARCH(‘城市’[城市],’省份’[地址],1,0))

這塊類似於 find 陣列查詢返回的模式,通過省份上下文篩選,每個表迭代後返回當前省份匹配到的結果。

最後測試下如果匹配到兩個值的話會返回哪一個,我們在城市列別中加入陝西,重新整理模型,我們看到第 2、3 條記錄,都返回陝西,我們在新增一條朝陽,我們發現返回的還是北京,其實這塊我們通過 values 函式的時候,順序是被打亂了的。

這個模式我們沒必要去記住他的執行原理,在需要的時候,我們複製這段 dax 直接利用即可。

相關文章