我正在使用SQL Server报表服务。我的大多数查询都以报告的形式运行,这些报告只是简单地导出为PDF。
我想知道哪种类型的计算,如果有的话,应该在实际的SQL查询中完成,哪些应该使用SSRS IDE(商业智能工作室)计算。
例如,如果我有一个12个月的销售报告(12个月),它需要最近3个月的销售平均值,该平均值应该在哪里计算?
大多数计算/聚合应该在表示层完成吗?任何异常?
这可以用两种方式来看待:
- 业务逻辑放在哪里?
- 在给定的时间内需要进行计算,其中效率更高
这两个问题的答案都是"视情况而定"。对于同样显示趋势的12个月报告的示例,如果有几个参数改变了用于获取数据的逻辑,那么我很想在SQL存储过程中做尽可能多的事情(甚至是平均值),并使报告非常"愚蠢",只显示结果。如果报告非常简单,或者逻辑仅特定于该报告,那么在报告中可能有效。
对于可重用性,我倾向于使用SQL。对于复杂的显示内容(热图、图表等),在报告中显示可能更好。在报表中保留报表的逻辑。SQL Server会给你数据,但最好保持自定义的逻辑与报告。
我会避免让报表往返数据库进行计算。如果存储过程的分组和排序与报表布局匹配,那么SSRS在进行聚合计算方面非常有效。