使用 MDX 查询的具有单选和多选参数的 SSRS 报表





4.00/5 (1投票)
本文基于使用 MDX 查询控制的具有单选和多选参数的 SSRS 报表。SSRS 报表传递参数。MDX 查询根据给定参数从多维数据集中读取记录。
引言
本文基于接受参数的 SSRS 报表。报表参数通过 MDX 查询从数据集获取值。参数被传递到主报表数据集。MDX 查询根据参数值获取报表。业务需要动态报表来做出决策。当报表是动态的时,不同的度量值流使报表更加重要。我假设用户已经了解了使用 MDX 的基本 SSRS 报表开发。请参考我的文章 使用 MDX 查询的简单 SSRS 报表,以了解使用 MDX 查询的基本 SSRS 报表开发。
背景
在 T-SQL 代码中,带有参数的 SSRS 报表很简单,但在 MDX 查询中,它需要额外的努力将参数转换为 MDX 字段。MDX 查询通过“查询参数”窗口接受查询参数设计。MDX 使用 strtomember
函数将单个 SSRS 参数转换为 MDX 参数。MDX 使用 strtoset
函数将多个 SSRS 参数转换为 MDX 参数。
Using the Code
本文假设 Cube 已经在 SQL Server Analysis 服务引擎中配置。示例报表基于 AdventureWorksDW2008R2
SSAS 数据库下的 Adventure Works Cube。
我已描述了分步过程,以在 MDX 查询中显示带有参数的 SSRS 报表。
- 为示例报表创建新的报表服务器项目。
- 创建新的报表文件以显示 SSRS 报表。
- 为 SSAS Cube 定义
数据源
。 - 为下拉列表中的销售年份值创建新的
数据集 GetYear
。MDX 代码如下所示。WITH MEMBER [MEASURES].[SALESYEAR] AS MEMBERTOSTR([DATE].[CALENDAR YEAR].CURRENTMEMBER) SELECT {[MEASURES].[SALESYEAR]} ON COLUMNS, [DATE].[CALENDAR].[CALENDAR YEAR] ON ROWS FROM [ADVENTURE WORKS]
- 使用简单字段名称重命名
GetYear 数据集
MDX 列。 - 为下拉列表中的
产品类别
值创建新的数据集 GetProduct
。MDX 代码如下所示。WITH MEMBER [MEASURES].[PRODUCTCATEGORY] AS MEMBERTOSTR([PRODUCT].[PRODUCT CATEGORIES].CURRENTMEMBER) SELECT [MEASURES].[PRODUCTCATEGORY] ON COLUMNS, [PRODUCT].[PRODUCT CATEGORIES].[CATEGORY] ON ROWS FROM [ADVENTURE WORKS]
- 使用简单名称重命名
GetProduct 数据集
MDX 列。 - 创建 SSRS 报表参数
SalesYear
。 - 创建 SSRS 报表参数
ProductValue
。 - 为报表创建新的
数据集
,该数据集将接受报表参数并将其转换为 MDX 列。WITH MEMBER [MEASURES].[PRDSUB] AS MEMBERTOSTR([Product].[Category].CURRENTMEMBER), FORMAT_STRING = 'String' MEMBER [MEASURES].[SALESYEAR] AS MEMBERTOSTR([DATE].[CALENDAR YEAR].CURRENTMEMBER), FORMAT_STRING = 'String' SELECT { [MEASURES].[SALESYEAR], [MEASURES].[PRDSUB] , [MEASURES].[ORDER COUNT], [MEASURES].[SALES AMOUNT], [MEASURES].[INTERNET ORDER COUNT], [MEASURES].[INTERNET SALES AMOUNT] } ON COLUMNS, {[Date].[Calendar Year].&[2005],[Date].[Calendar Year].&[2006]} * { [Product].[Category].&[4], [Product].[Category].&[1] } ON ROWS FROM [ADVENTURE WORKS]
- 使用简单列名重命名
GetReport 数据集
MDX 列。 - 为 MDX 查询定义查询参数,并将参数名称分配为与 SSRS 报表参数相同。
- 在报表 RDL 文件中设计报表布局,并将其分配给
GetReport 数据集
的列。
上面带有参数的 SSRS 报表一次只允许选择一个值。我们也可以在多选模式下定义报表参数。MDX 查询使用 strtoset
函数将多个选定的参数值转换为 MDX 所需的输入。下面的图像描述了带有允许 多选 值的参数的 SSRS 报表。
- 在现有项目中添加新的报表文件,以执行基于多参数值选择的报表。
- 添加新的
数据集 GetYear
以在下拉列表
中进行SalesYear
的多选。WITH MEMBER [MEASURES].[SALESYEAR] AS MEMBERTOSTR([DATE].[CALENDAR YEAR].CURRENTMEMBER) SELECT {[MEASURES].[SALESYEAR]} ON COLUMNS, [DATE].[CALENDAR].[CALENDAR YEAR] ON ROWS FROM [ADVENTURE WORKS]
- 修改 SSRS 报表参数属性,以允许在
SalesYear
参数中进行多选。 - 添加新的
数据集 GetProduct
以在下拉列表
中进行ProductCategory
的多选。WITH MEMBER [MEASURES].[PRODUCTCATEGORY] AS MEMBERTOSTR([PRODUCT].[PRODUCT CATEGORIES].CURRENTMEMBER) SELECT [MEASURES].[PRODUCTCATEGORY] ON COLUMNS, [PRODUCT].[PRODUCT CATEGORIES].[CATEGORY] ON ROWS FROM [ADVENTURE WORKS]
- 修改 SSRS 报表参数属性,以允许在
ProductCategory
参数中进行多选。 - 为将接受报表多参数值并将其转换为 MDX 列的主报表创建新的
GetReport 数据集
。--MDX TO GET SSRS REPORT ON YEAR AND PRODUCT WISE PARAMETER VALUE WITH MULTIPLE SELECTION SELECT { [MEASURES].[ORDER COUNT], [MEASURES].[SALES AMOUNT], [MEASURES].[INTERNET ORDER COUNT], [MEASURES].[INTERNET SALES AMOUNT] } ON COLUMNS, { strtoset(@SalesYear) } * { strtoset(@ProductCategory) } ON ROWS FROM [ADVENTURE WORKS]
- 使用简单列名重命名
GetReport 数据集
MDX 列。 - 为 MDX 查询定义具有多个值的查询参数,并将参数名称分配为与 SSRS 报表参数相同。
- 在报表 RDL 文件中设计报表布局,并将其分配给
GetReport 数据集
的列。
关注点
此项目将增强通过 MDX 读取 Cube 数据并在 SSRS 报表中显示。此项目还使用具有单选和多选的 SSRS 参数。参数将传递给 MDX 查询,以根据给定的参数值显示报表。
历史
- 2014 年 7 月 20 日:初始版本