【问题标题】:Getting multiple integer values in an SSRS parameter在 SSRS 参数中获取多个整数值
【发布时间】:2016-09-22 11:41:53
【问题描述】:

如何将多个整数放入 SSRS 参数的值字段中,以便可以在 WHERE 子句中使用 IN 语句?

忍受我。我认为这最终会成为一个简单的语法问题,但解释过长。

我有一份报告,我想将其分成两种类型的员工:Dedicated 和 Bureau。确定激活发生时间的唯一方法是,除 12 点和 13 点(中午至下午 2 点)外,专职工作人员所有时间都在工作。

我创建了一个名为 @AgentType 的参数,并在我的 SQL 查询中添加了一个 where 子句

Where

[Hour] in (@AgentType)

然后我将参数的数据类型设置为整数并设置可用值,如图所示。

这非常适合作为测试,但是如果我尝试准确地模拟工作时间

SSRS 删除了我的逗号并将整数转换为 1234567... 我也尝试使用表达式 =1,2,3... 但是在报告运行时会导致错误。

所以我的问题基本上是如何将多个整数放入 SSRS 参数的值字段中,以便我可以在 WHERE 子句中使用 IN 语句?

【问题讨论】:

  • 如果你想使用这个方法,参数应该是一个字符串,你还需要将[HOUR]字段更改为一个字符串,以使其具有可比性。我确定需要对参数字段进行一些处理才能使其识别出它也是一个数组的事实......
  • 它必须是一个字符串。
  • @Gallus 如果我使用“文本”选项运行报表时出现此错误无法读取数据集 DataSet1 的下一个数据行。 (rsErrorReadingNextDataRow) ---------------------------- 报表处理过程中发生错误。 (rsProcessingAborted)

标签: reporting-services ssrs-2008


【解决方案1】:

此解决方案可能适合您。您可以创建两个参数,AgentTypeAgentTypeHidden

对于AgentType,设置两个可用值如下:

AgentTypeHidden 必须隐藏并设置为允许多个值:

不要使用此表达式设置任何可用值,而是设置默认值:

=IIF(
   Parameters!AgentType.Value=1,
   SPLIT("1,2,3,4,5,6,7,8,9,10,11,14",","),
   SPLIT("12,13",",")
)

还为AgentTypeHidden 参数设置Always Refresh

最后在您的查询中使用AgenTypeHidden 参数。

Where [Hour] in (@AgentTypeHidden)

如果这有帮助,请告诉我。

【讨论】:

  • 这看起来很不错。会对报表的运行时间产生很大影响吗?
  • @tomdemaine,我不这么认为,因为填充隐藏参数的表达式是基本的。您应该小心数据检索,可能 Dedicated 选项会返回大量可能影响性能的行。
  • 奇怪的是,专用选项运行得非常快,但局只显示加载微调器,直到超时。编辑:它刚刚完成运行,但局比专用慢 1-2 分钟。
  • @tomdemaine,尝试在 SSMS 中使用 WHERE 子句中的 Dedicated 和 Bureau 值运行您的查询,以查看执行时间。此外,如果您同时查询具有多个连接的事务性数据库,则性能可能会很差,具体取决于硬件、服务器设置、网络,甚至是您的查询等等。
【解决方案2】:

我使用了一个更简单的解决方案, 将参数保留为文本,将其传递给它,例如:1,2,3,4,5,6 然后在查询中执行以下操作:

PT-BR

usei uma solução mais simples, deixe o parâmetro como texto, passe para ele ex: 1,2,3,4,5,6 depois na query faça o seguinte:

Where [Hour] in (SELECT value FROM STRING_SPLIT(@AgentType, ','))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-08-12
    • 2012-02-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多