ssrs 动态 table 创建
ssrs dynamic table creation
我正在将 table名称从一个报表传递到 SSRS 中的另一个钻取报表。我的钻取报告应该基于动态数据集动态创建 table。
这是可能的还是我正在努力实现不可能的目标?
Reporting Services 中的几乎所有内容都是表达式,包括 Sql 查询语句。您可以将 table 名称作为参数传递,然后使用它来动态构建查询。
右击数据集,点击Dataset Properties
,点击查询框旁边的表达式编辑器,即fx
按钮。现在我们可以将查询编辑为字符串表达式。
假设您希望您的报告打印来自各种查找 table 的代码和说明,并在您向下钻取时将特定的 table 名称作为参数传递。编辑数据集的 Sql 表达式,如下所示:
="SELECT Code, Description "
&" FROM " & Parameters!TableName.Value
&" ORDER BY Code "
当Sql 语句基于表达式时,Fields
集合不会自动更新,因此您必须手动添加字段。在 Dataset Properties
中编辑 Fields
集合并添加数据集中的字段。请注意,即使您使用不同的 table,数据集中的字段也需要保持一致,以便您可以将它们 link 到 table 单元格。
如果您的 table 中的字段有不同的名称,那么您需要将它们别名化为您添加到 Sql 中的 Fields
集合中的名称。假设 ThisTable
有字段 Id
和 Name
,ThatTable
有 Code
和 Description
。
="SELECT " & IIF(Parameters!TableName.Value = "ThisTable", "Id", "Code") & " AS Code, "
& IIF(Parameters!TableName.Value = "ThisTable", "Name", "Description") & " AS Description "
&" FROM " & Parameters!TableName.Value
&" ORDER BY Code "
因此我们将所有要返回的字段别名化为 Code
和 Description
。
当然,如果您有很多不同的字段名称和很多不同的 table,这会变得很混乱。在这种情况下,您最好创建视图来为您创建别名并使用数据集中的视图或使用存储过程。
我正在将 table名称从一个报表传递到 SSRS 中的另一个钻取报表。我的钻取报告应该基于动态数据集动态创建 table。
这是可能的还是我正在努力实现不可能的目标?
Reporting Services 中的几乎所有内容都是表达式,包括 Sql 查询语句。您可以将 table 名称作为参数传递,然后使用它来动态构建查询。
右击数据集,点击Dataset Properties
,点击查询框旁边的表达式编辑器,即fx
按钮。现在我们可以将查询编辑为字符串表达式。
假设您希望您的报告打印来自各种查找 table 的代码和说明,并在您向下钻取时将特定的 table 名称作为参数传递。编辑数据集的 Sql 表达式,如下所示:
="SELECT Code, Description "
&" FROM " & Parameters!TableName.Value
&" ORDER BY Code "
当Sql 语句基于表达式时,Fields
集合不会自动更新,因此您必须手动添加字段。在 Dataset Properties
中编辑 Fields
集合并添加数据集中的字段。请注意,即使您使用不同的 table,数据集中的字段也需要保持一致,以便您可以将它们 link 到 table 单元格。
如果您的 table 中的字段有不同的名称,那么您需要将它们别名化为您添加到 Sql 中的 Fields
集合中的名称。假设 ThisTable
有字段 Id
和 Name
,ThatTable
有 Code
和 Description
。
="SELECT " & IIF(Parameters!TableName.Value = "ThisTable", "Id", "Code") & " AS Code, "
& IIF(Parameters!TableName.Value = "ThisTable", "Name", "Description") & " AS Description "
&" FROM " & Parameters!TableName.Value
&" ORDER BY Code "
因此我们将所有要返回的字段别名化为 Code
和 Description
。
当然,如果您有很多不同的字段名称和很多不同的 table,这会变得很混乱。在这种情况下,您最好创建视图来为您创建别名并使用数据集中的视图或使用存储过程。