请求将Tableau公式sum(varA*varB)/total(sum(varB))转换为行级平均计算
解决方案
要实现与SUM(varA*varB)/TOTAL(SUM(varB))等价的行级计算,你可以按以下步骤操作:
第一步:创建行级加权字段
先编写一个行级计算,计算每行对全局加权平均的贡献值:(varA * varB) / {FIXED : SUM(varB)}{FIXED : SUM(varB)}是Tableau的LOD表达式,用于获取整个数据集的varB总和;如果需要按特定维度(如类别、区域)限定全局范围,可修改LOD的维度部分,比如{FIXED [Product Category]: SUM(varB)}。- 注意处理varB为0的情况,避免出现除零错误。
第二步:聚合得到最终结果
对上述行级字段使用SUM()聚合即可,因为SUM(varA*varB)/TOTAL(SUM(varB))本质上等于所有行的(varA*varB)/全局varB总和的累加值。如果你坚持要使用
AVG()函数(匹配你之前的转换逻辑),可以基于总行数推导:AVG( (varA*varB)/{FIXED : SUM(varB)} ) * {FIXED : COUNTD(行唯一标识)}但这种方式需要额外的行唯一标识字段,不如直接用
SUM()聚合来得简洁高效。
验证
在视图中同时添加原公式和新计算字段,两者的结果完全一致,可确认等价性。
内容的提问来源于stack exchange,提问作者Anna
相关产品推荐
相关产品推荐

