我试图将季度回报计算为复合
配方: -
(1+M1)*(1+M2)*...*(1+Mn)-1
M1 =第一个月的回报
M2 =第二个月的回报。
现在,我找不到任何可以实现这一目标的人。我在这里错过了什么吗? 所以,我创建了两个计算字段[M-1],[M-2],它们具有上个月的回报
([M-1] = LOOKUP(ATTR([Monthly Return]), -1), [M-2] = LOOKUP(ATTR([Monthly Return]), -2))
用公式计算新的字段QR:
IF(ATTR([Month]) = 3 OR ATTR([Month]) = 6 OR ATTR([Month]) = 9 OR ATTR([Month]) = 12)
THEN
((1+ATTR([Monthly Return]))*(1+[M-1])*(1+[M-2]))-1
ELSE
0
END
这给了我
到目前为止哪个是正确的。现在,当我尝试季度时,它应该记录所有三个月的价值并给我第一季度的权利吗?相反,它给我0或null如下:
可以在here中找到tbwx文件。 为什么会这样?我错过了什么吗?有没有其他方法可以实现这个目标?
提前致谢。
答案 0 :(得分:1)
事情是,表计算(LOOKUP是一个例子)取决于工作表上显式的聚合级别。
看一下,在您的[M-1]和[M-2]计算中,您告诉Tableau您希望它在几个月内执行。因此,在您的季度示例中,它基本上采用了最后一个季度的值,而不是几个月。并且您正在使用ATTR,当每个维度的所有值都不相同时,可能会产生不可预测的结果。
我认为发生了什么:ATTR([月])任何一个季度都没有返回3,6,9或12(我猜想Tableau将采用第一个值,因此1,4,7,10) ,因此它落在ELSE 0循环上。
编辑:可以做些什么?如果您的第一个图表是正确的,您可以隐藏不必要的字段。实现此目的的一种方法实际上是隐藏您不感兴趣的月份。其他方式更实用,但它有点黑客。创建一个字段([过滤月份]):
LOOKUP(MAX([Month]),0)%3 = 0
然后将其拖动到过滤器,并选择真值
这将仅保留您感兴趣的月份(3的倍数),但不会使您的计算失败,因为在计算完所有内容后,最后会执行表计算(如查找)。因此,过滤的月份不会出现在您的图表中,但仍会在其他计算中考虑。
您仍然需要在图表上保留[月]尺寸,但您始终可以使用字体大小和颜色来隐藏它
答案 1 :(得分:0)
用于计算复合季度回报的公式为:
(1+M1)*(1+M2)*...*(1+Mn)-1
M1 =该季度的第一个月回报
M2 =该季度的第二个月回报
并且只在问题中显示的IF ELSE声明中计算了3,6,9和12个月
所以,这在月视图中工作正常,如pic-1(有问题)所示。对于季度,它应该是,{{0}}
相反,它给我0或,如pic-2(有问题)
这是因为,它是按季度汇总度量并对汇总度量应用公式((1+M1)*(1+M2)*...*(1+Mn)-1
)。也就是说,它计算季度SUM([Monthly Return])
并在此之后应用公式。它必须先用公式计算,然后用SUM计算结果。
我所做的只是从Aggregate Measures
取消选中Analysis
。
在计算之前不会聚合这些值。