Power BI - 重复行

时间:2017-08-02 18:00:57

标签: powerbi dax

在Power BI中,我有一个如下所示的表:

ID
234
435
3435
58
48504
7820

我想将其转换为如下所示的表:

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中是否可行?

2 个答案:

答案 0 :(得分:2)

如果您可以使用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列表。)

答案 1 :(得分:1)

我想到了两种方法,尽管可能还有其他方法。

注意 - 我更喜欢第二种方法,因为它让" 101"和" 102"是数据驱动的,可以更容易地在将来更改或添加它们。

A)通过查询编辑器(需要对" 101" /" 102"值进行硬编码)

第1步:在查询编辑器中查看数据 Step A1 - Start

第2步:为后缀添加两个附加列。单击示例中的"自定义列"按钮,然后输入" 234-101"在第一个细胞中。向下箭头指向下一个单元格后,它应自动填充其余单元格。为" -102"再次执行此操作。 Step A2 - Custom Columns

第3步:取消隐藏两个新列,将它们合并为一个。使用" ID"选中列,单击" Unpivot Columns"并单击"取消透视其他列"。 Step A3 - Unpivot Columns

第4步:删除多余的列。在结果数据中,您将拥有原始的" ID"专栏,以及两个新专栏; "属性"和"价值"。自"价值"列包含所需的值,选择" ID"和"属性"列,右键单击其中一个标题,然后选择"删除列"。 Step A4 - Remove Columns

第5步:重命名"值"列到" ID"而且你已经完成了。 Step A5 - Rename Column

以下是所有这些操作的结果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

第1步:从数据视图中的数据开始。 Step B1 - Start

第2步:点击"输入数据"并添加后缀的数据。 (如果这些数字来自其他地方,请跳过此处) Step B2 - Add Suffix Data

第3步:点击"新表"并输入以下公式。

NewData = CROSSJOIN(Data, Suffixes)

Step B3 - New Table

第4步:点击"新列并输入以下公式。

NewID = CONCATENATE(CONCATENATE(NewData[ID], "-"), NewData[Value])

Step B4 - New Column

如果您希望将新列命名为" ID",则您需要重命名旧的" ID"首先是列,因为你不能像第一种方法那样删除它。