不使用查询SSRS的级联参数下拉列表

时间:2016-09-13 19:18:51

标签: sql reporting-services

我尝试通过非查询驱动的SSRS报告参数创建级联参数。这是可能的还是我需要实际制作一个包含我需要的值的表?

enter image description here

因此,当选择年份I时,请注意以下内容:

  • 临时到期日(值= -99)
  • 1年前(价值= -1)
  • 2年前
  • 3年前
  • 4年前

当他们选择第一个月时,我喜欢以下内容:

  • 当月(价值-int今天(2016年9月13日将是-13)
  • 1个月前(价值= -30)
  • 2个月前(价值= -60)
  • 3个月前
  • 4个月前
  • 5个月前
  • 6个月前
  • 7个月前
  • 8个月前
  • 9个月前
  • 10个月前
  • 11个月前

我不是只想做一个例子来说明我如何通过表达式做一两个例子,或者我是否真的要写一个查询来做这个?

2 个答案:

答案 0 :(得分:1)

不,您不需要查询,但需要多个表达式。在报告参数属性中,为可用值创建表达式。从BID在Today()函数的帮助中,有以下示例表达式。

  

=今天()

     

=“明天是”&使用DateAdd( “d”,1,今天())

     

=“明天是”&使用DateAdd(DateInterval.Day,1,今天())

因此,1年前将是=DateAdd(DateInterval.Year,-1,Today())。然后,您需要为参数列表中的每个值执行此操作。

就个人而言,我变得懒惰并使用递归查询并对数据集使用类似下面的内容。这将从本月开始返回11个月,然后返回10个月。

 WITH dates AS (SELECT        0 AS num
                           UNION ALL
                           SELECT        num - 1 AS Expr1
                           FROM            dates AS dates_2
                           WHERE        (num > - 10))
 SELECT        DateName(Month,DATEADD(Month, num, GETDATE())) As [MONTH]
 FROM            dates AS dates_1

这更容易维护,您不必为用户的每个可能输入创建表达式。另外,可以针对不同的日期部分更改DateName()和DateAdd(),并且可以更改(num > -10)以返回(返回)多少项。

答案 1 :(得分:1)

如果您不想创建表或查询,仍可以在报告中使用嵌入式XML数据集来获取第二个参数的可用值:

  • 创建XML数据源。将连接字符串留空。
  • 使用静态嵌入式XML创建数据集,其中包含用于过滤不同集的名称,值和值。

简洁:

<Query><XmlData><Root>
    <Item Name="1 Year Ago" Value="-1" SetName="Year" />
    <Item Name="2 Years Ago" Value="-2" SetName="Year" />
    <Item Name="3 Years Ago" Value="-3" SetName="Year" />
    <Item Name="1 Month Ago" Value="0" SetName="Month" />
    <Item Name="2 Months Ago" Value="-30" SetName="Month" />
    <Item Name="3 Months Ago" Value="-60" SetName="Month" />
</Root></XmlData></Query>
  • 在数据库中创建一个计算字段,以包含“1个月前”案例的日期调整:

=IIF(Fields!Value.Value = 0, -1 * DatePart("d",Today()),Fields!Value.Value)

  • 在过滤[SetName][@DateType]的数据集上设置过滤器。
  • 使用计算字段创建第二个级联参数,该参数使用XML数据集作为其可用值。