如何在PowerBI中将两个不同的表值与字符串contatct进行比较

时间:2017-07-20 08:45:02

标签: powerbi

我在下表中有两个不同的文件显示,一个是bugtracker,另一个是bugtracker(2)

enter image description here

现在我想比较两种状态。

如果状态不同,请计算

enter image description here

1 个答案:

答案 0 :(得分:1)

如果您真正要求的是关于一个表的记录的“已分配用户名”和“状态”是否等于另一个表的“已分配用户名”和“状态”的真或假比较< em>匹配记录,然后使用DAX的if应该可以工作。

假设您已经匹配并合并了“BugTracker”和“BugTracker(2)”表的记录,以便获取上面显示的表格,并且合并表格的名称为“BugTrackerMerged” “,你可以用这个DAX命令添加一个列:

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

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

如果您尚未合并表格的记录,则需要先执行此操作。我发现使用Power Query(Power BI的编辑查询功能)最容易做到这一点。

(如果以下内容过于详细,我很抱歉。不知道您的Power Query专业知识水平,我想我会通过循序渐进的教程简化讨论。它比“看起来”更直接。)

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

对于BugTracker,在Power Query中选择“BugTracker”查询:

enter image description here

然后单击“添加列”选项卡,然后单击“索引列”。 (这会将索引添加到“BugTracker”表中。)

enter image description here

对“BugTracker(2)”执行相同操作。

使用“BugTracker”和“BugTracker(2)”的公共索引,您可以匹配并合并这两个表。单击“主页”选项卡,然后单击“合并查询”旁边的下拉箭头,然后单击“将查询合并为新”。

enter image description here

在弹出的窗口中,进行必要的选择,使其如下所示,然后单击“确定”:

enter image description here

这会创建一个新查询,可能称为“合并”。此时,我将该查询重命名为“BugTrackerMerged”。

如果您选择新查询(现在名为“BugTrackerMerged”)并单击“来源”,则在“应用步骤”下...

enter image description here

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

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

在该代码中,将"NewColumn"更改为"BugTracker (2)"以重命名生成的列。 (如果您愿意,可以将其重命名为单独的步骤,但我认为这种方法“更清洁”。

然后点击“BugTracker(2)”列标题右侧的enter image description here按钮...

enter image description here

...展开列中的表格。你会看到一个这样的弹出窗口:

enter image description here

保留此处所示的设置将展开(引入)先前合并的辅助表中的所有列。 (该次要表是“BugTracker(2)”。)使用原始列名作为前缀将帮助您保持“状态”和“分配的用户名”信息来自哪个表。

此时,您拥有合并的信息。如果你愿意,你可以在这里更进一步,也可以在这里进行真/假比较。要做到这一点,只需添加一个包含一些代码的新自定义列:单击“添加列”选项卡和“自定义列”按钮:

enter image description here

然后,在弹出窗口中,添加以下代码:

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

像这样:

enter image description here

你会得到一张这样的表:

enter image description here

您的数据预先有很多“真相”。通过使用列的过滤器按钮,您可以很容易地看到还有“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"

BugTracker(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"