Tableau中[Listing Reward Final]计算字段总计值错误修复请求
Tableau仪表板总计值计算错误修复方案
问题背景
现有Tableau仪表板通过计算字段[Listing Reward Final]计算员工个人奖励,字段代码如下:
CASE attr([Calendar WeekInPeriod]) WHEN 4 THEN CASE sum([Listing Flag]) WHEN 8 THEN 20 WHEN 9 THEN 25 WHEN 10 THEN 35 WHEN 11 THEN 50 WHEN 12 THEN 70 WHEN 13 THEN 95 WHEN 14 THEN 125 WHEN 15 THEN 160 WHEN 16 THEN 200 ELSE IF sum([Listing Flag]) < 8 THEN 0 ELSE 200 + (sum([Listing Flag]) - 16) * 50 END END WHEN 3 THEN CASE sum([Listing Flag]) WHEN 6 THEN 20 WHEN 7 THEN 25 WHEN 8 THEN 35 WHEN 9 THEN 50 WHEN 10 THEN 70 WHEN 11 THEN 95 WHEN 12 THEN 125 WHEN 13 THEN 160 WHEN 14 THEN 200 ELSE IF sum([Listing Flag]) < 6 THEN 0 ELSE 200 + (sum([Listing Flag]) - 14) * 50 END END WHEN 5 THEN CASE sum([Listing Flag]) WHEN 10 THEN 20 WHEN 11 THEN 25 WHEN 12 THEN 35 WHEN 13 THEN 50 WHEN 14 THEN 70 WHEN 15 THEN 95 WHEN 16 THEN 125 WHEN 17 THEN 160 WHEN 18 THEN 200 ELSE IF sum([Listing Flag]) < 10 THEN 0 ELSE 200 + (sum([Listing Flag]) - 18) * 50 END END ELSE NULL END
当前表现
- 员工个人奖励计算逻辑正确;
- 总计值错误:系统将奖励公式直接应用于所有员工
Listing Flag的总和(122),得出结果5500,但实际正确总计应为所有员工个人奖励之和(905)。
期望表现
- 员工个人奖励计算逻辑保持不变;
- 总计值为所有员工个人奖励的累加值905。
相关数据表格
| 员工/总计 | Listing Flag | 奖励值 |
|---|---|---|
| 总计 | 122 | 5500 |
| 员工1 | 11 | 50 |
| 员工2 | 17 | 250 |
| 员工3 | 12 | 70 |
| 员工4 | 7 | 0 |
| 员工5 | 8 | 20 |
| 员工6 | 13 | 95 |
| 员工7 | 3 | 0 |
| 员工8 | 12 | 70 |
| 员工9 | 18 | 300 |
| 员工10 | 4 | 0 |
| 员工11 | 6 | 0 |
| 员工12 | — | — |
| 员工13 | 11 | 50 |
| 员工14 | — | — |
解决方案
核心思路是让总计行计算个人奖励的总和,而非对总Listing Flag应用奖励公式,以下是三种可行方法:
方法1:拆分计算字段(推荐)
先计算员工个人级别的奖励,再对结果求和:
- 创建基础计算字段
[Individual Reward],改为行级别计算(假设[Calendar WeekInPeriod]在员工维度下唯一):
CASE [Calendar WeekInPeriod] WHEN 4 THEN CASE [Listing Flag] WHEN 8 THEN 20 WHEN 9 THEN 25 WHEN 10 THEN 35 WHEN 11 THEN 50 WHEN 12 THEN 70 WHEN 13 THEN 95 WHEN 14 THEN 125 WHEN 15 THEN 160 WHEN 16 THEN 200 ELSE IF [Listing Flag] < 8 THEN 0 ELSE 200 + ([Listing Flag] - 16) * 50 END END WHEN 3 THEN CASE [Listing Flag] WHEN 6 THEN 20 WHEN 7 THEN 25 WHEN 8 THEN 35 WHEN 9 THEN 50 WHEN 10 THEN 70 WHEN 11 THEN 95 WHEN 12 THEN 125 WHEN 13 THEN 160 WHEN 14 THEN 200 ELSE IF [Listing Flag] < 6 THEN 0 ELSE 200 + ([Listing Flag] - 14) * 50 END END WHEN 5 THEN CASE [Listing Flag] WHEN 10 THEN 20 WHEN 11 THEN 25 WHEN 12 THEN 35 WHEN 13 THEN 50 WHEN 14 THEN 70 WHEN 15 THEN 95 WHEN 16 THEN 125 WHEN 17 THEN 160 WHEN 18 THEN 200 ELSE IF [Listing Flag] < 10 THEN 0 ELSE 200 + ([Listing Flag] - 18) * 50 END END ELSE NULL END
- 创建最终显示字段
[Listing Reward Final],对个人奖励求和:
SUM([Individual Reward])
- 将该字段拖入视图,总计行自动计算所有员工奖励的总和。
方法2:使用LOD表达式(维度复杂场景)
如果[Calendar WeekInPeriod]是跨员工的维度,用固定级别表达式确保每个员工的奖励单独计算后再求和:
SUM({FIXED [员工ID], [Calendar WeekInPeriod]: CASE [Calendar WeekInPeriod] WHEN 4 THEN CASE [Listing Flag] WHEN 8 THEN 20 WHEN 9 THEN 25 WHEN 10 THEN 35 WHEN 11 THEN 50 WHEN 12 THEN 70 WHEN 13 THEN 95 WHEN 14 THEN 125 WHEN 15 THEN 160 WHEN 16 THEN 200 ELSE IF [Listing Flag] < 8 THEN 0 ELSE 200 + ([Listing Flag] - 16) * 50 END END WHEN 3 THEN CASE [Listing Flag] WHEN 6 THEN 20 WHEN 7 THEN 25 WHEN 8 THEN 35 WHEN 9 THEN 50 WHEN 10 THEN 70 WHEN 11 THEN 95 WHEN 12 THEN 125 WHEN 13 THEN 160 WHEN 14 THEN 200 ELSE IF [Listing Flag] < 6 THEN 0 ELSE 200 + ([Listing Flag] - 14) * 50 END END WHEN 5 THEN CASE [Listing Flag] WHEN 10 THEN 20 WHEN 11 THEN 25 WHEN 12 THEN 35 WHEN 13 THEN 50 WHEN 14 THEN 70 WHEN 15 THEN 95 WHEN 16 THEN 125 WHEN 17 THEN 160 WHEN 18 THEN 200 ELSE IF [Listing Flag] < 10 THEN 0 ELSE 200 + ([Listing Flag] - 18) * 50 END END ELSE NULL END })
方法3:临时修改总计计算逻辑
若不想修改计算字段,可直接调整视图设置:
- 右键点击视图中的总计行 → 总计 → 计算依据;
- 选择总和,确保是对个人奖励列求和而非对
Listing Flag总和应用公式。
注意:此方法仅修改当前视图显示,调整维度后可能失效,仅作临时方案。
内容的提问来源于stack exchange,提问作者deepankar srigyan
相关产品推荐
相关产品推荐

