在标题中使用报表参数

Posted

技术标签:

【中文标题】在标题中使用报表参数【英文标题】:Using Report Parameters in Header 【发布时间】:2011-05-19 18:53:45 【问题描述】:

我读过other posts 建议在标题中显示动态数据时使用参数,因为它在 pdf 中正确呈现。我正在尝试实施该解决方案,但遇到了问题。它在为参数返回数据时工作,但如果没有返回数据,它会引发错误。这是我的设置:

隐藏 允许空值 允许空白值 可用值:来自查询 默认值:来自查询

标题中的文本框具有以下值:

=IIf(IsNothing(Parameters![Report Parameter Name].Value), "", Parameters![Report Parameter Name].Value)

当一行没有返回默认值时,会显示错误:

“[报表参数名称]”参数缺少值。

我是报告服务的新手,所以我可能会遗漏一些大概念。对我来说,没有返回的数据符合允许空值标准。

【问题讨论】:

【参考方案1】:

在 IsNothing 以及类似的除以零的情况下使用 IIF 的问题在于,它不是一种语言结构,它实际上是一个函数。因此,参数是在调用函数之前计算的,这意味着您认为不应该计算的表达式实际上是在函数调用之前计算的。

我知道计算 IF 表达式的真假部分似乎很疯狂,但将其视为函数调用而不是语言功能。没有语言中的路径短路,错误是在调用函数之前计算所有参数。

您可以将其替换为自定义代码功能,以达到您所追求的效果。所以大致如下:

右键单击报告正文并选择“属性”。单击代码选项卡并输入以下代码:

Public Function GetParamVal(ByVal ParamVal) As String
    If IsNothing(ParamVal) Then
        Return ""
    Else 
        Return ParamVal
    End If
End Function

然后像这样在标题中调用它:

=Code.GetParamVal(Parameters!MyParam.Value)

(我不在系统前进行测试,但你应该明白)

【讨论】:

哦,哇,谢谢你的解释。我不使用 VB,所以我不熟悉 IsNothing 和 IIF 的细微差别。

以上是关于在标题中使用报表参数的主要内容,如果未能解决你的问题,请参考以下文章

将子报表参数发送到水晶报表中的主报表参数

在 Pentaho BI 服务器中使用 PDI 转换作为报表参数的数据源

为报表选择多个参数,如何在参数列表中为每个项目创建多个页面?

在 Crystal Report 和 ASP.NET C# 中使用子报表

无法使用 oracle 存储过程在水晶报表 2013 中创建报表

使用更新的参数集无法从 VB 关闭或刷新访问报表