我想在DAX中的文本上创建某种LOOKUPVALUE,它将使带有特定关键字的句子匹配。例如,在下面的示例中,第二行和第三行具有匹配项,因为字符串中包含“ Apple”。问题在于文本在字符串中,而不是独立值。
表1
表2
输出
答案 0 :(得分:1)
编辑,改进的答案::当一个字符串中有多个键时,此新版本也适用。
我认为PowerQuery是执行此类操作的自然之所。
Output表如下所示:
应用步骤的说明:
对于每一行,该函数都从[String]值中找到的Table2 [Key]列中选择值。然后,它返回仅包含所选值的列表。
{"Key", each Text.Combine([Key], " | "), type text},
“高级编辑器”中的脚本如下所示:
let
Source = #"Table1",
#"Added Column Key lists" = Table.AddColumn(Source, "Key", (r) => List.Select(Table.Column(Table2,"Key"),each Text.Contains(r[String],_,Comparer.OrdinalIgnoreCase)),type text),
#"Expanded Key lists" = Table.ExpandListColumn(#"Added Column Key lists", "Key"),
#"Join with Table2 on Key" = Table.NestedJoin(#"Expanded Key lists", {"Key"}, Table2, {"Key"}, "ItemTables", JoinKind.LeftOuter),
#"Expanded ItemTables" = Table.ExpandTableColumn(#"Join with Table2 on Key", "ItemTables", {"Item"}, {"Item"}),
#"Group and concate keys / items" = Table.Group(#"Expanded ItemTables", {"String"},{{"Key", each Text.Combine([Key], " | "), type text},{"Item", each Text.Combine([Item], " | "), type text}})
in
#"Group and concate keys / items"
这是我的.pbix文件的link
答案 1 :(得分:0)
我创建了以下虚拟数据集。
我对您的工作的理解是确定句子中是否包含关键字。
这可以通过具有以下公式的计算列来完成-
Lookup = LOOKUPVALUE(Table2[Result],Table2[LookUp], IF(SEARCH("Apple",Table1[Sentence],,0)> 0, "Apple",""))
您可以将If和Search函数与Lookupvalue函数结合使用。
该公式正在搜索单词“ Apple”,然后返回其在文本中的位置,如果未找到结果,则显示0。
然后,IF语句接受大于0的任何结果,因为大于0的任何结果表示已找到结果,该结果即为它在字符串中的位置,并声明“ Apple”。然后,这成为您的查找值。
然后显示为波纹管
然后可以将当前为if的结果的Blank(“”)替换为另一个if语句,以查找另一个关键字(例如“ Orange”),然后将其添加到查找表中以遍历结果你的之后。
希望这有道理并有帮助!
答案 2 :(得分:0)
我们无需硬编码即可完成此操作:-
1)使用表2中的查询编辑器创建索引列。
2)在表2中像这样创建一个计算列:-
Table2_FruitNameColumn = Key &";" & Item
3)然后使用表1中的此计算列。
FruitFound =
Var required_Index =
CALCULATE (
MAX(Table2[Index]),
FILTER (
Table2,
SEARCH ( Table1[Table1_Text_Column], PATHITEM(SUBSTITUTE(Table2[Table2_FruitNameColumn],";","|"),1,TEXT),, 0 ) > 0
|| SEARCH ( PATHITEM(SUBSTITUTE(Table2[Table2_FruitNameColumn],";","|"),1,TEXT), Table1[Table1_Text_Column],, 0 ) > 0
)
)
var re_index =
IF(required_Index = BLANK(),-1,required_Index)
Var required_Table2FruitNameColumn =
CALCULATE(FIRSTNONBLANK(Table2[Table2_FruitNameColumn],1),FILTER(Table2, Table2[Index] = re_index))
var my_second_part_concat =
PATHITEM(SUBSTITUTE(required_Table2FruitNameColumn,";","|"),2,TEXT)
return my_second_part_concat
如果您不了解计算所得的列,请尝试在列的返回位置逐步返回输出。
请接受答案(如果有帮助的话),或者让我知道是否有帮助。
答案 3 :(得分:0)