【问题标题】:Fields cannot be used in report parameter expression报表参数表达式中不能使用字段
【发布时间】:2012-11-27 08:35:19
【问题描述】:

我必须根据报告参数设置报告的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在生成报告前由用户选择。

有人可以给我一个解决方法的提示吗?

【问题讨论】:

  • 你可以为你的daily_start、weekly_start、monthly而不是字段使用固定的隐藏参数吗?

标签: reporting-services reportingservices-2005


【解决方案1】:

这是解决方法 - 使用 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 数据集和值字段 StartDate 将其默认值设置为 Get values from a query

现在,您认为这可能足以使其工作 - 您将此查询引用为默认值,并且当您更改 @report_type 参数时,其他参数会刷新,但 @987654327 中的第一个日期@ 参数永远不会改变。这是因为刷新发生在可用值查询上,而不是在默认值查询上。

因此,您还需要将可用值查询连接到 StartDates 查询。现在您的查询将在 @report_type 更改时触发,默认值将设置为您选择的适当日期。

【讨论】:

  • 如果我只能在 fetchxml 中做到这一点呢?
【解决方案2】:

我从查询切换到存储过程并收到此错误。我尝试过的事情:

  • 确保我对数据库拥有足够的权限(您需要 EXEC 权限或 DBO 才能运行 sproc)
  • 删除现有参数(然后使用刷新字段刷新/取回正确命名的参数)
  • 删除存储过程周围的方括号(如果您已指定)

【讨论】:

    【解决方案3】:

    有时,表达式可能会有点冗长。我创建了一个报告代码函数,然后将其用作参数值。

    例如,我创建了一个名为“CalculateDateSet”的代码函数,然后将报表参数设置为这个表达式:

    "=Code.CalculateDateSet(Parameters!Month.Value, Parameters!Year.Value"

    【讨论】:

    • 能否请您详细说明一下您提出的解决方法?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多