我必须根据报告参数设置报告的start_date
。时间戳在数据库查询中计算。
我的表情如下:
=SWITCH (
Parameters!report_type.Value = 1,First(Fields!daily_start.Value, "Timestamps")
,Parameters!report_type.Value = 2,First(Fields!weekly_start.Value, "Timestamps")
,Parameters!report_type.Value = 3,First(Fields!monthly_start.Value, "Timestamps")
)
不幸的是我收到了错误消息:
用于报告参数'time_from'的值表达式是指字段。字段不能用于报表参数表达式
我知道,这是不允许的,因为SSRS无法确定调用数据集的顺序。但我认为这并不危险。
所有时间戳都是通过查询接收的,没有参数。在生成报告之前,用户会选择参数report_type
。
有人可以给我一个解决方法的提示吗?
答案 0 :(得分:3)
这是解决方法 - 使用SQL获取值。
创建一个名为StartDates的新数据集:
SELECT CASE
WHEN @report_type = 1 THEN daily_start
WHEN @report_type = 2 THEN weekly_start
WHEN @report_type = 3 THEN monthly_start
END AS StartDate
FROM MyTable
您已拥有@report_type
和@time_from
参数。使用@time_from
参数,使用StartDates数据集和Value字段StartDate将其默认值设置为Get values from a query
。
现在,您认为这可能足以使其正常工作 - 您将此查询作为默认值引用,并且当您更改@report_type
参数时,其他参数会刷新,但是第一个日期在@time_from
参数永远不会更改。这是因为刷新发生在可用值查询上,而不是默认值查询上。
因此,您还需要将可用值查询连接到StartDates查询。现在,您的查询将触发@report_type
的更改,默认值将设置为您选择的相应日期。
答案 1 :(得分:0)
我从查询切换到存储过程并收到此错误。我试过的事情:
答案 2 :(得分:0)
有时,表达式可能会有点冗长。我创建了一个报告代码功能,然后将其用作参数值。
例如,我创建了一个名为" CalculateDateSet"的代码函数。然后将报告参数设置为此表达式:
" = Code.CalculateDateSet(参数!Month.Value,参数!Year.Value"