RB如何在DB上使用Lookup表达式以获得报告可见性

时间:2013-11-06 15:25:06

标签: reporting-services

这是2008R2。我有一个数据集,在数据库上有一个查询“DESIGN”,其结果是这样的导出格式:

| pdf   | true  |
| rdl   | false |
| excel | true  |

我的目标是根据报告的导出格式更改可见性。可见性的属性可以在数据库中更改,因此我需要它是动态的。如果我导出为pdf,则应隐藏特定的文本框或Tablix ...我在单独的文本框中尝试了Lookup,它给了我RenderFormat。并使用隐藏属性中的表达式。

=Lookup(ReportItems!Textbox1.Value
  , Fields!RenderFormat.Value
  , Fields!Hidden.Value
  , "DESIGN")

我也尝试在数据库中使用1和0值并将其转换为CBool​​(...),但它似乎是一个bug或类似的东西,因为Textbox1的值在报表呈现时消失。所以Lookup不可能工作。 使用Globals!RenderFormat.Name代替ReportItems!Textbox1.Value它也无效...... 如果你可以帮助我会很棒!

还有一种更简单的方法......如果你知道的话......谢谢!

2 个答案:

答案 0 :(得分:1)

发现它!!!该问题的解决方案如下:

1)首先我必须创建一些VB代码:在ReportBody旁边右键单击以打开ReportProperties。应使用以下代码创建一个valuetype字符串变量:

Public Shared Dim rf as String 
Public Function Setrf (ByVal var as String)
 rf = var
End Function

2)应添加TextBox以填充变量。 TextBox表达式应为:

=Code.Setrf(Globals!RenderFormat.Name)

3)Tablix Propertie Hidden应该获得以下参考代码的Lookup表达式:

   =Lookup(Code.rf, 
           Fields!Reporttyp.Value, 
           CBool(Fields!LegendeVersteckt.Value), "Design")

这是针对true和false为1和0的情况。现在在differen export Format上它是隐藏的还是不隐藏。 :)

答案 1 :(得分:0)

我希望这会像使用报表参数一样简单,然后可以将其输入到查询的WHERE子句中。但是,参数不允许使用Globals!RenderFormat.Name字段(我不知道为什么)。我不确定如何使用查找表达式按照您的要求撤回,但我使用以下嵌套的IIF函数根据呈现的格式切换文本框的隐藏表达式中的可见性:

=IIF(Globals!RenderFormat.Name=nothing,true,
    IIF(Globals!RenderFormat.Name="EXCEL",false,
        IIF(Globals!RenderFormat.Name="PDF",false,true)))

由于您将拥有一个保持布尔可见性值的单个查询,因此该选项可能并不错。唯一的问题是在您可能需要的许多不同位置维护它。我建议将它存储在一个隐藏的文本框中,然后根据需要复制和粘贴它,这样你就可以在一个地方更改功能,而不必担心错别字,只需一次。

在我的测试中,我发现渲染格式区分大小写,而对于报表查看器渲染,格式名称是RPL,而不是rdl。

我能找到的最正确的渲染格式列表如下:来自http://msdn.microsoft.com/en-us/magazine/cc188712.aspx

HTML3.2 HTML4.0 HTMLOWC MHTML 图片 EXCEL CSV PDF XML

我知道这不是你想要的,但希望它有所帮助。