sql - 使用复杂查询在 SSRS 中构建动态查询(动态运算符)

标签 sql reporting-services parameters aggregate-functions

我想使用一些参数(动态运算符)为特定报告构建动态查询。

如何在不编写/编辑表达式的情况下添加动态参数?

因为我的查询很复杂,包括三连接表和聚合我认为这可能是导致错误的原因。

我可以在数据集属性的表达式中连接表吗?

SELECT  a.CaseNo, a.PatientName, a.PolicyNumber, 

FROM 案例 a

INNER JOIN GOPs b ON a.CaseNo = b.CaseNo

INNER JOIN Invoices d ON d.CaseNo = a.CaseNo 

WHERE (a.CreatedDate >= @StartDate AND a.CreatedDate <= @EndDate +1)

如果我直接在查询编辑器中编写这个查询,它就可以正常工作。但是,当我把它作为一个表达式时,它就不再起作用了。

此外,我想向该查询添加动态运算符。唯一的解决办法是把它作为一个表达式。例如。在查询的末尾,我想添加以下内容:

AND FeeEuro "+ Parameters!Operator.Value + Parameters!OperatorValue.Value

类似的东西

AND FeeEuro > 200

是否可以做我需要做的事情,如果可以,你能给我指明正确的方向吗?

最佳答案

这里有一些方法。

我创建了一些样本数据来测试:

create table ReportTest
(id int, value int, testDate date)

insert into ReportTest
values
(1, 100, '01-jan-2013'),
(2, 200, '01-feb-2013'),
(3, 300, '01-mar-2013'),
(4, 400, '01-apr-2013')

我还添加了三个参数:

  • Date
  • Operator (我的报告的可用值为 <>)
  • OperatorValue (整数)

基于表达式

第一个问题是为什么您的查询在编辑器中有效,但不能作为表达式?

您可以在编辑器中引用参数,如果可能,SSRS 将根据需要转换这些参数。如您所见,这对日期参数很有效,但 SSRS 不知道如何处理 Operator参数。

当使用基于表达式的数据集时,SSRS 根本不会应用任何转换 - 它只会尝试将一个字符串放在一起,然后将其扔到数据源并希望它能正常工作。这意味着表达式必须应用任何格式/更新自身来创建适当的查询。

下面的表格/参数对我有用:

="select * from ReportTest where testDate > '"
  & CDate(Parameters!Date.Value).ToString()
  & "'"
  & " and value " & Parameters!Operator.Value & " " & CStr(Parameters!OperatorValue.Value)

因此,当应用它时,它会变成一个按要求工作的可用查询。

在应用这个时你确实会收到警告:

enter image description here

这是有道理的,因为 SSRS 无法在实际运行动态查询之前判断将收到什么。

因此,您需要在转向基于表达式的查询之前设置列。

基于编辑器

在没有动态 SQL 的情况下很难应用运算符类型的参数,但您可以使用 CASE 执行类似的操作陈述。这通过查询编辑器对我有用:

select *
from ReportTest
where testDate > @Date
  and ((@Operator = '>' and value > @OperatorValue)
    or (@Operator = '<' and value < @OperatorValue))

根据您的看法,查询稍微复杂一些,但它确实避免了必须使用基于表达式的查询。

以上两个例子都适用于我的简单表格:

enter image description here

当您增加更多复杂性时,这两种方法仍然可行,例如更多的表,聚合,还是一样的道理。

关于sql - 使用复杂查询在 SSRS 中构建动态查询(动态运算符),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16810706/

相关文章:

php - 如何将 PHP 字符串传递给 Javascript 函数调用?

mysql - 为什么sqlite中显示 "no such column"却有 `pragma`?

sql - 添加索引后查询性能下降

sql - DocumentDB 与 SQL 数据库

c++ - 具有大量数据的类型安全实体对象

jenkins - 如何在声明性 Jenkins 文件内的 Jenkins 多管道中设置响应式(Reactive)选择参数

jquery - 在 jQuery post 参数中使用对象

mysql - 让 VS2013/SSRS 永久使用 .SQL 文件,而不是手动粘贴/导入数据集查询

sql-server - SQL Server服务-概述有人吗?

reporting-services - 将 SSRS 报告导出到 Excel 失败