我尝试通过非查询驱动的SSRS报告参数创建级联参数。这是可能的还是我需要实际制作一个包含我需要的值的表?
因此,当选择年份I时,请注意以下内容:
当他们选择第一个月时,我喜欢以下内容:
我不是只想做一个例子来说明我如何通过表达式做一两个例子,或者我是否真的要写一个查询来做这个?
答案 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数据集来获取第二个参数的可用值:
简洁:
<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>
=IIF(Fields!Value.Value = 0, -1 * DatePart("d",Today()),Fields!Value.Value)
[SetName]
到[@DateType]
的数据集上设置过滤器。