我正在尝试将多个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或其他数据可视化工具中,我会将坏表连接到干净表,然后合并坏值和更正值。我知道我有一些关于如何在Power BI中实现它的选项。我认为一种选择是在查询编辑器中实现它(即M)。我认为另一种选择是在数据模型(即DAX)中实现它。哪个选项最好?并且,实现会是什么样的(例如,如果M,那么查询是什么样的)?
答案 0 :(得分:1)
虽然您可以在DAX中执行此操作,但我建议您在查询编辑器中执行此操作。步骤看起来大致如下:
Correct
上的左外连接将Bad
表合并到columns
表中。Correct
表格以获取Colx
列。创建自定义列以选择所需的值。 (添加列>自定义列)
if [Colx] = null then [Col1] else [Colx]
Col1
和Colx
列。如果您删除Col1
,则可以将Col2
列重命名为Col1
。如果您不希望源表浮动,您可以在类似于此的单个查询中执行上述所有操作:
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"