更新2:
我有来自财务系统的组合事实表和 DIM 表来澄清行值。另一方面,我试图生成与“combined_fact_table”结构相同的第二个表,我想在其中计算我需要的所有值(大约 30k 值)。然后的想法是将计算值附加到combined_fact_table,并在Power BI Matrix视觉中加载正确的account_id。在表计算中,account_id 并不是真正的帐户 ID,而是用于识别其是否为计算的 ID。因此,从 16400 到 18200(共 100 个步骤)是用于计算的 id,之前的所有 id 都是来自财务软件的一些帐户。我认为这是一个非常愚蠢但直接解决我的需求的解决方案:D 第二种方法是为所有人制定措施计算,然后使用另一个度量在度量值或表值之间切换。最重要的是性能
更新2
更新开始8.2.24:
我更改了表格,因此您只有一个yearQuarter列,例如20191、20192、20201、20202 等等。
我知道尝试使用 Sam 建议的代码并稍作更改,但只得到空白结果:
result =
var thisUnitNumber = 'Fct_Calculation'[unit_number]
var thisYearQuarter = 'Fct_Calculation'[year_quarter]
var factFilter =
FILTER(
'combined_fact_tables',
[unit_number] = thisUnitNumber &&
[year_quarter] = thisYearQuarter
)
return SWITCH( 'Fct_Calculation'[account_id],
16400,
CALCULATE(
SUM('combined_fact_tables'[absolute_value]),
'combined_fact_tables'[account_id] = 100,
factFilter
),
16500,
CALCULATE(
SUM('combined_fact_tables'[absolute_value]),
'combined_fact_tables'[account_id] IN {100, 200},
factFilter
),
16600,
(
var a3 = CALCULATE(
SUM('combined_fact_tables'[absolute_value]),
'combined_fact_tables'[account_id] = 300,
factFilter
)
var a2 = CALCULATE(
SUM('combined_fact_tables'[absolute_value]),
'combined_fact_tables'[account_id] = 200,
factFilter
)
return DIVIDE(a3, a2)
)
)
并在两个表之间建立关系将导致多对多关系。仍然感觉我走在错误的道路上,这不是最佳实践方法。对超过 30k 个单元进行测量真的是最佳实践吗? :S 每次用户更改过滤器时计算这个值似乎很奇怪。此外,对于用户来说,总是重新计算它并没有额外的价值:S
更新结束
我有一个事实表,其中包含所有单位、帐户、年度季度和类型(实际、预算、预测)的帐户余额。例如:
另一方面,我有一个表格来构建财务报表:
“计算”一栏旨在说明满足某些条件时我要计算的内容。
想要的结果如下:
我的示例主要用作占位符,以了解我如何计算,例如,帐户投资占净收入的百分比,或者偶尔汇总多个帐户,因为它们是相关的。例如,计算自由现金流(加和减法的组合)。
我不确定这是否应该在原始数据本身(在本例中为 Excel 文件)或 Power BI 中完成,如果是后者,什么会被视为最佳实践。由于财务报表是一个常见的话题,令我惊讶的是我发现或尝试的解决方案都没有达到预期的效果。有什么办法可以对不同行的不同条件进行不同的计算吗?或者这种方法本身就有缺陷?在这种情况下,常见的方法是什么?
非常感谢您的帮助<3
由于我不确定如何提出我的问题,请随时在需要时要求澄清。
假设你有:
表:
FactTable
单位编号 | 年 | 四分之一 | 账户 ID | 价值 |
---|
还有
表:
Statement
单位编号 | 年 | 季度 | 盈亏位置 |
---|
然后您可以将以下计算列添加到您的
Statement
表中:
result =
var thisU = [unit_number]
var thisY = [year]
var thisQ = [quarter]
var factFilter =
FILTER(
'FactTable',
[unit_number] = thisU &&
[year] = thisY &&
[quarter] = thisQ
)
return SWITCH( [p&l position],
1,
CALCULATE(
SUM('FactTable'[value]),
'FactTable'[account_id] = 1,
factFilter
),
2,
CALCULATE(
SUM('FactTable'[value]),
'FactTable'[account_id] IN {1, 2},
factFilter
),
3,
(
var a3 = CALCULATE(
SUM('FactTable'[value]),
'FactTable'[account_id] = 3,
factFilter
)
var a2 = CALCULATE(
SUM('FactTable'[value]),
'FactTable'[account_id] = 2,
factFilter
)
return DIVIDE(a3, a2)
)
)
如果您愿意,您可以向两个表添加自定义列以进行关系连接,例如:
ID = COMBINEVALUES("-", [year], [quarter], [unit_number])
然后你可以简化上面的:
result =
SWITCH( [p&l position],
1,
CALCULATE( SUM('FactTable'[value]), 'FactTable'[account_id] = 1 ),
2,
CALCULATE( SUM('FactTable'[value]), 'FactTable'[account_id] IN {1, 2} ),
3,
(
var a3 = CALCULATE( SUM('FactTable'[value]), 'FactTable'[account_id] = 3 )
var a2 = CALCULATE( SUM('FactTable'[value]), 'FactTable'[account_id] = 2 )
return DIVIDE(a3, a2)
)
)