【问题标题】:Use a parameter in SSRS for table_name在 SSRS 中为 table_name 使用参数
【发布时间】:2019-12-05 17:18:40
【问题描述】:

我已经在互联网上搜索了选项,我发现唯一可以做到这一点的是使用 $Proc,但我试图避免这种情况。

我认为根据用户从下拉列表中选择的内容,使用参数选择不同的表会非常简单。

这里是: - 报告需要使用两个表格, * some_table_CY(当年表) * some_table_STLY(去年同一时间的表)

所以我创建了一个参数,让用户可以选择“Current_Year”或“Last_Year”,具体取决于用户选择的参数,然后将在 select 语句中使用该参数,如下所示:"SELECT * FROM :pReportVersion"

但是,它不起作用。我需要它来执行此操作,而不是使用联合,因为联合这两个表会导致巨大的性能问题,并且查询需要超过 4 小时才能运行,这对于用户根据请求需要的报告是不可接受的。

(这是查询oracle)

【问题讨论】:

  • 听起来可能需要动态 SQL,但我不是这方面的专家。您可能必须将 some_table_CYsome_table_STLY 之类的内容传递给查询并构建您的选择比如DECLARE @sql VARCHAR(MAX) = 'SELECT * FROM ' + @TableChoiceParameter,然后是EXEC @sqlDocumentation

标签: sql oracle reporting-services


【解决方案1】:

使用数据集表达式并将其设置为:

="SELECT * FROM " & 参数!ReportVersion.Value

对于较长的查询,您可能需要用引号将每一行括起来,附加一个&符号并添加一个换行符:

="SELECT * " & VBCLRLF & 
 "FROM " & Parameters!ReportVersion.Value & VBCRLF &
 "WHERE FIELD1 > 10 " & VBCRLF & 
 "AND FIELD2 = 'YES' "

【讨论】:

  • 我在这样使用它时遇到的问题,使用 IF 语句,查询本身比单行(大约 2000 行)大得多,并且将其用作函数时它会出错不在一行上。
  • 我添加了一些代码,展示了我如何在数据集表达式中添加多行。我想我使用 Notepad++ 将换行符(/n)替换为" & VBCLRLF & /n "
【解决方案2】:

你仍然可以使用联合..

假设你有一个名为@year的参数

将可用值设置为以下(指定值)

标签的当前年份和值的 1

标签为去年,价值为 2

那么你的数据集可以是这样的:

select * from some_table_CY 
where @year = 1

union all

select * from some_table_LY 
where @year = 2

【讨论】:

  • 我的意思是工会,即使我做这样的事情也需要一个多小时。我试过这个,但它在合理的时间内不起作用: SELECT 1 FROM ( SELECT * FROM [schema_name].[table_name_CY] WHERE :pReportVersion = 'CY' UNION ALL SELECT * FROM [schema].[table_name_STLY] WHERE :pReportVersion = 'STLY')
  • 视图很大而且不是最快的,单独执行每个视图只需要一分钟,但是任何类型的联合或连接都会导致它永远持续下去,好像有什么东西坏了,这就是我为什么想要一个可以选择表本身的参数。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多