Power BI总水平运行

时间:2018-10-16 19:18:52

标签: excel powerbi dax powerquery m

我正在使用Power BI表,但无法按需要计算余额“运行总额”。

我在Stack Overflow和其他网页中进行搜索,对于非常相似的情况,我总能找到相同的解决方案,不是这样。

首先,这是我的桌子:

First table

我在此和other sites中找到了相同的解决方案:

Running Total COLUMN =
    CALCULATE (
        SUM ( 'My table'[Accounting Balance] ),
        ALL ( 'My table' ),
       'My table'[Date] <= EARLIER ( 'My table'[Date] ))

只要我需要垂直加总行,这都是可行的,这不是我的情况。确实,我需要水平汇总价值:

Second table

有什么建议吗?

编辑1

这就是我需要的:

Result table

因此,如果您仔细查看此表,它将得到每个供应商的每一列的最终计算结果,例如:

  1. 供应商1 于2017年1月欠款200美元
  2. 供应商1 在2017年2月欠了$ 0,因为他付款了$ 200
  3. 供应商1 由于$ 0 + $ 50而在2017年3月欠$ 50
  4. 供应商1 在2017年4月欠了50美元,因为他没有付款。
  5. 供应商1 总共欠款$ 50。​​

3 个答案:

答案 0 :(得分:2)

这是在Power Query中完成的,因为我没有BI,但是我认为M代码同样可以使用。如果您在添加/删除列时刷新查询,它还将自动调整,因此无需单独引用每个列。

您添加了一个自定义列,该列将除“供应商/月”之外的所有列加起来

let
    Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
    #"Changed Type" = Table.TransformColumnTypes(Source,{{"Vendor/Month", type text}, {"Jan-17", Int64.Type}, {"Feb-17", Int64.Type}, {"Mar-17", Int64.Type}, {"Apr-17", Int64.Type}}),
    #"Sum" = Table.AddColumn(
    #"Changed Type",
      "Total",
  each List.Sum(
    Record.ToList(
      Record.SelectFields(
      _,
      List.RemoveItems(Table.ColumnNames(#"Changed Type"), {"Vendor/Month"})))))
in
    #"Sum"

这是“自定义列”对话框:

enter image description here

这是结果:

enter image description here

答案 1 :(得分:0)

我在这里做一个大假设:“总计”列不需要“总计”行。

如果不是,那么列的定义是否如下所示:

Totals = Table1[Jan-17]+Table1[Feb-17]+Table1[Mar-17]

PowerBI Totals Column

答案 2 :(得分:0)

如亚历克西斯·奥尔森(Alexis Olson)先前所建议的那样,您应该将从OLAP多维数据集获得的“表”导入Power Query编辑器中,然后再将其取消旋转。您将从此开始:

enter image description here

使用这样的脚本:

let
    Source = Excel.Workbook(File.Contents("C:\Users\927085\Documents\Marco\SO\SO18-10-1.xlsx"), null, true),
    Sheet3_Sheet = Source{[Item="myTable",Kind="Sheet"]}[Data],
    #"Changed Type" = Table.TransformColumnTypes(Sheet3_Sheet,{{"Column1", type text}, {"Column2", type any}, {"Column3", type any}, {"Column4", type any}, {"Column5", type any}, {"Column6", type any}}),
    #"Promoted Headers" = Table.PromoteHeaders(#"Changed Type", [PromoteAllScalars=true]),
    #"Removed Columns" = Table.RemoveColumns(#"Promoted Headers",{"Totals"}),
    #"Removed Bottom Rows" = Table.RemoveLastN(#"Removed Columns",1),
    #"Unpivoted Other Columns" = Table.UnpivotOtherColumns(#"Removed Bottom Rows", {"Vendor/Month"}, "Attribute", "Value"),
    #"Added Custom" = Table.AddColumn(#"Unpivoted Other Columns", "Custom", each "1-"&[Attribute]),
    #"Changed Type1" = Table.TransformColumnTypes(#"Added Custom",{{"Custom", type date}}),
    #"Renamed Columns" = Table.RenameColumns(#"Changed Type1",{{"Custom", "Month"}}),
    #"Removed Columns1" = Table.RemoveColumns(#"Renamed Columns",{"Attribute"}),
    #"Changed Type2" = Table.TransformColumnTypes(#"Removed Columns1",{{"Value", Int64.Type}}),
    #"Renamed Columns1" = Table.RenameColumns(#"Changed Type2",{{"Value", "Accounting Balance"}, {"Vendor/Month", "Vendor"}})
in
    #"Renamed Columns1"

结果表将是这样:

enter image description here

然后创建以下方法:

RunningTotal = 
CALCULATE (
    SUM ( myTable[Accounting Balance] ),
    FILTER (
        ALLEXCEPT ( 'myTable', myTable[Vendor] ),
        'myTable'[Month] <= SELECTEDVALUE ( myTable[Month] )
    )
)

在矩阵直观图中,将Vendor放在行上,将Month放在列上,将[RunningTotal]放在Values上。

enter image description here