Reporting services 利用参数表达的SSRS多群

Reporting services 利用参数表达的SSRS多群,reporting-services,expression,parameter-passing,grouping,reportbuilder,Reporting Services,Expression,Parameter Passing,Grouping,Reportbuilder,在报表生成器中,我有一个包含许多参数的报表,其中三个参数是@DateFrom、@DateTo、@Check 来自主数据集的查询提供了三列结果: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

在报表生成器中,我有一个包含许多参数的报表,其中三个参数是@DateFrom、@DateTo、@Check

来自主数据集的查询提供了三列结果: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创建另一个组的最简单方法是修改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 ...
选择
....,
案例
当ExpiryDate介于@DateFrom和@DateTo之间时,检查=@Check
然后是“当前”
当ExpiryDate=@DateTo和Check='Y'
然后“之后”
以MyGroup结束,
...
从…起
因此,您可以使用新的自定义分组字段在tablix中创建父组

或者,如果SQL非常复杂,或者您使用的是共享数据集/存储过程,则向SSRS tablix添加一个组,并使用开关构造指定具有类似逻辑的自定义表达式

编辑,将参数添加到SQL案例中

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
案例
当expirydate介于@DateFrom和@DateTo之间,并且在@check中[check]时
然后是“当前”
当expirydate=@FromDate和[check]='Y'
然后“之后”
以MyGroup结束

请注意,check仅用方括号括起来,因为它是一个保留的SQL关键字。

太好了!非常感谢,我会立即尝试,并尽快报告。嗨,皮特,我尝试了你的方法,如果我硬编码CASE语句,它就起了作用。但是,如果我将脚本更改为实参数,并将其放入数据集查询,则运行我收到的报告错误为“应为语句结尾”。我不确定是否可以在此处发布,否则我将不得不创建其他内容。我将在此处发布,以防您提供帮助:)此case语句位于SELECT中:我不知道如何对齐它们,抱歉。case WHEN((ExpiryDate BETWEEN')&UCase(Format(Parameters!DateFrom.Value,)dd-MMM-yyyy)和“&”和“&&UCase(Format(Parameters!DateTo.Value,“dd-MMM-yyyy”)&”并签入(“&&Join(Parameters!Check.Value,”,“”)&“&”)然后在((ExpiryDate=”&&UCase(Format(Parameters!pFromDate.Value,“dd-mm-yyyy”)&“)和“&”时“当前”和“&”)然后“After”以MyGroupHi Daniel结尾,非常感谢您对此进行研究。这是PL/SQL语句,案例在SELECT语句中。另外,SSRS/Report from Report builder参数将包含在这个案例中。我首先使用@check使案例变得简单,并询问如何执行此操作的逻辑。然后当我应用您的逻辑非常有用,我需要在中添加参数值。无论如何,它现在工作正常。再次感谢您的帮助:)回答。非常感谢:)
E       Y       09/05/2017
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 ...
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