将列的值分配给 DAX 中的不同列

Allocating a Column’s value to a different Column in DAX

我正在做一份报告,但遇到了一些问题。 基本上,如果成本中心 0 中存在一个值 image
image
1479×805 116 KB

我需要将该值分配给其他列(例如 10、11、12、13、20 ……):

按照这些百分比(Table 是默认成本中心分配):

并将 0 成本中心列清零。

因此使用折扣类别下的行帐户 5040,您的价值为 3,371 美元:

我需要的数学是所有成本中心,但例如成本中心 10 是: $1,392(成本中心 10 的原始数字)+ ($3,371 * 10%)

然后我将按照相同的分配惯例分配给每个成本中心(例如 10、11、12、13、20 ……),最后成本中心 0 将显示为空,因为它已分配给其他成本中心。

细分如下:

在excel中:

这里简化了;无论关联帐户 (1) 是否有数据,我都需要每个字段包含关联的查找值,如示例 (2)

PBI: https://forum.enterprisedna.co/uploads/short-url/imfl4RENrOZbxpnaezeAYeII4r8.pbix

您已经知道如何使用 mquery。

特此脚本操作数据。我无法使用您的 pbi 文件,因为主控 table 没有提供任何数据,所以我将 PowerBI 表格复制到 excel 并进行了新的导入。

前 4 行是导入,因此您不需要它。

  1. 过滤以仅获取成本中心 0 行
  2. 合并成本单位以获得如何分配资金的百分比。
  3. 仅展开需要的列
  4. 在进行计算的地方添加列 Alloc
  5. 从 orig table 中删除不需要的列并重命名其他列以匹配 orig table
  6. 从成本中心 <> 0
  7. 的原 table 获取所有其他行

最终结果是您的原稿 table 中的额外行,您需要在报告中显示这些行。您需要附加到现有 GLTransactions 的脚本 table

let
    Source = Excel.Workbook(File.Contents("C:\PowerBI\GLTransactions.xlsx"), null, true),
    GLTransactions_Sheet = Source{[Item="GLTransactions",Kind="Sheet"]}[Data],
    #"Promoted Headers" = Table.PromoteHeaders(GLTransactions_Sheet, [PromoteAllScalars=true]),
    #"Changed Type" = Table.TransformColumnTypes(#"Promoted Headers",{{"ID", Int64.Type}, {"bkjrcode", Int64.Type}, {"ACCOUNT", Int64.Type}, {"dagbknr", Int64.Type}, {"COST CENTER", Int64.Type}, {"COST UNIT", Int64.Type}, {"docdate", type datetime}, {"PK Cost Center", Int64.Type}, {"PK Cost Unit", Int64.Type}, {"Segment Driver", type text}, {"Dollars with Allocation", Int64.Type}, {"Merged", Int64.Type}, {"Default Cost Center Allocation.Value", type number}, {"Cost Center Desc", type text}, {"bdr_hfl", Int64.Type}}),


    GetOnlyCostCenter0 = Table.SelectRows(#"Changed Type", each ([COST CENTER] = 0)),
    #"Filtered Rows1" = Table.SelectRows(GetOnlyCostCenter0, each [Dollars with Allocation] > 0),
    #"Merged Queries" = Table.NestedJoin(#"Filtered Rows1", {"COST UNIT"}, #"Cost Unit Allocation", {"Cost unit"}, "Cost Unit Allocation", JoinKind.LeftOuter),
    #"Expanded Cost Unit Allocation" = Table.ExpandTableColumn(#"Merged Queries", "Cost Unit Allocation", {"Cost Center", "Description", "PK Cost Units Allocation", "Value"}, {"Cost Center.1", "Description", "PK Cost Units Allocation", "Value"}),
    #"Added Custom" = Table.AddColumn(#"Expanded Cost Unit Allocation", "Alloc", each [Dollars with Allocation] * [Value]),
    #"Removed Columns" = Table.RemoveColumns(#"Added Custom",{"COST CENTER", "Dollars with Allocation", "Cost Center Desc","PK Cost Center","PK Cost Unit","Value"}),
    #"Renamed Columns" = Table.RenameColumns(#"Removed Columns",{{"Cost Center.1", "Cost Center"}, {"Description", "Cost Center Desc"}, {"Alloc", "Dollars with Allocation"}, {"PK Cost Units Allocation", "PK Cost Unit"}}),
    GetExclCostCenter0 = Table.SelectRows(#"Changed Type", each ([COST CENTER] <> 0)),
    #"Appended Query" = Table.Combine({#"Renamed Columns", GetExclCostCenter0})
in
    #"Appended Query" // Here you have your new Transactions(gbkmut) table. It includes rows for each cost allocation