如何在SAP BO Web Intelligence中获取输入控件筛选后的报表行数
SAP BO WebI 统计输入控件筛选后报表行数的实现方案
你之前用Count()、RowNumber()返回全量行数,本质是公式没有正确继承输入控件的筛选上下文,或是函数参数用错,以下是实测可用的方案:
- 常规场景(统计单元格放在结果报表块内)
不要给Count函数加All参数,选报表里能唯一标识单行的非空维度(比如行项目ID、单据号+行号这类主键字段)写公式即可:
常见踩坑点:不要写=Count([行唯一标识维度])=Count([维度];All),All参数会强制忽略所有报表层筛选(包括输入控件、报表筛选条的过滤规则),直接返回查询拉取的全量行数;也不要用度量字段做计数对象,度量自带聚合逻辑很容易计数不准。 - 跨区域统计(页眉/页脚/独立统计卡片展示筛选后行数)
如果统计单元格不在结果报表块内部,默认不会继承报表块的筛选上下文,需要主动关联输入控件的筛选规则,写法如下:
这个写法会直接读取当前用户在输入控件里选中的筛选值,匹配后再计数,不会出现返回全量的问题。=Count([行唯一标识维度]) Where (ReportFilter([绑定输入控件的维度]) = ReportFilterSummary([绑定输入控件的维度])) - 无可靠主键维度的简便写法
如果报表里找不到能唯一标识行的维度,别用RowNumber()——这个函数是在查询返回全量结果时就生成行号,完全不认报表端的输入控件筛选,永远返回全量行号。可以直接用NumberOfRows()读取目标报表块实际渲染的行数:
注意:报表块名称可以在选中报表块后,从左侧属性面板里查到,支持自定义修改。这个方法会自动把输入控件、块级筛选、报表筛选的所有过滤效果都算进去,不需要绑定任何维度,是容错率最高的写法。=NumberOfRows([结果报表块的名称])
避坑:计数公式里不要嵌套
NoFilter()函数,这个函数的作用就是强制跳过所有报表层筛选,加了之后一定会返回全量行数。
内容的提问来源于stack exchange,提问作者coool_sweet
相关产品推荐
相关产品推荐

