我应该将我的逻辑放在基础SQL查询中还是SSRS报告中?

时间:2017-02-24 10:38:45

标签: sql sql-server reporting-services

在我们的组织中,我们会创建用户/经理要求的大量报告,并将其发布在SSRS网页上。

我们倾向于创建一个返回所需结果的SQL过程,并在SSRS数据集中调用该过程。然后,我们使用SSRS将其呈现在一个漂亮的表中,并倾向于创建分组等,并将图形放在其他位置,以使其看起来对用户来说是显而易见的。

任何“计算列”,例如“年龄”(将根据出生日期和当前日期计算)或“平均销售额”(根据总金额/销售数量计算)在基础中计算SQL过程。

SSRS具有许多功能,允许在SSRS报告中计算这些计算列。

我的问题是,“在基础数据集中创建计算列与在SRRS中创建计算列有什么好处?”是否有任何性能打击?我们应该考虑其他因素吗?

2 个答案:

答案 0 :(得分:1)

当您将关系数据库作为源处理并且您可以控制正在执行的SQL以返回数据集时,我通常会建议在SQL中放入计算,数据类型转换等逻辑,从而卸载对数据库引擎的处理通常比报表服务器更有效率。

我通常将报告作为“表示层”,它将格式,布局,分组和排序应用于数据。创建基础数据集的业务逻辑封装在数据库上运行的查询或过程中。 SSRS肯定包含许多能够操作数据的函数,但我通常只在数据源本身不支持时才使用它们。但是,如果我正在构建具有某种动态功能的报告(例如,报告具有允许用户控制报告中分组的方式的参数),那么在SSRS中进行计算以更好地利用缓存可能是有意义的。 / p>

答案 1 :(得分:0)

我认为表演不是一个大问题,除非你做了很多大量的计算,我不能在很大程度上对此发表评论。

优势主要来自允许报表设计者通过在数据集中创建字段来创建可重用表达式,而不必在报表本身中创建这些表达式。

这更易于维护且更易于查看。在SSRS 2008或更高版本中,您可以在每个占位符中看到字段的名称 - 这使设计人员可以更轻松地计算出每个字段的结果。

如果您使用表达式,那么您在这些框中看到的只是<<expr>>,如果您在多个地方使用相同的表达式,如果您决定更改方式,则需要在所有这些位置更新表达式价值计算。

这只是DRY原则的延伸。