我有一个@Posted参数,其值为“已发布”和“未发布”。我也有开始和结束日期。当他们选择“已发布”时,我将开始日期设置为今天,当他们选择“未发布”时,我将开始日期设置为1/1/1900。这部分工作正常。我有这个数据集,用于设置开始日期参数的值:
select case @posted when 0 then '01/01/1900' else convert(date,getdate()) end as 'StartDate'
但是,如果我选择“已发布”,请查看报告,然后将其更改为“未发布”,开始日期不会更改。我必须退出报告并再次运行它。任何想法如何在我选择了@Posted值后更改开始日期参数然后更改它?谢谢!
答案 0 :(得分:0)
在级联参数方案中,在父参数更改后,默认子参数值不会发生变化,这是一种已知(通常不受欢迎)的行为。
首先,要回答这个原始场景,请确保开始参数的默认值设置为“从查询中获取值”。我能够使用该设置正确更改子参数日期:
第二,用户遇到的一个非常常见的场景,当父参数更改时,默认子参数值不会改变,这是由于 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")
如果我们不想包含日期的时间部分,我们会确保将主报告的日期参数设置为日期数据类型,而不是日期时间。