Power BI - 重复行
Power BI - Duplicate Rows
在 Power BI 中,我有一个 table 如下所示:
ID
234
435
3435
58
48504
7820
我想将其转换为 table,如下所示:
ID
234-101
234-102
435-101
435-102
3435-101
343-102
58-101
58-102
48504-101
48504-102
7820-101
7820-102
这甚至可以在 Power BI 中实现吗?
如果您可以为此使用 Power BI 查询编辑器 (Power Query),则可以使用以下查询代码:
let
Source = Table1,
#"Inserted Merged Column3" = Table.AddColumn(Source, "DelimitedListWithSuffixes", each Text.Combine({[ID], "-101,", [ID],"-102"}), type text),
#"Split Column by Delimiter" = Table.ExpandListColumn(Table.TransformColumns(#"Inserted Merged Column3", {{"DelimitedListWithSuffixes", Splitter.SplitTextByDelimiter(",", QuoteStyle.Csv), let itemType = (type nullable text) meta [Serialized.Text = true] in type {itemType}}}), "DelimitedListWithSuffixes"),
#"Changed Type" = Table.TransformColumnTypes(#"Split Column by Delimiter",{{"DelimitedListWithSuffixes", type text}}),
#"Removed Other Columns" = Table.SelectColumns(#"Changed Type",{"DelimitedListWithSuffixes"}),
#"Renamed Columns" = Table.RenameColumns(#"Removed Other Columns",{{"DelimitedListWithSuffixes", "ID"}})
in
#"Renamed Columns"
(表1是你原来的ID列table。)
我想到了两种方法,尽管可能还有其他方法。
注意 - 我更喜欢第二种方法,因为它让“101”和“102”成为数据驱动的,允许它们在未来更容易地被更改或添加。
A) 通过查询编辑器(需要 hard-coding“101”/“102”值)
第 2 步:为您的后缀添加另外两列。单击 "Custom Column from Examples" 按钮,然后在第一个单元格中键入“234-101”。向下箭头到下一个单元格后,它应该 auto-populate 其余部分。对“-102”再次执行此操作。
第 3 步: 逆轴旋转两个新列,使它们合而为一。使用 "ID" 列 selected,单击 "Unpivot Columns" 的下拉菜单,然后单击 "Unpivot Other Columns"。
第 4 步:删除多余的列。在生成的数据中,您将拥有原始的 "ID" 列以及两个新列; "Attribute" 和 "Value"。由于 "Value" 列包含所需的值,select "ID" 和 "Attribute" 列,右键单击其中一个 headers,然后 select "Remove Columns"。
第 5 步: 将 "Value" 列重命名为 "ID",您就完成了。
这是所有这些操作的结果 M 代码。
let
Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45WMjI2UYrViVYyMTYF08YwhqkFRNzC1ACiwtzCyEApNhYA", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type text) meta [Serialized.Text = true]) in type table [ID = _t]),
#"Changed Type" = Table.TransformColumnTypes(Source,{{"ID", Int64.Type}}),
#"Inserted Merged Column" = Table.AddColumn(#"Changed Type", "Merged", each Text.Combine({Text.From([ID], "en-US"), "-101"}), type text),
#"Inserted Merged Column1" = Table.AddColumn(#"Inserted Merged Column", "Merged.1", each Text.Combine({Text.From([ID], "en-US"), "-102"}), type text),
#"Unpivoted Other Columns" = Table.UnpivotOtherColumns(#"Inserted Merged Column1", {"ID"}, "Attribute", "Value"),
#"Removed Columns" = Table.RemoveColumns(#"Unpivoted Other Columns",{"ID", "Attribute"}),
#"Renamed Columns" = Table.RenameColumns(#"Removed Columns",{{"Value", "ID"}})
in
#"Renamed Columns"
B) 通过DAX
第 2 步: 单击 "Enter Data" 并为后缀添加数据。 (如果这些数字来自其他地方,请跳过此部分)
第 3 步: 单击 "New Table" 并输入以下公式。
NewData = CROSSJOIN(Data, Suffixes)
第 4 步:单击“新建列”并输入以下公式。
NewID = CONCATENATE(CONCATENATE(NewData[ID], "-"), NewData[Value])
如果您希望将新列命名为 "ID",您需要先重命名旧的 "ID" 列,因为您不能像第一次那样简单地删除它方法。
在 Power BI 中,我有一个 table 如下所示:
ID
234
435
3435
58
48504
7820
我想将其转换为 table,如下所示:
ID
234-101
234-102
435-101
435-102
3435-101
343-102
58-101
58-102
48504-101
48504-102
7820-101
7820-102
这甚至可以在 Power BI 中实现吗?
如果您可以为此使用 Power BI 查询编辑器 (Power Query),则可以使用以下查询代码:
let
Source = Table1,
#"Inserted Merged Column3" = Table.AddColumn(Source, "DelimitedListWithSuffixes", each Text.Combine({[ID], "-101,", [ID],"-102"}), type text),
#"Split Column by Delimiter" = Table.ExpandListColumn(Table.TransformColumns(#"Inserted Merged Column3", {{"DelimitedListWithSuffixes", Splitter.SplitTextByDelimiter(",", QuoteStyle.Csv), let itemType = (type nullable text) meta [Serialized.Text = true] in type {itemType}}}), "DelimitedListWithSuffixes"),
#"Changed Type" = Table.TransformColumnTypes(#"Split Column by Delimiter",{{"DelimitedListWithSuffixes", type text}}),
#"Removed Other Columns" = Table.SelectColumns(#"Changed Type",{"DelimitedListWithSuffixes"}),
#"Renamed Columns" = Table.RenameColumns(#"Removed Other Columns",{{"DelimitedListWithSuffixes", "ID"}})
in
#"Renamed Columns"
(表1是你原来的ID列table。)
我想到了两种方法,尽管可能还有其他方法。
注意 - 我更喜欢第二种方法,因为它让“101”和“102”成为数据驱动的,允许它们在未来更容易地被更改或添加。
A) 通过查询编辑器(需要 hard-coding“101”/“102”值)
第 2 步:为您的后缀添加另外两列。单击 "Custom Column from Examples" 按钮,然后在第一个单元格中键入“234-101”。向下箭头到下一个单元格后,它应该 auto-populate 其余部分。对“-102”再次执行此操作。
第 3 步: 逆轴旋转两个新列,使它们合而为一。使用 "ID" 列 selected,单击 "Unpivot Columns" 的下拉菜单,然后单击 "Unpivot Other Columns"。
第 4 步:删除多余的列。在生成的数据中,您将拥有原始的 "ID" 列以及两个新列; "Attribute" 和 "Value"。由于 "Value" 列包含所需的值,select "ID" 和 "Attribute" 列,右键单击其中一个 headers,然后 select "Remove Columns"。
第 5 步: 将 "Value" 列重命名为 "ID",您就完成了。
这是所有这些操作的结果 M 代码。
let
Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45WMjI2UYrViVYyMTYF08YwhqkFRNzC1ACiwtzCyEApNhYA", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type text) meta [Serialized.Text = true]) in type table [ID = _t]),
#"Changed Type" = Table.TransformColumnTypes(Source,{{"ID", Int64.Type}}),
#"Inserted Merged Column" = Table.AddColumn(#"Changed Type", "Merged", each Text.Combine({Text.From([ID], "en-US"), "-101"}), type text),
#"Inserted Merged Column1" = Table.AddColumn(#"Inserted Merged Column", "Merged.1", each Text.Combine({Text.From([ID], "en-US"), "-102"}), type text),
#"Unpivoted Other Columns" = Table.UnpivotOtherColumns(#"Inserted Merged Column1", {"ID"}, "Attribute", "Value"),
#"Removed Columns" = Table.RemoveColumns(#"Unpivoted Other Columns",{"ID", "Attribute"}),
#"Renamed Columns" = Table.RenameColumns(#"Removed Columns",{{"Value", "ID"}})
in
#"Renamed Columns"
B) 通过DAX
第 2 步: 单击 "Enter Data" 并为后缀添加数据。 (如果这些数字来自其他地方,请跳过此部分)
第 3 步: 单击 "New Table" 并输入以下公式。
NewData = CROSSJOIN(Data, Suffixes)
第 4 步:单击“新建列”并输入以下公式。
NewID = CONCATENATE(CONCATENATE(NewData[ID], "-"), NewData[Value])
如果您希望将新列命名为 "ID",您需要先重命名旧的 "ID" 列,因为您不能像第一次那样简单地删除它方法。