SSRS多组在表达式中使用参数

时间:2017-11-17 21:46:01

标签: reporting-services expression parameter-passing grouping reportbuilder

在Report Builder中,我有一个包含许多参数的报告,其中三个参数是@DateFrom,@ DateTo,@ Check

来自Main数据集的查询为此结果提供了3列:Name,Check,ExpiryDate。

Name    Check   ExpiryDate  
A        Y      05/01/2016  
B        N      06/10/2017  
C        Y      08/15/2017  
D        N      08/20/2017  
E        Y      09/05/2017  
F        N      10/20/2018

我需要根据参数值将报告分为3组, 例如,运行报告的用户将输入:@DateFrom = 08/1/2017 @DateTo:08/31/2017 =>报告应如下所示:

组当前范围ExpiryDate [(ExpiryDate> = @DateFrom和ExpiryDate< = @ DateTo)和Check = @Check]

C        Y      08/15/2017  
D        N      08/20/2017  

范围前的组ExpiryDate和Check ='Y'[(ExpiryDate< = @DateFrom)和Check ='Y']

A        Y      05/01/2016  

范围后的组ExpiryDate和Check ='Y'[(ExpiryDate> = @DateTo)和Check ='Y']

E       Y       09/05/2017

在使用Main数据集的tablix中(报表中只有一个Tablix),有一个名为“Details”的RowGroup

我读了很多arcticles,我尝试了很多方法,但没有任何效果,因为我猜不出正确的方法。你能帮忙吗?

1 个答案:

答案 0 :(得分:1)

创建另一个组的最简单方法是修改SQL并使用分组逻辑添加另一个列。

SELECT
  ....,
  CASE 
    WHEN ExpiryDate BETWEEN @DateFrom AND @DateTo AND Check = @Check 
    THEN 'Current' 
    WHEN ExpiryDate <= @DateFrom AND Check = 'Y'
    THEN 'Before'
    WHEN ExpiryDate >= @DateTo AND Check = 'Y'
    THEN 'After'
  END as MyGroup,
  ...
FROM ...

这样您就可以使用新的自定义分组字段在Tablix中创建父组。

如果SQL非常复杂或者您正在使用共享数据集/存储过程,则将组添加到SSRS选项卡,并使用SWITCH构造指定具有类似逻辑的自定义表达式。

编辑,向SQL CASE添加参数

CASE
  WHEN expirydate BETWEEN @DateFrom AND @DateTo AND [check] IN @check
  THEN 'Current'
  WHEN expirydate <= @FromDate AND [check] = 'Y' 
  THEN 'Before'
  WHEN expirydate >= @FromDate and [check] = 'Y'
  THEN 'After'
END as MyGroup

请注意,检查仅由方括号括起,因为它是一个保留的SQL关键字。