如何在Tableau中复刻Excel的Product函数计算金融收益率乘积
在Tableau中计算含正负值的金融收益率乘积解决方案
问题背景
在Excel中可使用公式PRODUCT(1+Value)-1计算金融收益率的总回报(即所有(1+收益率)的乘积减1),但Tableau没有原生的PRODUCT函数。常规替代方案EXP(SUM(LN(1+[Field Name])))-1仅适用于所有1+[Field Name]为正的场景;当数据包含正负值时,若使用错误的公式EXP(SUM(LN(ABS(1+[Field Name]-1)))),不仅存在语法错误(多减了1),还会丢失符号信息,导致结果绝对值正确但符号错误。
目标计算逻辑:((1+Value₁) * (1+Value₂) * ... * (1+Valueₙ)) - 1
解决方案
核心思路是同时计算绝对值乘积和符号:通过统计分组内1+[My Data]为负数的个数,判断最终乘积的符号(奇数个负数则结果为负,偶数个则为正),再结合绝对值乘积得到正确结果。
步骤1:创建计算字段统计负数项个数
创建名为负数项个数的计算字段,统计每个分组(如示例中的DATE分组)内1+[My Data]为负数的条目数量:
COUNT(IF (1+[My Data]) < 0 THEN 1 END)
步骤2:计算绝对值乘积部分
创建名为绝对值乘积的计算字段,计算所有1+[My Data]绝对值的乘积:
EXP(SUM(LN(ABS(1+[My Data]))))
步骤3:结合符号计算最终结果
创建名为最终总回报的计算字段,根据负数项个数的奇偶性添加符号,再完成总回报计算:
IF [负数项个数] % 2 = 1 THEN -[绝对值乘积] ELSE [绝对值乘积] END - 1
针对示例数据的特殊调整
若你的实际需求是直接计算收益率本身的乘积(而非(1+收益率)的乘积减1,如示例中Excel列的结果-2.89923即为1.23 * -0.97 * 2.43的结果),只需调整上述公式:
- 负数项个数字段改为:
COUNT(IF [My Data] < 0 THEN 1 END)
- 绝对值乘积字段改为:
EXP(SUM(LN(ABS([My Data]))))
- 最终结果字段改为:
IF [负数项个数] % 2 = 1 THEN -[绝对值乘积] ELSE [绝对值乘积] END
调整后即可得到与示例中Excel列一致的结果。
内容的提问来源于stack exchange,提问作者naomitrina
相关产品推荐
相关产品推荐

