Power BI在LIKE子句上联接两个表

时间:2018-08-20 12:13:42

标签: powerbi dax powerquery m

如何在LIKE子句中联接Power BI中的两个表?假设我们有两个表:

+------------------+  +--------+
|    Messy_Name    |  |  Tag   |
+------------------+  +--------+
| red apple        |  | apple  |
| apple very tasty |  | banana |
| good apple green |  +--------+
| yellow banana    |            
| banana split     |            
+------------------+            

我们想将它们加入PBI M或DAX(最好是两者)中,以模仿此SQL查询:

select
  a.Messy_Name
 ,b.Tag
from FactTable a
outer apply
    (
    select top 1
     b.Tag
    from TagList b
    where a.Messy_Name like '%'+b.Tag+'%'
    order by b.Tag
    ) b

所以期望的结果是:

+------------------+--------+
|    Messy_Name    |  Tag   |
+------------------+--------+
| red apple        | apple  |
| apple very tasty | apple  |
| good apple green | apple  |
| yellow banana    | banana |
| banana split     | banana |
+------------------+--------+

因此,该查询应返回TagList表中的第一个Tag,其中Messy_Name包含该Tag。最终,这是一对一的关系。

2 个答案:

答案 0 :(得分:1)

在DAX中,可以通过获取Tag中包含的顶部Messy_Name来执行与SQL类似的逻辑。这是计算列的公式:

Tag = CALCULATE(
          MAX(Tags[Tag]), 
          FILTER(Tags,
              SEARCH(Tags[Tag],
                  Messy[Messy_Name],1,0
              ) > 0
          )
      )

答案 1 :(得分:1)

要在Power Query中执行此操作,请使用此公式创建一个自定义列

List.Max(
    Table.SelectRows(Tags,
       (T) => Text.Contains([Messy_Name], T[Tag]))[Tag])
相关问题