【问题标题】:HOW TO APPLY DIFFERENT FILTERS ON DIFFERENT EXPRESSIONS?如何对不同的表达式应用不同的过滤器?
【发布时间】:2019-01-28 11:37:44
【问题描述】:

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

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

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

由于每个表达式都应该使用过滤器,我不知道如何在 SSRS 中处理它?

【问题讨论】:

  • 最简单的方法(通常)是将参数传递给您的数据集查询并在那里处理所有内容,然后只使用 SSRS 来显示结果。如果您需要更多帮助,请发布更多信息。报告设计的屏幕截图、您想要的外观以及支持您的模型输出的示例数据。目前没有足够的信息继续下去。
  • 我建议在数据集查询中计算起始余额,它应该将相关时间间隔的交易加入到这些结果中。其余的可以在报告中完成(使用具有一个行组且没有详细信息“组”的表)。

标签: reporting-services parameters ssrs-tablix


【解决方案1】:

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

第一列只是省名。

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

=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)
         )
    )

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

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

【讨论】:

    【解决方案2】:

    除了@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 语法)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-05
      • 2014-07-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多