【问题标题】:SSRS Calculated Field used in multiple Reports多个报告中使用的 SSRS 计算字段
【发布时间】:2016-03-04 20:02:03
【问题描述】:

我正在使用 Visual Studio 2013 和 SQL Server 2008 R2。

一个非常长的表达式 [60-70 IIF's] 位于大约 35 个报告中使用的计算字段中。计算字段表达式匹配来自数据行 [来自 T_SQL] 的值,并为该行指定一个“组名称”。

示例数据:

ID     Prod_Num     Amount
1       123           15
2       234           20
3       345           25

示例表达式(伪代码):

IIF (Prod_Num = '123', 'Shirts',
IIF Prod_Num = '234', 'Pants',
IIF Prod_Num = '345', 'Socks', 'Other')

问题是添加或修改 Prod_Num 列表时 - 必须在所有报告中进行更改。

将所有这些都集中在一个地方是一种好方法 - 这样当有变化时,只需在那个地方进行。

我没有数据库上的创建表权限,我不知道这是否是一个选项 - 虽然如果我有权限,我会放置所有 Prod_Nums 和类别(衬衫......裤子。 . .) 到一个表中,然后在 SQL 中为报表做这些工作。

我想到了一个 T_SQL 函数,但一些报告使用链接服务器从 Progress DB 中提取数据。 . .而且我不知道这将如何与 SQL Server 函数一起使用??

如果有任何帮助/建议,我将不胜感激。

谢谢!

【问题讨论】:

  • 我认为正确的方法是创建一个表来映射 prod_num 和类别。否则,如果您在 T-SQL 或 SSRS 中对映射进行硬编码,那么每次将新产品添加到您的数据库时都很难维护。
  • 是的,作为一般规则,我告诉人们,在 SSRS 中尽可能少地执行逻辑,在作为 SSRS 数据集的 SPROC 中执行所有操作。更容易维护。

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


【解决方案1】:

您可以将表达式放入 SSRS 中 Custom Code Assembly 的函数中。

然后您将该程序集添加到所有需要它的报告中,您对每个报告所要做的就是在表达式中调用该函数。

顺便说一句,您应该使用 Visual Studio 2008 为 SSRS 2008R2 构建报告。不保证在 VS2013 中构建的报告适用于 SSRS 2008R2。

【讨论】:

  • 谢谢!我将查看自定义代码组装建议。我们的报告工作正常。我们甚至正在使用 VS 2008 报告 IN VS 2013 和可忽略的问题。我们有一些性能问题,但我们认为这些问题与我们使用链接服务器和“openquery”有关。 . .以及提取比所需字段更多的 SQL [我怀疑是因为从其他报告中“借用”SQL 以用作模板]。
【解决方案2】:

如果您没有在数据中强制执行关系,即为您的产品创建类型表,那么无论您在何处放置此逻辑,都会遇到同样的问题。

您可以获得的唯一优势是将硬代码从多个位置移动到一个位置,这样当您更新表时,您可以清楚地记录另一个位置,该位置也必须是更新。以下是几个例子:

  1. 正如Tab Allerman 所指出的,在程序集中创建一个类函数并将该程序集嵌入到每个报告中。然后,当您的选择发生变化时,您只需使用新程序集更新服务器即可。

  2. 在每个报告都可以访问的数据库中创建一个自定义 SP,即使它不是您报告的主数据库。 (您可以在报告中创建多个数据源。)

  3. 使用 Web 服务作为报告的数据源,并以这种方式将类型放在一个位置。

  4. 使用 xml 文档作为报告的数据源,并以这种方式将类型放在一个位置。

  5. 询问维护数据库的人员,为什么不指定产品。

【讨论】:

  • 首先。 . .大声笑你最后的评论,“为什么……”。这实际上是我第一次从事这份工作时提出的第一个问题——但 DBA 完全处于另一个平流层。我仍然希望这可以完成。同时,我将不得不探讨您的其他一些建议。谢谢!
猜你喜欢
  • 2013-12-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多