Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/powerbi/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Powerbi Power BI从列创建新行_Powerbi_Powerquery - Fatal编程技术网

Powerbi Power BI从列创建新行

Powerbi Power BI从列创建新行,powerbi,powerquery,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 C

在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

有简单的方法吗?

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

结果应该如下所示:

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"

然后,可以定义自定义列,以根据属性列或值列选择要使用的当前列。然后删除额外的列

整个查询(从高级编辑器粘贴)如下所示:

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"

如评论中所述,只需添加表格即可。我从这个例子开始

我只是将表附加到它本身,下面是M代码

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
结果是

您可以“复制”表格,然后将原始表格的行与新表格的行合并。我现在无法使用PowerBI来检查正确的操作名称,但也许您可以找到它。但我相信一定有更简单的方法。