在Cognos环境的Bullhorn Canvas中,如何实现多查询通用日期变量?
在Cognos中实现复用日期范围过滤的方案
完全可以实现你想要的复用逻辑,不用在每个查询里重复编写冗长的case过滤器。核心思路是创建报表级计算变量一次性计算日期范围的起止值,之后所有查询直接引用这两个变量即可。具体步骤如下:
1. 确认日期下拉参数配置
确保你已经创建了名为?Dates Dropdown?的提示参数,选项与对应值需统一(值要和后续case语句匹配):
- 显示文本:THIS WEEK → 参数值:
THISWEEK - 显示文本:LAST WEEK → 参数值:
LASTWEEK - 显示文本:THIS MONTH → 参数值:
THISMONTH - 显示文本:LAST MONTH → 参数值:
LASTMONTH - 显示文本:THIS QUARTER → 参数值:
THISQUARTER - 显示文本:LAST QUARTER → 参数值:
LASTQUARTER - 显示文本:YEAR TO DATE → 参数值:
YTD
2. 创建报表级计算变量
打开报表的「变量」面板,依次创建两个日期类型的计算变量:
变量1:v_DateStart(起始日期)
表达式如下:
case ?Dates Dropdown? when 'THISWEEK' then _add_days(current_date, -_day_of_week(current_date, 1) + 1) when 'LASTWEEK' then _add_days(current_date, -_day_of_week(current_date, 1) - 6) when 'THISMONTH' then _first_of_month(current_date) when 'LASTMONTH' then _first_of_month(_add_months(current_date, -1)) when 'THISQUARTER' then _first_of_quarter(current_date) when 'LASTQUARTER' then _first_of_quarter(_add_months(current_date, -3)) when 'YTD' then _first_of_year(current_date) end
变量2:v_DateEnd(结束日期)
表达式如下:
case ?Dates Dropdown? when 'THISWEEK' then _add_days(current_date, -_day_of_week(current_date,1) + 7) when 'LASTWEEK' then _add_days(current_date, -_day_of_week(current_date,1)) when 'THISMONTH' then _last_of_month(current_date) when 'LASTMONTH' then _last_of_month(_add_months(current_date, -1)) when 'THISQUARTER' then _last_of_quarter(current_date) when 'LASTQUARTER' then _last_of_quarter(_add_months(current_date, -3)) when 'YTD' then current_date end
注意:将变量的数据类型设置为「日期/时间」,确保与
[StartDate]的类型匹配。
3. 在查询中复用变量过滤
在每个需要日期过滤的查询里,添加如下简洁的过滤器即可:
[StartDate] between #v_DateStart# and #v_DateEnd#
这里用#包裹报表变量,Cognos会自动解析为对应计算后的日期值。
备选方案:查询主题级计算项
如果所有查询共享同一个数据源,也可以在查询主题中创建两个计算项(DateStart和DateEnd),使用相同的case表达式关联参数,之后每个查询直接引用这两个计算项做过滤,效果与报表变量一致。
内容的提问来源于stack exchange,提问作者Mike Rain
相关产品推荐
相关产品推荐

