Oracle BI Publisher RTF模板中行列总计计算问题求助
解决现金流报表行列总计(非空值汇总)问题
问题概述
- 制作现金流报表时,行列总计计算出现异常
- 尝试使用数据透视表,但工具会自动将空数值转换为0,不符合客户需求
- 当前使用的公式
<?if:ACCOUNTED_NET_CHAR!=' '?><?sum(current-group()/ACCOUNTED_NET)?><?end if?>无法得到正确结果 - 核心需求:
- 报表最后一行的总计需汇总分组内所有非空值,计算各月份列及总计列的数值
- 总计列需汇总每个账户下的所有非空值
解决方案
针对RTF模板+XML数据源的报表场景,需要通过过滤空值后求和的方式实现需求,替代原有公式:
1. 分组内非空值求和(月份列总计)
在总计行的月份列单元格中,使用以下公式:
<?sum(current-group()/ACCOUNTED_NET[normalize-space(.) != '']) ?>
normalize-space(.) != '':过滤掉空字符串或仅含空格的数值,确保只汇总有效非空值current-group():定位到当前分组(如按账户/月份的分组),对组内符合条件的ACCOUNTED_NET节点求和
2. 账户维度非空值汇总(总计列)
在总计列的单元格中,使用以下公式(假设账户分组节点为ACCOUNT,唯一标识为ACCOUNT_ID):
<?sum(//ACCOUNT[ACCOUNT_ID = current()/ACCOUNT_ID]/ACCOUNTED_NET[normalize-space(.) != '']) ?>
//ACCOUNT[ACCOUNT_ID = current()/ACCOUNT_ID]:定位到当前行对应的整个账户节点集合- 同样通过
normalize-space(.) != ''过滤空值,再对该账户下所有有效ACCOUNTED_NET值求和
原有公式无效原因
原有公式逻辑错误:它仅判断当前行的ACCOUNTED_NET_CHAR是否非空,再决定是否显示求和结果,而非过滤分组内的空值。即使分组内存在空值,sum()仍会将空字符串/空节点视为0计算,导致结果不符合预期。
内容的提问来源于stack exchange,提问作者Burhan Khalid Butt
相关产品推荐
相关产品推荐

