我正在尝试创建一个表达式,该表达式将检索用户选择之外的特定级别的值。我的事实表堆叠了多个事实表,下面是数据模型的示例:
表名 | 国家 | 状态 | 销售 | 目标 |
---|---|---|---|---|
销售 | 美国 | 加利福尼亚州 | 100 | 空 |
销售 | 美国 | 加利福尼亚州 | 200 | 空 |
销售 | 美国 | 纽约 | 200 | 空 |
目标 | 美国 | 空 | 空 | 500 |
销售 | CA | 多伦多 | 100 | 空 |
销售 | CA | 多伦多 | 200 | 空 |
销售 | CA | 温哥华 | 200 | 空 |
目标 | CA | 空 | 空 | 500 |
销售额是州/市级别的,而目标是国家级别的。用户将选择 1 个州/城市并将其与该国家/地区的目标进行比较,以查看其贡献。对于加利福尼亚州,将为 300 / 500 = 60%。
但是,由于用户将按州/城市进行过滤,因此任何目标值都将返回 0。
我假设 p() 需要在某个地方使用(因为销售和目标的关系是由国家/地区值而不是关联决定的),但是我如何通过集合分析来实现这一点?
此外,如果“销售”行和“目标”行由于公共列值而具有关系,那么此处使用的正确术语是什么?
谢谢!
我能够使用 setanalysis、
Aggr()
函数和total
关键字来实现这一点。这个表达对我有用:
=Sum(Sales) / Sum(total <[Country]> Aggr(Sum({1} [Target]), [Country]))
该表达式中的分母被分解:
Sum(total <[Country]> Aggr(Sum({1} [Target]), [Country]))
^ ^ ^ ^
3. 4. 2. 1.
[Target]
字段进行总结。我们希望忽略用户对这部分表达式的选择,因此我们使用 set 标识符 {1}
。Sum()
函数放入 Aggr()
函数中,以便我们可以在 Sum()
字段上对 [Country]
进行聚合或分组。Aggr()
为我们提供了每个国家/地区的总目标值,我们现在想要 Sum()
这些值,但给出所有维度的 total
金额。total
指定要忽略的维度,在本例中,我们选择 [Country]
字段,以便我们可以看到汇总到国家/地区而不是州/城市的总和值。