【发布时间】:2015-08-09 05:07:12
【问题描述】:
如果这个问题被认为是不合适的,因为它没有特定的代码问题,而且更像是“我是不是在正确地吠叫”,请在更好的地方告诉我。
如果不是,我是一个没有 SSRS 经验的全栈 .NET Web 开发人员,我唯一的知识来自过去 3 个不眠之夜。我的团队正在开发的应用程序要求最终用户能够通过创建十几个预定义小部件类型的实例来创建任意数量的自定义仪表板。一些小部件与图表或表格一样简单,用户将小部件配置为显示从较大集合中选择的可能字段的子集。我们有一些组合的小部件。 Web 客户端都是 Angular 的,并且使用一个 restful Web api。
还有两个要求,即可以根据要求或在预定时间以 PDF 报告的形式下载每个小部件的合理传真。这个要求有几种解决方案,所以我不是在寻找替代解决方案。如果 SSRS 可以工作,它将使我们不必构建调度程序,或者找到一种利用现有角度模板的方法,或者根据它们创建视图,填充它们并将其转换为 pdf。我正在寻找的是他将了解报告生成最佳实践以及它们如何与 .NET 程序集交互。
我的具体任务是调查 SSRS 是否可以基于复合小部件创建报告并将其下载为 PDF 或将其安排为一个,如果可以,则基于包含 2 个折线图和一张桌子。 PDF 版本不需要以与图形在同一行且表格在下方的 UI 相同的方式显示。只要显示顺序是阅读顺序,我就可以单独显示每个图表。 (从左到右,然后到下一行)
一个示例可能是,第一张图表显示了去年 x-box 的销量。它旁边的折线图显示了去年 X-Box 的新版本数量。下表中的报告显示了去年销售的 X-box 配件数量,按配件类型(控制器、耳机等)和月份分组,按每月总销售额排序。
上面的示例需要 3 个查询。查询对于该特定仪表板上该小部件的该用户特定实例是唯一的。用户可以对列进行分组、选择排序列和其他任何适用的内容。
如何创建这些查询不是我的任务(至少现在还没有。)所以假设一个神奇的查询引擎会在数据库中正确地创建和存储这些 sql 查询。
我的目标数据库是 sql 2012 及其报告服务。我很失望它只支持 2.0 clr。 OI 有一个粗略的计划大纲,但鉴于我缺乏经验,我们将不胜感激。
看来我可以使用 Soap 服务进行调度和管理。这是直截了当的。
我的计划的其余部分听起来很疯狂。欢迎任何更正,指导和更好的建议。或者也许是一种不同的方法。报表服务器是一个很大的安全漏洞,如果我可以仅通过引用报表名称来满足要求,请指出正确的方向。如果没有,这是我经过 3 天的研究和一些 msdn 简单教程拼凑起来的过程。如下:
要成功创建报表定义,我需要引用整个可用超集中的每个可能字段。目前尚不清楚 table 的超集是否与 graph 的超集相同,但对于这个 POC,我会假设它们是相同的。这样,我只需要一个带有输入参数的存储过程,该参数可以识别正确的查询,我将选择并执行该查询。结果集将是可能字段的一小部分,但存储过程将返回每个字段,省略字段的每一行都为空值,以便报告了解每个字段。糟糕的。我可能会返回 5 列数据和 500 个空值。一定有更好的方法。想到性能上的影响让我感到恶心,但这很容易。现在我有一个可部署的报告。我不知道如何处理摘要。它们会是我将附加到结果集中的附加查询吗?也许神奇的查询引擎知道。
现在是一些额外的丑陋。我必须使用标识正确查询的查询字符串来请求报告 url。我猜我也可以使用正确的参数设置调度程序。但是伙计,我有问题吗。我可以使用 httpWebRequest 调用 url 进行下载,但调度程序究竟是如何工作的?我想它会以类似的方式创建报告,我应该能够告诉它以什么格式呈现。但是对于下载,我将流式传输 html。我将如何告诉报表服务器将其转换为 pdf,然后将其流式传输?可以在部署之前在报告定义中设置吗?当我在报表服务器上玩时,转换没有问题。但至少我找到了一种通过 Web api 访问报表服务器来保护报表服务器的方法。 然后是清理空列的问题。有扩展点,例如数据处理扩展。我认为这些几乎类似于网页生命周期中的一个步骤,但不确定是否准确,否则它们将被称为事件。我需要找到正确的,这样我就可以删除饼图上的空数据列或标签,如果这不会破坏报告的话。我需要在它仍然是 rdl 的时候做。也许如果我还没有找到方法,请将 rdl 转换为 pdf 并更改内容类型。看来我可以在扩展点添加 .net 程序集。但这是否正确?我像开发人员一样思考,而不是像经验丰富的 SSRS 专业人士。我正在尝试,但任何帮助我朝着正确的方向前进将不胜感激。
【问题讨论】:
标签: asp.net reporting-services sql-server-2012 reportingservices-2005