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

HOW TO APPLY DIFFERENT FILTERS ON DIFFERENT EXPRESSIONS?

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

我有一个 table 包括省名,每个省需要计算:

  1. 开始日期的余额
  2. StartDate 和 EndDate 之间的贷方和借方总和
  3. 结束日期的余额

由于每个表达式都应该与过滤器一起工作,我不知道如何在 SSRS 中处理它?

将分组添加到 table 省份。确保您的数据集是按省顺序排列的。删除 Detail 行(您不需要它,我们只需要 SUM)并删除 Group Header。我们会将我们的数据放在组页脚中。

第一列只是省名。

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

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

第三列是期间余额(两个日期之间),因此我们使用此表达式对它求和 IIF 日期介于开始日期和结束日期之间:

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

最后一列是期末余额(结束日期之前的任何值),因此我们使用以下表达式对它求和 IIF 日期早于结束日期:

=SUM(IIF(Fields!Record_DATE.Value <= Parameters!EndDate.Value,
         Fields!PayAmt.Value, 
         CDEC(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 服务器语法)