SSRS计算在多个报告中使用的字段

时间:2016-03-04 20:02:04

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

我在Visual Studio 2013和SQL Server 2008 R2中工作。

非常长的表达式[60-70 IIF]位于约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函数??

我很感激任何帮助/建议。

谢谢!

2 个答案:

答案 0 :(得分:0)

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

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

顺便说一句,您应该使用Visual Studio 2008为SSRS 2008R2构建报告。 VS2013内置的报告无法保证在SSRS 2008R2上运行。

答案 1 :(得分:0)

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

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

  1. 正如Tab Allerman指出的那样,在程序集中创建一个类函数,并将该程序集嵌入到每个报表中。然后,只需在选择更改时使用新程序集更新服务器。

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

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

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

  5. 询问维护数据库的人员为什么产品不典型。