将列的值分配给 DAX 中的不同列
Allocating a Column’s value to a different Column in DAX
我正在做一份报告,但遇到了一些问题。
基本上,如果成本中心 0 中存在一个值
我需要将该值分配给其他列(例如 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 行是导入,因此您不需要它。
- 过滤以仅获取成本中心 0 行
- 合并成本单位以获得如何分配资金的百分比。
- 仅展开需要的列
- 在进行计算的地方添加列 Alloc
- 从 orig table 中删除不需要的列并重命名其他列以匹配 orig table
- 从成本中心 <> 0
的原 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
我正在做一份报告,但遇到了一些问题。 基本上,如果成本中心 0 中存在一个值
我需要将该值分配给其他列(例如 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 行是导入,因此您不需要它。
- 过滤以仅获取成本中心 0 行
- 合并成本单位以获得如何分配资金的百分比。
- 仅展开需要的列
- 在进行计算的地方添加列 Alloc
- 从 orig table 中删除不需要的列并重命名其他列以匹配 orig table
- 从成本中心 <> 0 的原 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