Power BI 运行 水平总计

Power BI Running total horizontally

我正在使用 Power BI table,但我无法按需要计算余额 "Running total"。

我在 Stack Overflow 和其他网页上搜索,我总是找到针对非常相似情况的相同解决方案,但不是这个。

首先,这是我的 table:

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

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

每当我需要对行进行垂直求和时,这都可以使用,但我不是这种情况。的确,我需要横向求和:

有什么建议吗?

编辑 1:

这是我需要的:

因此,如果您仔细查看此 table,它会对每个供应商的每一列进行计算,例如:

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

我在这里做了一个很大的假设:"Totals" 列不需要 "Total" 行。

如果不是,那么 Column 是不是如图所示定义的:

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

这是在 Power Query 中完成的,因为我没有 BI,但我认为 M 代码也能正常工作。如果您在 add/delete 列中刷新查询,它也会自动调整,因此无需单独引用每一列。

您添加了一个自定义列,它汇总了除 "Vendor/Month"

之外的所有列
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"

这是自定义列对话框:

这是结果:

正如 Alexis Olson 之前所建议的那样,您应该将从 OLAP 多维数据集获得的 'table' 导入到 Power Query 编辑器中并将其取消透视。你会从这个开始:

使用这样的脚本:

let
    Source = Excel.Workbook(File.Contents("C:\Users7085\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"

结果 table 将是这样的:

然后创建以下测量:

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

在矩阵视觉中,将供应商放在行上,月份放在列上,[RunningTotal] 放在值上。