如何对不同的表达应用不同的过滤器?

时间:2019-01-28 11:37:45

标签: reporting-services parameters ssrs-tablix

我有一个带有两个参数的报告:StartDate和EndDate。

我有一张包含省名的表格,每个省都需要计算:

  1. 在StartDate的余额
  2. StartDate和EndDate之间的贷方总和
  3. 平衡EndDate

每个表达式都可以使用过滤器,因此我不知道如何在SSRS中处理它?<​​/ p>

2 个答案:

答案 0 :(得分:1)

将分组添加到省的表中。确保您的数据集按省顺序排序。删除详细信息行(您不需要它,我们只需要SUM)并删除组标题。我们将数据放入“组尾”。

第一列只是省名。

第二列是期初余额(在“开始日期”之前),因此如果日期小于“开始日期”,我们可以使用以下表达式求和:

=SUM(IIF(Fields!Record_DATE.Value < Parameters!StartDate.Value,
         Fields!PayAmt.Value, 
         CDEC(0)
         )
    )

第三列是“期间余额”(两个日期之间),因此,如果使用以下表达式表示日期在“开始日期”和“结束日期”之间,我们将其相加:

=SUM(IIF(Fields!Record_DATE.Value >= Parameters!StartDate.Value AND Fields!Record_DATE.Value <= Parameters!EndDate.Value,
         Fields!PayAmt.Value, 
         CDEC(0)
         )
    )

最后一列是期末余额(结束日期之前的任何内容),因此如果使用以下表达式,则如果日期在结束日期之前,我们将其相加:

=SUM(IIF(Fields!Record_DATE.Value <= Parameters!EndDate.Value,
         Fields!PayAmt.Value, 
         CDEC(0)
         )
    )

答案 1 :(得分:0)

除了@HannoverFist关于如何在报告中进行设置的出色答案外,您还可以在SQL语句中执行此操作以在服务器上进行计算(而不是下载整个数据集以求和)。像这样:

SELECT Province, 
    SUM(CASE WHEN Record_DATE < @StartDate THEN PayAmt END) AS OpeningBalance,
    SUM(CASE WHEN Record_DATE >= @StartDate AND Record_DATE <= @EndDate THEN PayAmt END) AS PeriodBalance,
    SUM(CASE WHEN Record_DATE <= @EndDate THEN PayAmt END) AS ClosingBalance
FROM ProvincePaymentsTable
GROUP BY Province
ORDER BY Province

(使用Sql Server语法)