首页 > 解决方案 > 如何比较同一张表中两列的输入来验证数据输入?

问题描述

我正在尝试比较同一表中两列之间每一行的文本输入

这是我使用的 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”,那么它将被视为匹配,否则不会。

这是它应该生成的输出:

输出

标签: powerbidaxpowerquerypowerbi-desktop

解决方案


这是一种似乎有效的 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 将您的单词列表强制为大写,以确保进行适当的匹配比较。

这是我的结果:

在此处输入图像描述


推荐阅读