如何配置MonthName-Year为SSRS参数并实现财年筛选
SSRS 参数配置与数据集关联解决方案
一、创建参数数据源
首先为两个筛选参数准备对应的数据源:
1. 月份-年份参数数据源(dsMonthYear)
该查询生成用户可见的月份-年份标签,并映射为当月第一天的日期值(用于后续筛选):
SELECT CONCAT(TheMonthName, '-', TheYear) AS MonthYearLabel, DATEFROMPARTS(TheYear, TheMonth, 1) AS MonthYearValue FROM dimTime ORDER BY MonthYearValue DESC
返回示例:
| MonthYearLabel | MonthYearValue |
|---|---|
| January-2023 | 2023-01-01 |
| February-2023 | 2023-02-01 |
2. 财年参数数据源(dsFiscalYear)
生成去重的财年选项:
SELECT DISTINCT Fiscalyear AS FiscalYearLabel, Fiscalyear AS FiscalYearValue FROM dimTime ORDER BY Fiscalyear
返回示例:
| FiscalYearLabel | FiscalYearValue |
|---|---|
| 2022-2023 | 2022-2023 |
3. 筛选类型数据源(可选,优化用户体验)
若希望用户二选一筛选(避免同时选两个参数),创建dsFilterType:
SELECT '月份-年份' AS FilterTypeLabel, 'Month' AS FilterTypeValue UNION ALL SELECT '财年' AS FilterTypeLabel, 'Fiscal' AS FilterTypeValue
二、配置SSRS参数
1. 筛选类型参数(@FilterType,可选)
- 数据类型:文本
- 可用值:从
dsFilterType获取,值字段选FilterTypeValue,标签字段选FilterTypeLabel - 默认值:可设为
Month或Fiscal
2. 月份-年份参数(@MonthYear)
- 数据类型:日期/时间
- 可用值:从
dsMonthYear获取,值字段选MonthYearValue,标签字段选MonthYearLabel - 可见性:若使用
@FilterType,设置为仅当@FilterType = 'Month'时显示 - 默认值:可选,设为最新月份:
SELECT MAX(MonthYearValue) FROM dsMonthYear
3. 财年参数(@FiscalYear)
- 数据类型:文本
- 可用值:从
dsFiscalYear获取,值和标签字段均选Fiscalyear - 可见性:若使用
@FilterType,设置为仅当@FilterType = 'Fiscal'时显示 - 默认值:可选,设为最新财年
三、主数据集查询配置
根据参数筛选主表数据,以下两种方案可选:
方案1:使用筛选类型参数(二选一)
SELECT * FROM YourMainTable WHERE CASE @FilterType WHEN 'Month' THEN DATEFROMPARTS(YEAR(date), MONTH(date), 1) = @MonthYear WHEN 'Fiscal' THEN date BETWEEN (SELECT MIN(DATEFROMPARTS(TheYear, TheMonth, 1)) FROM dimTime WHERE Fiscalyear = @FiscalYear) AND (SELECT MAX(EOMONTH(DATEFROMPARTS(TheYear, TheMonth, 1))) FROM dimTime WHERE Fiscalyear = @FiscalYear) END = 1
方案2:允许单个参数生效(需加校验)
若不使用筛选类型参数,需确保仅一个参数被选择:
SELECT * FROM YourMainTable WHERE (@MonthYear IS NOT NULL AND DATEFROMPARTS(YEAR(date), MONTH(date), 1) = @MonthYear) OR (@FiscalYear IS NOT NULL AND date BETWEEN (SELECT MIN(DATEFROMPARTS(TheYear, TheMonth, 1)) FROM dimTime WHERE Fiscalyear = @FiscalYear) AND (SELECT MAX(EOMONTH(DATEFROMPARTS(TheYear, TheMonth, 1))) FROM dimTime WHERE Fiscalyear = @FiscalYear) )
参数校验:在参数属性的「验证」中添加表达式,防止同时选择两个参数:
=IIF(Parameters!MonthYear.Value IS NOT NULL AND Parameters!FiscalYear.Value IS NOT NULL, False, True)
错误提示:请选择月份-年份或财年其中一项,不可同时选择
关键说明
- 若使用SQL Server 2012之前版本,替换
DATEFROMPARTS为CAST(TheYear AS VARCHAR) + '-' + CAST(TheMonth AS VARCHAR) + '-01'并转换为日期类型 EOMONTH函数用于获取当月最后一天,确保财年筛选包含所有日期- 主表的
date字段需为日期/日期时间类型,否则需先转换格式
内容的提问来源于stack exchange,提问作者Dion
相关产品推荐
相关产品推荐

