【问题标题】:SSRS access built-in functions from report vb codeSSRS 从报告 vb 代码访问内置函数
【发布时间】:2019-04-29 03:50:18
【问题描述】:

我正在为 SQL Server 2008R2 创建多语言 SSRS 报告。 要做到这一点,无需外部代码并且只从数据库中获取翻译,我需要在报告的部分代码中使用 Lookup() 内置函数。
我对文本框有以下表达式:

=LOOKUP("Rpt_0_Hello", Fields!Token.Value, Fields!Translation.Value, "DS_Translation")

目标是降低文本框翻译的表达复杂性。我想表达:

=Code.TrasT("Rpt_0_Hello")

我尝试写一个这样的VB函数:

Public Function TransT( Token as String )
   Lookup( Token
          ,Report.Fields!Token.Value
          ,Report.Fields!Translation.Value
          ,"DS_Translation")
End Function

此代码生成错误“[BC30451]'Lookup' is not declared.”。 我在网上发现使用“报告”对象来获取像字段这样的报告元素。
有没有办法引用“Lookup()”?

【问题讨论】:

  • 这不是 VBScript。也许是VBA?请使用适当的标签。
  • 这不是 VBA,因为它不像 excel 这样基于强大的对象模型,但它是一个简单的 VB 解释器,语法没有明确定义。
  • Token as String 之类的东西不是有效的 VBScript 语法,所以如果它有效,我猜它一定是 VBA、VB.Net 或只是普通的 VB 或.... VBA 似乎仍然是最有可能的虽然是候选人。
  • 可以在表达式中使用查找函数 (docs.microsoft.com/en-us/sql/reporting-services/report-design/…)。有关一些示例,请参阅本文 - red-gate.com/simple-talk/sql/reporting-services/… 尝试查看表中单元格的表达式 =Lookup( Token ,Report.Fields!Token.Value, Report.Fields!Translation.Value, ,"DS_Translation")
  • 我知道 Lookup on Expression 的正常使用,但我要求在代码部分使用它们以降低文本框翻译表达式的复杂性

标签: sql-server vba reporting-services ssrs-2008-r2


【解决方案1】:

我认为您指的是 SSRS 查找功能。您不能直接在报告代码函数中使用它(据我所知)。

但是,您可能想做的只是使用查找功能从名为“DSTranslation”的数据集中获取翻译。如果这是正确的,他们只需将文本框(或其他)的表达式设置为查找函数。

所以你的文本框表达式就是

=LOOKUP(Fields!Token.Value, Fields!Token.Value, Fields!Translation.Value, "DS_Translation")

这假设两个数据集都有一个名为Token的字段

如果我误解了,请编辑您的问题并更详细地解释您要做什么以及您的数据集中有哪些数据。

【讨论】:

  • 我知道我的目标并不明显并修改了我的问题。我翻译文本框的起始表达就是你写的。
  • 好的,我现在明白了。我有 99% 的把握你不能这样做。当我遇到类似问题时,我要么像现在一样设置报告,要么完成数据集查询中的所有翻译。
【解决方案2】:

自定义代码中无法调用Lookup()函数。

【讨论】:

    【解决方案3】:

    我找到了降低翻译复杂性目标的答案。 这不能解决问题,但它是一种解决方法,可以最大限度地减少多语言报告准备工作。 您可以使用报告变量作为要翻译的元素的中间表达式。如果你为任何元素定义一个变量来翻译:

    V_Hello=LOOKUP("Rpt_0_Hello", Fields!Token.Value, Fields!Translation.Value, "DS_Translation")
    

    您现在可以在文本框上使用以下表达式:

    =Variables!V_Hello.Value
    

    它不像问题的解决方案那样直接和简短,但是如果您尊重命名,您可以自动将此变量插入到报告 XML 文件 .rpt 中(这是未来的问题)。
    这样一来,您就可以用一块石头杀死两只鸟,因为您简化了表达式并评估了一次表达式。这对于复杂的报告可能很有用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多