如何在Report Builder中获取去年同期聚合值?是否支持CTE?
分页报表(.rdl)问题解答
一、计算去年同期聚合值的实现方式
要在当前周期行内展示去年同期的聚合结果,常用两种方案:
- 带条件的聚合函数+分组作用域:如果数据集包含当期和去年同期的明细数据,直接在聚合函数中添加过滤条件,并指定行组的作用域。比如行组按
Period字段分组,计算去年同期销售额总和的写法:
其中SUM(IIF(Fields!Period.Value = Fields!CurrentPeriod.Value - 12, Fields!SalesAmount.Value, 0), "PeriodRowGroup")"PeriodRowGroup"是你的行组名称,用来限定聚合范围在当前行组内;IIF负责筛选出属于去年同期的记录后再执行聚合。 - LOOKUP函数:如果数据集已经按周期完成了当期和去年同期的汇总(比如每条记录对应一个周期的当期值与去年同期值,或是分开的汇总行),可以用
LOOKUP匹配周期键,直接获取对应的去年同期聚合值。示例:
第一个参数是待匹配的去年周期值,第二个是数据集里的周期字段,第三个是要返回的去年聚合值,最后一项是数据集名称。LOOKUP(Fields!CurrentPeriod.Value - 12, Fields!Period.Value, Fields!LastYearSalesSum.Value, "DataSetName")
二、Report Builder对CTE的支持情况
Report Builder支持在数据集查询中使用CTE(公共表表达式),前提是你的数据源(如SQL Server、PostgreSQL等)本身支持CTE语法。因为Report Builder仅负责将编写的查询语句发送给数据源执行,只要数据源能识别CTE语法,就能正常运行。你可以直接在数据集的查询编辑器中编写带WITH关键字的CTE语句,格式和在数据库客户端中完全一致。
内容的提问来源于stack exchange,提问作者Boris Garkoun
相关产品推荐
相关产品推荐

