Tableau混合聚合计算问题

时间:2014-11-14 12:06:41

标签: sql report tableau tableau-server

我尝试在 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乘法

如何控制计算方式的任何想法?

2 个答案:

答案 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]}

...应该可以解决问题。