SSRS参数设置:将日期选择改为月份名称+年份下拉列表的实现方法
该需求完全可以实现,无需自定义控件开发,仅通过SSRS内置的参数绑定和数据集功能即可完成,具体操作步骤如下:
步骤1:创建年月候选值数据集
新建一个数据集用于生成2000-2050年所有符合要求的年月选项,SQL Server环境下可直接使用以下查询语句,其他数据库只需修改对应日期函数即可:
WITH YearList AS ( SELECT 2000 + number AS [YearVal] FROM master..spt_values WHERE type = 'P' AND number <= 50 ), MonthList AS ( SELECT 1 + number AS [MonthVal], LEFT(DATENAME(MONTH, DATEFROMPARTS(2023, 1 + number, 1)), 3) AS [MonthShortName] FROM master..spt_values WHERE type = 'P' AND number < 12 ) SELECT CAST(YearVal AS VARCHAR) + '|' + CAST(MonthVal AS VARCHAR) AS [ParamValue], MonthShortName + ' | ' + CAST(YearVal AS VARCHAR) AS [DisplayText], DATEFROMPARTS(YearVal, MonthVal, 1) AS [FirstDayOfMonth], EOMONTH(DATEFROMPARTS(YearVal, MonthVal, 1)) AS [LastDayOfMonth] FROM YearList CROSS JOIN MonthList ORDER BY YearVal DESC, MonthVal DESC
生成的DisplayText字段就是你要求的月份短名 | 年份展示格式,同时内置了对应月份的月初、月末日期用于后续参数赋值。
步骤2:调整原有日期参数为隐藏参数
原有的@FirstDate、@LastDate两个参数无需删除,调整为内部隐藏参数即可,原有报表查询逻辑完全不需要修改:
- 进入参数属性页面,勾选「隐藏」选项
- 这两个参数后续会通过用户选择的年月自动赋值,无需用户手动操作
步骤3:新增用户可见的年月选择参数
新建两个可见参数,分别命名为@StartMonth和@EndMonth,对应起始年月和结束年月的选择项,每个参数的配置规则一致:
- 数据类型选择「文本」
- 提示文本分别设置为「起始年月」、「结束年月」
- 切换到「可用值」标签:选择「从查询中获取值」,数据集选第一步新建的年月数据集,值字段选
ParamValue,标签字段选DisplayText - 切换到「默认值」标签:选择「指定值」,输入以下表达式即可默认选中当前年月:
=CStr(Year(Today())) + "|" + CStr(Month(Today()))
步骤4:绑定隐藏日期参数的自动赋值规则
回到@FirstDate的参数属性,切换到「默认值」标签,选择「指定值」,输入以下表达式:
=DATEFROMPARTS(CInt(Split(Parameters!StartMonth.Value, "|")(0)), CInt(Split(Parameters!StartMonth.Value, "|")(1)), 1)
同理设置@LastDate的默认值表达式:
=EOMONTH(DATEFROMPARTS(CInt(Split(Parameters!EndMonth.Value, "|")(0)), CInt(Split(Parameters!EndMonth.Value, "|")(1)), 1))
效果验证
预览报表后,两个可见的年月参数会以下拉列表形式展示所有2000-2050年的候选值,不会弹出日历选择面板,默认自动高亮选中当前年月,用户选择后会自动把对应区间的月初、月末日期赋值给原有的@FirstDate和@LastDate参数,正常触发报表查询。
内容的提问来源于stack exchange,提问作者datanewbie
相关产品推荐
相关产品推荐

