powerbi - 如何比较同一张表中两列的输入来验证数据输入?
问题描述
我正在尝试比较同一表中两列之间每一行的文本输入
这是我使用的 dax 公式:
Checkpoint = IF(AND(CONTAINSROW('tweedelijns melding'[Korte omschrijving (Details)], "ADW", "Wachtwoord","reset","Resetten", "Uitvraagscript", "Profile","Citrix", "Aanvraag") && 'tweedelijns melding'[Object ID] = "Active directory" ||'tweedelijns melding'[Object ID] = "Citrix"), "Match", "No match")
我想要达到的目标如下:
[Korte omschrijving (Details)] 列包含一个问题,并且对象 ID 主要包含一两个词。
我想检查 [Korte omschrijving (Details)] 列是否包含“ADW”、“Wachtwoord”、“reset”、“Resetten” ..... 列 [object ID] 是否包含诸如如果是“Active Directory”或“Citrix”,那么它将被视为匹配,否则不会。
这是它应该生成的输出:
解决方案
这是一种似乎有效的 Power Query 方法。
从您的表作为 Table1 开始:
我添加了一个自定义列:
这是自定义列公式的 M 代码:
if List.ContainsAny(
Text.Split(Text.Upper([Question])," "),
List.Transform({"ADW", "Wachtwoord","reset","Resetten", "Uitvraagscript", "Profile","Citrix", "Aanvraag"}, each Text.Upper(_))
)
then if List.ContainsAny(
Text.Split(Text.Upper([Categorie]),""),
List.Transform({"Active directory", "citrix"}, each Text.Upper(_))
)
then "match"
else "no match"
else "no match"
它的作用是将“问题”列的每一行拆分为一个单词列表,然后将该列表与您的单词列表进行比较,{“ADW”、“Wachtwoord”、“reset”、“Resetten”、“Uitvraagscript” , "Profile","Citrix", "Aanvraag"},查看您的单词列表中的任何单词是否在从“问题”行创建的列表中。如果有匹配项,那么它对“类别”列执行相同的操作。但是......对于类别列,它实际上只为每一行创建一个项目列表。换句话说...例如,“Verzoek resetten wachtwoord”,从 Question 变成列表 {“VERZOEK”,“RESETTEN”,“WACHTWOORD”} 和“Active Directory”,从 Categorie 变成列表 {“ACTIVE DIRECTORY” }。如果两个列表中都有匹配项,则返回“匹配”。否则,返回“不匹配”。
Text.Split 是转换为列表的内容。List.ContainsAny 用于比较列表内容。我使用 Text.Upper 将问题类别信息强制为大写,并使用 List.Transform 将您的单词列表强制为大写,以确保进行适当的匹配比较。
这是我的结果:
推荐阅读
- python - 使用python根据匹配键修剪json
- java - java中的同步方法不能像indended那样工作
- flutter - 如何在导轨宽度最小的情况下在 NavigationRail 图标之间创建更多垂直空间?
- bind - 为什么回调堆栈大小超出我使用的绑定语法?
- mongodb - 查询使用特定资产的每个平均值的计数来查找存储在 mongodb 中的平均值的平均值
- python - 如何将输入链接到对象的属性并在单击时更新该属性?
- python - 如何比较 DataFrame 中的多行并编辑 ID 匹配的某些值
- scala - Scala Compiler Plugin - 确定方法是否被覆盖
- vue.js - VueJS:如何从 vuex 存储中获取嵌套对象值?
- objective-c - 从选择器调用函数指针