繁体   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