Power BI 在 LIKE 子句上连接两个表
Power BI join two tables on LIKE clause
如何在 Power BI 的 LIKE 子句中加入两个 table?假设我们有两个 tables:
+------------------+ +--------+
| 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 |
+------------------+--------+
因此查询应该 return TagList table 中的第一个标签,其中 Messy_Name 包含标签。最终,这是一对一的关系。
在 DAX 中,您可以通过获取 Messy_Name
中包含的顶部 Tag
来执行与 SQL 类似的逻辑。下面是计算列的公式:
Tag = CALCULATE(
MAX(Tags[Tag]),
FILTER(Tags,
SEARCH(Tags[Tag],
Messy[Messy_Name],1,0
) > 0
)
)
要在 Power Query 中执行此操作,请使用此公式创建一个自定义列
List.Max(
Table.SelectRows(Tags,
(T) => Text.Contains([Messy_Name], T[Tag]))[Tag])
如何在 Power BI 的 LIKE 子句中加入两个 table?假设我们有两个 tables:
+------------------+ +--------+
| 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 |
+------------------+--------+
因此查询应该 return TagList table 中的第一个标签,其中 Messy_Name 包含标签。最终,这是一对一的关系。
在 DAX 中,您可以通过获取 Messy_Name
中包含的顶部 Tag
来执行与 SQL 类似的逻辑。下面是计算列的公式:
Tag = CALCULATE(
MAX(Tags[Tag]),
FILTER(Tags,
SEARCH(Tags[Tag],
Messy[Messy_Name],1,0
) > 0
)
)
要在 Power Query 中执行此操作,请使用此公式创建一个自定义列
List.Max(
Table.SelectRows(Tags,
(T) => Text.Contains([Messy_Name], T[Tag]))[Tag])