Power BI从列创建新行

时间:2020-10-16 20:48:08

标签: powerbi powerquery

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

Customer; Amount Paid; Pay CCY; Amount Received; Received CCY
   A          10        USD       -20               GBP
   B          50        CAD       -30               USD
   C         100        GBP       -50               CAD

我想将表转换为:

Customer Amount CCY
  A        10   USD
  B        50   CAD
  C       100   GBP
  A       -20   GBP
  B       -30   USD
  C       -50   CAD

有简单的方法吗?

2 个答案:

答案 0 :(得分:0)

在查询编辑器中,选择金额列,然后单击“转换”选项卡下的“取消透视列”。

结果应如下所示:

Unpivoted

然后,您可以定义一个自定义列,以基于“属性”列或“值”列选择要使用的电流。然后删除多余的列。

整个查询(从“高级编辑器”粘贴)看起来像这样:

let
    Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45WclTSUTI0ABKhwS5AUtcIxHZ3ClCK1YlWcgKyTUECzo5gSWOYQpCkM1gnTDlQFq4yNhYA", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [Customer = _t, #"Amount Paid" = _t, #"Pay CCY" = _t, #"Amount Received" = _t, #"Recieved CCY" = _t]),
    #"Changed Type" = Table.TransformColumnTypes(Source,{{"Customer", type text}, {"Amount Paid", Int64.Type}, {"Pay CCY", type text}, {"Amount Received", Int64.Type}, {"Recieved CCY", type text}}),
    #"Unpivoted Columns" = Table.UnpivotOtherColumns(#"Changed Type", {"Customer", "Pay CCY", "Recieved CCY"}, "Attribute", "Amount"),
    #"Sorted Rows" = Table.Sort(#"Unpivoted Columns",{{"Attribute", Order.Ascending}, {"Customer", Order.Ascending}}),
    #"Added Custom" = Table.AddColumn(#"Sorted Rows", "CCY", each if [Amount] > 0 then [Pay CCY] else [Recieved CCY], type text),
    #"Removed Columns" = Table.RemoveColumns(#"Added Custom",{"Pay CCY", "Recieved CCY", "Attribute"})
in
    #"Removed Columns"

Final result

答案 1 :(得分:0)

正如评论中所说,可以只添加表格。我从这个例子开始 enter image description here

我只是将表格附加到其自身,这是M -Code

let
    Source = Excel.CurrentWorkbook(){[Name="tblData"]}[Content],
    tblStart1 = Table.TransformColumnTypes(Source,{{"Customer", type text}, {"Amount Paid", Int64.Type}, {"Pay CCY", type text}, {"Amount Received", Int64.Type}, {"Received CCY", type text}}),
    removeColumns1 = Table.SelectColumns(tblStart1,{"Customer", "Amount Paid", "Pay CCY"}),
    tblLeft = Table.RenameColumns(removeColumns1,{{"Amount Paid", "Amount"}, {"Pay CCY", "CCY"}}),
    tblStart2 = tblStart1,
    removeColumns = Table.SelectColumns(tblStart2,{"Customer", "Amount Received", "Received CCY"}),
    tblRight = Table.RenameColumns(removeColumns,{{"Amount Received", "Amount"}, {"Received CCY", "CCY"}}),
    tblCombine = Table.Combine({tblLeft,tblRight})
in
    tblCombine

结果是

enter image description here