如何在Tableau中确保每个薪资等级的加权薪资比例仅汇总一次?
解决Tableau中活动-薪资等级工时占比重复求和问题
问题分析
你当前的公式存在两个核心问题:
- 外层用
SUM()包裹LOD表达式,导致视图中如果存在日期等细分维度时,会把每行的计算结果重复相加 - 直接用
[Salaris_uniek]参与计算,未明确锁定该字段在活动+薪资等级维度下的唯一性(虽薪资等级本身应为唯一值,但结合SUM会放大重复计算的问题)
解决方案
1. 基础工时占比计算(仅占比)
创建计算字段活动-薪资等级工时占比:
ZN( { FIXED [MinecraftDienst], [Salaris_uniek] : SUM([Gewerkte uren]) } / { FIXED [MinecraftDienst] : SUM([Gewerkte uren]) } )
ZN()函数自动将NULL值转为0,替代原公式的IIF判断,更简洁- FIXED LOD直接计算每个活动+薪资等级组合的工时占比,结果是该组合的唯一值,不会随视图中的日期等细分维度变化
2. 带薪资等级加权的计算(对应原公式中的*[Salaris_uniek])
如果需要计算占比乘以薪资等级的加权值,创建计算字段薪资等级加权占比:
{ FIXED [MinecraftDienst], [Salaris_uniek] : ZN( SUM([Gewerkte uren]) / { FIXED [MinecraftDienst] : SUM([Gewerkte uren]) } ) * MAX([Salaris_uniek]) }
- 用
MAX([Salaris_uniek])确保在活动+薪资等级维度下,薪资等级取唯一值(同一薪资等级的[Salaris_uniek]值一致,用MIN/AVG也可) - 外层FIXED LOD锁定维度,确保无论视图中是否有日期等其他维度,该值始终是活动+薪资等级组合的唯一结果
3. 视图调整
- 将
[MinecraftDienst](活动)和[Salaris_uniek](薪资等级)拖到行/列作为维度 - 将上述计算字段拖到标记卡的「文本」或「度量」区域
- 如果视图中存在日期等细分维度,将其移到「详细信息」,或直接从视图中移除,避免拆分数据导致重复求和
内容的提问来源于stack exchange,提问作者user25595009
相关产品推荐
相关产品推荐

