如何在 Power BI 中使用字符串连接比较两个不同的 table 值

How to compare two different table values with string contatct in PowerBI

我在下面显示了两个不同的文件 table,一个是 bugtracker,另一个是 bugtracker (2)

现在我想比较两种状态。

如果status不一样就算进去

如果您真正想要的是关于一个 table 的记录的 'Assigned User Name' 和 'Status' 是否等于 [=153= 的真假比较] 和其他 table 的 匹配记录 的 'Status',然后使用 DAX 的 if 应该可行。

假设您已经匹配并合并了 "BugTracker" 和 "BugTracker (2)" table 的记录 以获得 table 你已经在上面显示了,合并后的 table 的名称是 "BugTrackerMerged",你可以只用这个 DAX 命令添加一个列:

Column = if(BugTrackerMerged[Status]=BugTrackerMerged[Status2],TRUE(),FALSE())

请注意,我将第二个状态列命名为 'Status2',而不是 'Status'。两个状态列不能具有相同的名称。

如果您还没有合并 table 的记录,您需要先合并。我发现使用 Power Query(Power BI 的编辑查询功能)最容易做到这一点。

(如果以下内容过于详细,我先道歉。不知道您的 Power Query 专业水平,我想我会通过 step-by-step 教程简化讨论。它比它"looks".)

为了合并两个 table("BugTracker" 和 "BugTracker (2)"),您需要一个公共键域来进行匹配和合并。 对于这种情况,我假设你在"BugTracker"中的第一条记录应该与"BugTracker (2)"中的第一条记录匹配并合并,你在"BugTracker"中的第二条记录应该与"BugTracker"中的第一条记录匹配并合并"BugTracker (2)"的第二条记录,依此类推。因此,只需为每个table添加一个索引。

对于 BugTracker,在 Power Query select 中 "BugTracker" 查询:

然后单击 "Add Column" 选项卡,然后单击 "Index Column"。 (这会将索引添加到 "BugTracker" table。)

对 "BugTracker (2)" 执行相同的操作。

使用 "BugTracker" 和 "BugTracker (2)" 的公共索引,您可以匹配和合并两个 table。单击 "Home" 选项卡,然后单击 "Merge Queries" 旁边的 drop-down 箭头,然后单击 "Merge Queries as New"。

在弹出的 window 中,使 selections 成为必需的,所以它看起来像这样,然后单击 "OK":

这将创建一个新查询,可能称为 "Merge"。此时,我将该查询重命名为 "BugTrackerMerged"。

如果您 select 该新查询(现在命名为 "BugTrackerMerged")并单击 "Source",在 "Applied Steps"...

您将在公式栏中看到此代码:

= Table.NestedJoin(BugTracker,{"Index"},#"BugTracker (2)",{"Index"},"NewColumn",JoinKind.FullOuter)

在该代码中,将 "NewColumn" 更改为 "BugTracker (2)" 以重命名生成的列。 (如果你愿意,你可以将它重命名为一个单独的步骤,但我认为这种方法是 "cleaner".

然后单击 "BugTracker (2)" 列标题右侧的 按钮...

...展开列中的 table。您会看到这样的 pop-up window:

保留此处显示的设置将扩展(引入)先前合并的辅助 table 中的所有列。 (次要 table 是 "BugTracker (2)"。)使用原始列名作为前缀将帮助您弄清楚 "Status" 和 "Assigned User Name" 信息来自哪个 table.

至此,您拥有了合并后的信息。如果愿意,您可以在这里更进一步,也可以在这里进行 True/False 比较。为此,只需使用一些代码添加一个新的自定义列:单击 "Add Column" 选项卡,然后单击 "Custom Column" 按钮:

然后,在pop-upwindow中添加这段代码:

if [Status]&[Assigned User Name]=[#"BugTracker (2).Status"]&[#"BugTracker (2).Assigned User Name"] then "True" else "False"

像这样:

你会得到一个 table 这样的:

您的数据前面有很多 "Trues"。不过,通过使用该列的过滤器按钮,您可以很容易地看到还有 "Falses"。

这是我的三个查询的 Power Query (M) 代码:

错误追踪器:

let
Source = Excel.Workbook(File.Contents("C:\Users\MARC_000\Desktop\sample\Rowdata Programming 15 July 2017 (2).xlsx"), null, true),
BugTracker_Sheet = Source{[Item="BugTracker",Kind="Sheet"]}[Data],
#"Changed Type" = Table.TransformColumnTypes(BugTracker_Sheet,{{"Column1", type text}, {"Column2", type text}}),
#"Promoted Headers" = Table.PromoteHeaders(#"Changed Type", [PromoteAllScalars=true]),
#"Added Index" = Table.AddIndexColumn(#"Promoted Headers", "Index", 0, 1)
in
#"Added Index"

错误追踪器 (2):

let
Source = Excel.Workbook(File.Contents("C:\Users\MARC_000\Desktop\sample\Rowdata Programming 18 July 2017.xlsx"), null, true),
BugTracker_Sheet = Source{[Item="BugTracker",Kind="Sheet"]}[Data],
#"Changed Type" = Table.TransformColumnTypes(BugTracker_Sheet,{{"Column1", type text}, {"Column2", type text}}),
#"Promoted Headers" = Table.PromoteHeaders(#"Changed Type", [PromoteAllScalars=true]),
#"Added Index" = Table.AddIndexColumn(#"Promoted Headers", "Index", 0, 1)
in
#"Added Index"

BugTrackerMerged:

let
Source = Table.NestedJoin(BugTracker,{"Index"},#"BugTracker (2)",{"Index"},"BugTracker (2)",JoinKind.FullOuter),
#"Expanded BugTracker (2)" = Table.ExpandTableColumn(Source, "BugTracker (2)", {"Status", "Assigned User Name", "Index"}, {"BugTracker (2).Status", "BugTracker (2).Assigned User Name", "BugTracker (2).Index"}),
#"Added Custom" = Table.AddColumn(#"Expanded BugTracker (2)", "Custom", each if [Status]&[Assigned User Name]=[#"BugTracker (2).Status"]&[#"BugTracker (2).Assigned User Name"] then "True" else "False")
in
#"Added Custom"