在 Power BI 中清理 table
Clean up table in Power BI
我正在尝试将几个 Excel 文件加载到 Power BI 中。这些文件非常小(<= ~1k 行)。必须清理这些来源之一。特别是,其中一个列有一些错误数据。正确的数据存储在另一个 Excel 文件中。例如:
table bad:
ID col1
1 0
2 0.5
3 2
4 -3
table correct:
ID colx
2 1
4 5
desired output:
ID col1
1 0
2 1
3 2
4 5
在 SQL 或其他数据可视化工具中,我会将错误的 table 加入到干净的 table 中,然后合并错误的值和正确的值。我知道我有一些关于如何在 Power BI 中实现它的选项。我认为一种选择是在查询编辑器(即 M)中实现它。我认为另一种选择是在数据模型(即 DAX)中实现它。哪个选项最好?并且,实现会是什么样子(例如,如果是 M,那么查询会是什么样子)?
虽然您可以在 DAX 中执行此操作,但我建议在查询编辑器中执行此操作。这些步骤大致如下所示:
- 使用 ID
columns
. 上的左外连接将 Correct
table 合并到 Bad
table
- 展开
Correct
table 得到 Colx
列。
创建自定义列以选择所需的值。 (添加列 > 自定义列)
if [Colx] = null then [Col1] else [Colx]
- 如果需要,您可以删除
Col1
和 Colx
列,也可以保留它们。如果删除 Col1
,则可以将 Col2
列重命名为 Col1
。
如果您不希望源 table 到处浮动,您可以在类似于此的单个查询中完成上述所有操作:
let
BadSource = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45WMlTSUTJQitWJVjICsfRMwWxjINsIzDIBsnSNlWJjAQ==", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type text) meta [Serialized.Text = true]) in type table [ID = _t, Col1 = _t]),
CorrectSource = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45WMlLSUTJUitWJVjIBskyVYmMB", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type text) meta [Serialized.Text = true]) in type table [ID = _t, Colx = _t]),
Bad = Table.TransformColumnTypes(BadSource,{{"ID", Int64.Type}, {"Col1", type number}}),
Correct = Table.TransformColumnTypes(CorrectSource,{{"ID", Int64.Type}, {"Colx", type number}}),
#"Merged Queries" = Table.NestedJoin(Bad,{"ID"},Correct,{"ID"},"Correct",JoinKind.LeftOuter),
#"Expanded Correct" = Table.ExpandTableColumn(#"Merged Queries", "Correct", {"Colx"}, {"Colx"}),
#"Added Custom" = Table.AddColumn(#"Expanded Correct", "Col2", each if [Colx] = null then [Col1] else [Colx]),
#"Removed Columns" = Table.RemoveColumns(#"Added Custom",{"Col1", "Colx"}),
#"Renamed Columns" = Table.RenameColumns(#"Removed Columns",{{"Col2", "Col1"}})
in
#"Renamed Columns"
我正在尝试将几个 Excel 文件加载到 Power BI 中。这些文件非常小(<= ~1k 行)。必须清理这些来源之一。特别是,其中一个列有一些错误数据。正确的数据存储在另一个 Excel 文件中。例如:
table bad:
ID col1
1 0
2 0.5
3 2
4 -3
table correct:
ID colx
2 1
4 5
desired output:
ID col1
1 0
2 1
3 2
4 5
在 SQL 或其他数据可视化工具中,我会将错误的 table 加入到干净的 table 中,然后合并错误的值和正确的值。我知道我有一些关于如何在 Power BI 中实现它的选项。我认为一种选择是在查询编辑器(即 M)中实现它。我认为另一种选择是在数据模型(即 DAX)中实现它。哪个选项最好?并且,实现会是什么样子(例如,如果是 M,那么查询会是什么样子)?
虽然您可以在 DAX 中执行此操作,但我建议在查询编辑器中执行此操作。这些步骤大致如下所示:
- 使用 ID
columns
. 上的左外连接将
Correct
table 合并到 Bad
table
- 展开
Correct
table 得到Colx
列。
创建自定义列以选择所需的值。 (添加列 > 自定义列)
if [Colx] = null then [Col1] else [Colx]
- 如果需要,您可以删除
Col1
和Colx
列,也可以保留它们。如果删除Col1
,则可以将Col2
列重命名为Col1
。
如果您不希望源 table 到处浮动,您可以在类似于此的单个查询中完成上述所有操作:
let
BadSource = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45WMlTSUTJQitWJVjICsfRMwWxjINsIzDIBsnSNlWJjAQ==", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type text) meta [Serialized.Text = true]) in type table [ID = _t, Col1 = _t]),
CorrectSource = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45WMlLSUTJUitWJVjIBskyVYmMB", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type text) meta [Serialized.Text = true]) in type table [ID = _t, Colx = _t]),
Bad = Table.TransformColumnTypes(BadSource,{{"ID", Int64.Type}, {"Col1", type number}}),
Correct = Table.TransformColumnTypes(CorrectSource,{{"ID", Int64.Type}, {"Colx", type number}}),
#"Merged Queries" = Table.NestedJoin(Bad,{"ID"},Correct,{"ID"},"Correct",JoinKind.LeftOuter),
#"Expanded Correct" = Table.ExpandTableColumn(#"Merged Queries", "Correct", {"Colx"}, {"Colx"}),
#"Added Custom" = Table.AddColumn(#"Expanded Correct", "Col2", each if [Colx] = null then [Col1] else [Colx]),
#"Removed Columns" = Table.RemoveColumns(#"Added Custom",{"Col1", "Colx"}),
#"Renamed Columns" = Table.RenameColumns(#"Removed Columns",{{"Col2", "Col1"}})
in
#"Renamed Columns"