RB如何在表达式中使用Filter?

时间:2013-11-04 14:03:24

标签: reporting-services

我在数据库上有一个带有查询“COLORS”的数据集,结果如下:

| pdf |红色|

| rdl |黑色|

| excel |蓝色|

我的目标是根据报告的导出格式更改背景颜色。 可以在数据库中更改颜色,因此我需要它是动态的。 如果我导出为pdf,backgroundcolor应该变成红色......我可以在backgroundcolor表达式中使用Filter,如下所示吗?如果是,怎么样?

=iif(Globals!RenderFormat.Name=Filter((Fields!Format.Value, "COLORS"),"pdf",true,???),

1 个答案:

答案 0 :(得分:2)

我使用Lookup函数完成了一些工作。这只是2008R2及以上版本,但事实上你已经在查看Globals!RenderFormat.Name,这也是2008R2及以上,这意味着这是可以的。

我的第一个想法是:

=Lookup(Globals!RenderFormat.Name
  , Fields!RenderFormat.Value
  , Fields!Color.Value
  , "Colors")

但这引起了错误。

但是,作为一种解决方法,我在报告中设置了一个文本框以显示=Globals!RenderFormat.Name,然后根据报表项上的表达式:

=Lookup(ReportItems!Textbox1.Value
  , Fields!RenderFormat.Value
  , Fields!Color.Value
  , "Colors")

出于某种原因,在另一个失败的情况下,这种方法很有效。

如果需要,您可以将显示渲染格式的文本框设置为隐藏。

其他选项...通常,对于样式,您可以使用已经使用的数据库方法,并通过嵌入式报表代码或部署在服务器上的DLL来执行此操作。

只是在报表中嵌入代码并不能真正帮助您获得所需的动态样式,这样就会留下DLL选项。

这将涉及使用一些简单的函数创建一个DLL,该函数可以根据参数返回颜色值,即渲染格式全局变量。

这样做的好处是只有一个代码库,因此更新DLL会将其应用于服务器上的所有报告。

This博客文章提供了有关如何使用服务器端DLL实现此功能的一些详细信息。

缺点是它很复杂,并且确实涉及在服务器上运行DLL,这并不总是微不足道。