我们正在考虑迁移到Sql Server 2005 Reporting Services。我们现有的许多报告都需要在渲染之前对数据进行预处理。
例如,我们查询了一个报告,该报告从存储过程返回GPS坐标(纬度和经度),但在将DataSet传递给我们的报告引擎(当前是Crystal)之前,我们调用Web服务来反转对坐标进行地理编码并获取地址字符串。我们将其推送到DataSet
对象。
我已经阅读了一些Data Processing extensions,但我不确定这是我想要的,因为那时(如果我理解正确的话)我需要实现整个处理流程(包括从存储过程中检索数据)只是为了在最后按摩它。
如何在从数据源检索数据集之后插入和预处理数据集,但在将数据集传递给渲染器之前?
答案 0 :(得分:1)
您可以创建一个.NET程序集,其中包含一个处理单个记录的方法。然后,在报表中包含该程序集,并在呈现每一行时调用该方法。这将进行处理并显示结果。
例如,在创建程序集并将其添加到报表后,您可以创建一个表,其中一个单元格表达式如下所示:
= Code.ReverseGeocode(Fields!Latitude,Fields!Longitude)
请参阅http://msdn.microsoft.com/en-us/library/ms155798.aspx获取一些指导。
答案 1 :(得分:1)
您还可以将SSIS包的结果用作数据源(在运行报表时按需执行包)。
如果您尝试解决将来自多个数据源的数据连接到单个数据集中的问题(例如:地理编码Web服务和关系结果集),这将非常有用。
我认为很多人都没有意识到存在此问题以及处理EII类型报告的有用性
答案 2 :(得分:0)
一种选择是在本地模式下使用ReportViewer控件。
将数据加载到ASP-NET中,您可以对其进行预处理,然后将其传递给控件进行演示。
当您想要在考虑演示之前处理所有数据时,我不确定SSRS如何处理自定义代码/ DLL(如在提到的= Code.ReverseGeocode解决方案中)。 RBAR在文本框或单元格级别感觉不对。
答案 3 :(得分:0)
我想我不明白你为什么不写SQl来提供你想要的数据。无法通过函数计算字段或使用where子句进一步过滤数据。您可以在存储过程或查询数据源中进行大量数据操作。