更改第一个参数时SSRS级联参数不变

时间:2016-07-26 18:09:23

标签: reporting-services parameters

我有一个@Posted参数,其值为“已发布”和“未发布”。我也有开始和结束日期。当他们选择“已发布”时,我将开始日期设置为今天,当他们选择“未发布”时,我将开始日期设置为1/1/1900。这部分工作正常。我有这个数据集,用于设置开始日期参数的值:

select case @posted when 0 then '01/01/1900' else convert(date,getdate()) end as 'StartDate'

但是,如果我选择“已发布”,请查看报告,然后将其更改为“未发布”,开始日期不会更改。我必须退出报告并再次运行它。任何想法如何在我选择了@Posted值后更改开始日期参数然后更改它?谢谢!

1 个答案:

答案 0 :(得分:0)

在级联参数方案中,在父参数更改后,默认子参数值不会发生变化,这是一种已知(通常不受欢迎)的行为。

首先,要回答这个原始场景,请确保开始参数的默认值设置为“从查询中获取值”。我能够使用该设置正确更改子参数日期:

Set report default parameter based on value from query

第二,用户遇到的一个非常常见的场景,当父参数更改时,默认子参数值不会改变,这是由于 MS 不会强制子参数的默认值如果当前值已被列为有效值,则重新评估。

这在 2007 年被报告为一个错误......

原始“错误”描述,如 reported via Microsoft Connect(注意此页面上的解决方法链接)

<块引用>

Parameter2 有一个默认值 [value] 并且依赖于 Parameter1。当你 改变Parameter1,Parameter2的默认值不变 即使 Parameter2 的默认值依赖于 Parameter1。

Microsoft 将报告的问题关闭为“设计使然”(正如用户 Hannover Fist 在上面的评论中指出的那样)

他们说:

<块引用>

"如果参数 2 的值对于参数 2 的新值仍然有效 父参数1,那么我们不会重新评估的默认值 参数 2."

以及:

<块引用>

"我们不会重新评估后续参数的默认值 * 除非 * 所选值不再在有效值列表中..."

示例“错误”场景

-----------------------------------------------------------
|Parameter1: @PeriodEnd 
|Date Type: Date/Time
|
|Available Values (specified):
|
|Label                | Value
|"Current Period End" | [<<Expr>>] =CDate("5/31/2021")
|"Prior Period End"   | [<<Expr>>] =CDate("4/30/2021")
|
|Default Values
|[<<Expr>>] =CDate("5/31/2021")
-----------------------------------------------------------
|Parameter2: @BeginningPeriodEnd
|Available Values (get from query):
|
|Dataset:
|PeriodEndDate
|
|Value field:
|PeriodEndDate
|
|Label field:
|PeriodEndDate
|
|Default Values:
|[<<Expr>>] set to Parameters!PeriodEnd.Value
-----------------------------------------------------------
|DataSets: PeriodEndDate
|Query: "SELECT DATEADD(d,-1,DATEADD(month, DATEDIFF(month, 0,@PeriodEnd), 0)) as 
|        PeriodEndDate
|        UNION
|        SELECT @PeriodEnd"
-----------------------------------------------------------

在上述场景中,Parameter2 默认值将仅更改 Parameter1 所选值第一次更改时,尽管它的默认值设置为 Parameters!PeriodEnd .价值。

Parameter1 再次从“Current Period End”更改为“Prior Period End”后,Parameter2 的值不会改变。

解决方法示例(请注意上面链接的 MS Connect 页面上替代解决方法的链接)

通过确保在其自己的(当前)可用(有效)值列表中找不到其当前默认值,强制重新评估 Parameter2 的默认值。

在这种情况下,我们简单地更改 Parameter1 的可用值以包含时间:

-----------------------------------------------------------
|Parameter1: @PeriodEnd 
|Date Type: Date/Time
|
|Available Values (specified):
|
|Label                | Value
|"Current Period End" | [<<Expr>>] =CDate("5/31/2021 17:30:30")
|"Prior Period End"   | [<<Expr>>] =CDate("4/30/2021 17:30:30")
|
|Default Values
|[<<Expr>>] =CDate("5/31/2021 17:30:30")

如果我们不想包含日期的时间部分,我们会确保将主报告的日期参数设置为日期数据类型,而不是日期时间。