我尝试在 Tableau中混合2个数据源。
当一个字段从辅助数据源进入主数据源中的计算字段时,强制我在那时聚合。
我的计算是乘法,当Tableau小计时,它以一种有趣的方式进行:
Formula = SUM(primary.a) x MAX(secondary.b)
Expected subtotal method = SUM(SUM(primary.a) x MAX(secondary.b))
Actual behavior seen = SUM(SUM(primary.a)) x MAX(secondary.b)
它对a字段进行小计,然后在之后应用最大b乘法。
如何控制计算方式的任何想法?
答案 0 :(得分:2)
前几天有完全相同的问题。实际行为是正确的,因为它取决于您正在使用的分区(工作表中的维度)。让我解释。假设您有表A和表B:
A:
Id MeasureA
1 10
2 20
3 15
4 25
5 10
6 5
B:
Id MeasureB
1 5
2 10
3 20
4 5
5 15
6 25
现在,如果你将Id拖到Rows,将你的公式拖到Columns(在条形图中),你应该有类似的东西:
Id MeasureB
1 50
2 200
3 300
4 125
5 150
6 125
对于第一行,您将使用SUM(A.MeasureA)= 10,并且MAX(B.MeasureB)= 5.并且乘法为50
现在,如果你从行中删除了Id,你将得到SUM(A.MeasureA)= 85,MAX(B.MeasureB)= 25.并且乘法将是2,125,而不是你期待的是950(我的第三张表中值的总和)
请记住,聚合发生在工作表中明确的维度级别。
要确保结果紧张,您需要在连接到Tableau之前加入表格。我想,在SQL上做起来并不是很难。没有办法通过仅数据混合
来获得您想要的东西(仅在最低级聚合中)答案 1 :(得分:1)
如果您想复制逻辑SUM(SUM(primary.a) × MAX(secondary.b))
,我想您需要一个LOD表达式,该表达式将secondary.b
的最大值分配给primary.a
中的每一行。
我认为这样的表达:
{EXCLUDE[id]:MAX[secondary.b]}
...应该可以解决问题。