簡體   English   中英

如何在 Excel 數據模型中使用通配符重現索引/匹配查找?

[英]How can I reproduce index/match lookup with wildcards in Excel data model?

TL;DR:標題說明了一切:有沒有辦法使用通配符在數據模型中重現 excel INDEX-MATCH 查找

我正在嘗試重新組織一個 Excel 文件,該文件使用 PowerQuery 從外部來源導入和轉換數據並將其加載到數據模型中。 然后使用此數據生成多個數據透視表並提取特定數據。 我需要在數據模型中添加一個計算列,使用純 Excel 公式計算相對容易,但我找不到任何方法在數據模型中創建它。 問題是數據模型非常適合替換 vlookups,但它不支持通配符,這在這個使用場景中是必不可少的。 下面當然是一個玩具例子來說明這個問題:

我有一個事實表tblFact ,如下所示:

事實表

這個想法是添加根據列Country、Model 和 SalesMan顯示消息的列,具有以下邏輯:

  • 如果Model是 A1,不管其他列,顯示“Sold an A1”
  • 如果SalesMan是 Mario,無論其他列如何,都顯示“ITSAME”
  • 如果Country是 US,無論其他列如何,都顯示“OH YEAH”
  • 在任何其他情況下顯示字符串“默認消息”

在原始文件中,這是通過添加嵌套 IF 來完成的,如下所示:

=IF([@Model]="A1";"Sold an A1";IF([@SalesMan]="Mario";"ITSAME";IF([@Country]="US";"OH YEAH";"Default message")))

但是,由於在實際案例中還有更多案例,條件更復雜,並且需要經常更新,因此很難維護。 我想添加一個查找表並利用 INDEX 和 MATCH 允許使用通配符的事實。

查找表

以下公式將復制嵌套 IF 的行為: =INDEX(tblLookUp[Message];MATCH(1;MATCH(tblLookUp[LUKey];[@LUValue];0);0))查找更容易維護並添加具體案例。

查詢結果

現在,如果不是因為我被迫使用數據模型這一事實,這將起作用:

  • 真實文件包含超過一百萬行和大約 50 列,我無法將所有內容轉儲到表中並添加一列以使用帶有 INDEX MATCH 的公式
  • 一些需要查找的列僅在數據模型中可用,因為它們來自數據模型中的相關表。 好像推銷員被計算為 =RELATED(yetAnotherTable[SalesMan])

我嘗試了 LOOKUPVALUE 函數,但它不支持通配符,我也嘗試了 FILTER 和 SEARCH 的各種組合,但我什至無法獲得不返回錯誤的公式。

其他相關說明:

  • 我知道索引匹配查找對查找表的順序很敏感,但我可以輸入外部檢查
  • 在事實表中形成 LUValue 的某些列幾乎可以包含任何內容,不可能在查找表中輸入所有可能的情況。
  • 我寧願在 DAX 中找到一個解決方案以用於數據模型,但如果不可能,理論上我可以讓 power query 計算 tblFact 的所有列,並嘗試在 power query 中進行查找。 問題在於 Power Query 的合並不支持通配符。

試試這個計算列:

=
PATHITEM(
    CONCATENATEX(
        FILTER( tblLookUp, SEARCH( tblLookUp[LUKey], MainTable[LUValue],, 0 ) ),
        tblLookUp[Message],
        "|"
    ),
    1
)

SEARCH支持通配符。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM