如何对不同的表达式应用不同的过滤器?
HOW TO APPLY DIFFERENT FILTERS ON DIFFERENT EXPRESSIONS?
我有一个包含两个参数的报告:StartDate 和 EndDate。
我有一个 table 包括省名,每个省需要计算:
- 开始日期的余额
- StartDate 和 EndDate 之间的贷方和借方总和
- 结束日期的余额
由于每个表达式都应该与过滤器一起工作,我不知道如何在 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 服务器语法)
我有一个包含两个参数的报告:StartDate 和 EndDate。
我有一个 table 包括省名,每个省需要计算:
- 开始日期的余额
- StartDate 和 EndDate 之间的贷方和借方总和
- 结束日期的余额
由于每个表达式都应该与过滤器一起工作,我不知道如何在 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 服务器语法)