参数查询

时间:2015-12-01 11:10:25

标签: reporting-services ssrs-2008-r2

我有一个简单的脚本,可以为某个产品提供订购日期和订单完成日期。

在图表上,我想显示在某个日期和同一日期之间完成的数字之间订购的数字。

我遇到的问题是我使用过的脚本:

AND job.orderdate BETWEEN(@ odate1)AND(odate2)

这对于显示新订单绝对没问题。但是,当我对已完成的订单使用相同的参数时,它显然只显示在上述参数之间完成的作业。

例如,如果我输入11月的日期参数,它会显示:

50个订单 已完成25个工作

如果11月份订单没有在11月开始完成,那么它不会告诉我的是什么。所以我可能有一个例子,其中15个其他工作在11月完成,但由于他们的开始日期是10月,他们将无法通过。

有人可以提出一种方法来传递这些数据吗?我要做的就是提供一个图表,显示:新订单和已完成的订单。

由于

1 个答案:

答案 0 :(得分:0)

如果要在某个日期之间显示作业订单,或者在某些日期之间显示作业已完成,则查询肯定需要使用OR语句

WHERE ...
AND ((job.orderdate BETWEEN (@odate1) AND (odate2)) 
OR (job.completeddate BETWEEN (@odate1) AND (odate2)))

这将显示订单日期或完成日期在@odate1odate2之间的所有记录

同时

将BETWEEN与日期结合使用可以让您进入 all sorts of trouble

最好使用>和<与已知日期的比较。在这种方法中重写上述内容将是

WHERE ...
AND (((job.orderdate >= @odate1) AND (job.orderdate <= odate2)) 
OR ((job.completeddate >= @odate1) AND (job.completeddate <= odate2)))

<强>更新

您可以为每条记录设置单独的标记,以显示它是否符合

的条件
  • 在此日期期间订购
  • 在此日期期间完成

使用下面的CASE语句

SELECT ...
    CASE 
        WHEN ((job.orderdate >= @odate1) AND (job.orderdate <= odate2)) 
        THEN 1 
        ELSE 0 
    END AS OrderInPeriod
    CASE 
        WHEN ((job.completeddate >= @odate1) AND (job.completeddate <= odate2)) 
        THEN 1 
        ELSE 0 
    END AS CompletedInPeriod
FROM myTABLE
WHERE ...
AND (((job.orderdate >= @odate1) AND (job.orderdate <= odate2)) 
OR ((job.completeddate >= @odate1) AND (job.completeddate <= odate2)))

然后,您可以根据这些标记在报告中使用SUM,或者根据这些过滤器过滤Tablix,或者在报告中以其他方式使用它们,即

创建一个新的Tablix过滤器,表达式设置为

 =iif((Fields!OrderInPeriod.Value = 1) OR (Fields!CompletedInPeriod.Value = 1), 1, 0)

然后是Operater =&#34; =&#34;和值= 1

过滤掉OrderInPeriodCompletedInPeriod设置为1

的所有记录