Cognos 11.2.4报表开发:上月期末余额作为下月期初余额
Cognos 11.2.4 关系模型下月度期初/期末余额实现方案
核心逻辑梳理
1月期初余额固定为0,后续月份期初余额等于上月所有类别(A/B/C)的发生额总和(即上月期末余额),当月期末余额为当月A/B/C类发生额之和。以下是具体实现步骤:
步骤1:构建基础数据集
从关系数据源中提取包含以下字段的查询:
- 月份:建议转换为可排序格式(如
YYYY-MM字符串或1-12的月份序号,方便后续排序和计算) - 类别:对应A/B/C三类
- 当月发生额:各类别当月的数值数据
步骤2:计算当月期末余额
在查询中添加计算列,命名为当月期末余额,根据需求选择方式:
- 若需按类别展示明细:直接引用
[当月发生额],后续交叉表会自动按月份汇总所有类别得到月度期末余额 - 若需在查询层面直接汇总月度期末:使用聚合表达式
total([当月发生额] for [月份])
步骤3:计算期初余额(关键)
添加计算列期初余额,利用Cognos的LAG滞后函数实现上月数据引用:
场景1:月度整体期初(所有类别合计的期初)
if ([月份序号] = 1) then (0) else (lag(total([当月发生额] for [月份]), 1) over (order by [月份序号]))
- 说明:
[月份序号]是将月份转换为1-12的数字,lag(...,1)取上一行(上月)的月度发生额总和,1月强制返回0
场景2:按类别单独计算期初(每个类别自己的期初=上月该类别期末)
if ([月份序号] = 1) then (0) else (lag([当月发生额], 1) over (partition by [类别] order by [月份序号]))
- 说明:
partition by [类别]确保仅在同一类别内取上月数据
步骤4:搭建交叉表
- 拖入交叉表组件,将月份放置在列区域,类别放置在行区域(无需按类别展示可省略)
- 将
期初余额、当月发生额、当月期末余额拖入交叉表的度量区域 - 调整交叉表汇总设置:右键度量列选择「汇总」,确保按月份正确计算总和
步骤5:验证逻辑
运行报表后检查以下关键点:
- 1月期初余额必须为0
- 任意月份的期初余额与上月期末余额完全一致
- 当月期末余额等于当月所有类别发生额的总和
内容的提问来源于stack exchange,提问作者sachinak
相关产品推荐
相关产品推荐

