2012-04-11 117 views
3

我有一个SSRS“声明”类型且具有文本框和表格总体布局的报告。对于主文本框中我想,让用户提供值作为参数,使文本可定制,即文本输入包括字段名称

Parameters!MainText.Value = "Dear Mr.Doe, Here is your statement." 

那么我可以设置文本框的值是参数的值:

=Parameters!MainText.Value 

不过,我需要能够允许传入的参数值,包括数据集字段,就像这样:

Parameters!MainText.Value = "Dear Mr.Doe, Here is your [Fields!RunDate.Value] statement" 

,使我的报表输出会是什么样子:

“亲爱的Mr.Doe,这是您的11月份声明。”

我知道,您可以通过提供静态文本和现场要求定义它这样做在文本框中,但我需要SSRS认识到参数字符串中有需要的字段要求逃避和绑定。

有没有人有任何想法?我使用SSRS 2008 R2

回答

1

有几个显着的不同方法。要知道,这是最适合你将需要更多的信息:

  1. 在报告中嵌入代码。可能最快到 工具将嵌入代码在报告中返回 参数,但适当地调用String.Replace()代替 动态值。你需要为用户建立一些代码来替换字符串。嵌入式代码可让您访问报告中的许多对象。例如:

    Public Function TestGlobals(ByVal s As String) As String 
        Return Report.Globals.ExecutionTime.ToString 
    End Function 
    

    将返回执行时间。显示报告参数的其他方法here.

    1.5 如果此功能变得非常大,请查看使用自定义程序集。然后,您可以通过Visual Studio获得更好的创作体验

  2. 修改XML。根据您使用 的位置,您可以直接修改.rdl/.rdlc XML。

  3. 考虑其他工具,报表制作等。如果你需要给用户 更多的灵活性,在报表制作,有很多工具内置 专门为此,如SSRS的报表生成器。
+0

嗨杰米,感谢您的快速反应。我认为'String.Replace()'将成为我唯一可行的选择。虽然我不太确定这会起作用......因为即使我进行了替换,比如寻找** RunDate%**并替换为“Fields!RunDate.Value”,它仍然只是文本,并且在渲染时,SSRS将会像这样对待它。我的备份选项是在数据集到达ssrs之前完成所有操作。 – dashstar 2012-04-11 18:24:44

+0

如果您需要将字段值传递给函数,但对于其他许多事情,我认为您可以从嵌入代码访问全局报告属性。我会在接下来的几个小时内尝试测试。 – 2012-04-11 18:48:36

+0

在嵌入式代码路由中增加了一些更多的细节。 – 2012-04-11 20:34:52

1

你试过串联?

参数!MainText.Value =“亲爱的Mr.Doe,这是您的”& [Fields!RunDate。值] &“声明”

+0

嗨路易斯,这将作为文本框的值,但不作为参数值。因为SSRS似乎将整个事件视为一个字符串,即**“Dear Mr.Doe,这是您的&[Fields!RunDate,Value]&statement”**,即使您指定了自己的引号。我试图用几种不同的方式逃避报价,但它似乎不起作用。 – dashstar 2012-04-11 18:28:36

1

这里的另一种方法:显示参数字符串已经填入数据集中值

这样做:创建一个名为RunDate例如参数和设置默认值“得到查询值“并选择第一个数据集和值字段(RunDate)。现在参数将保存RunDate字段,您可以在其他地方使用它。使此参数隐藏或内部并设置正确的数据类型。例如日期/时间,以便日后格式化其值。

现在创建将举行您想要的默认文本的第二个参数:

Parameters!MainText.Value = "Dear Mr.Doe, Here is your [Parameters!RunDate.Value] statement" 

不知道这句法的作品,但你的想法。您也可以在此处进行格式设置,例如只有日期时间的月份:

="Dear Mr.Doe, Here is your " & Format(Parameters!RunDate.Value, "MMMM") & " statement" 

这种方法只使用内置的方法和避免了解析器的需要,因此用户不必学习语法它。

当然存在一个缺点:用户完全控制参数内容并且可以提供与报告内容不匹配的值 - 但String Replace方法也是如此。

而贪图完整性另外还有简单的选项:追加多个参数:创建一个名为MainTextBeforeRunDate和MainTextAfterRunDate 2个参数。

文本框数值表达式变为:

=Parameters!MainTextBeforeRunDate.Value & Fields!RunDate.Value & Parameters!MainTextAfterRunDate.Value. 

这应该解释本身。最简单的解决方案往往是最好的,但在这种情况下,我有我的怀疑。至少这可以确保你的RunDate结束于最终的报告文本。