【问题标题】:Avoid complex joins in SSRS 2008-r2避免 SSRS 2008-r2 中的复杂连接
【发布时间】:2013-04-17 16:06:40
【问题描述】:

我需要创建一个存在严重性能问题的报告。 我需要在我们的数据库中创建所有课程的目录。 这是简化的数据模型:

组织单元 --> 包含多个课程 --> 包含多个活动; 每个活动都包含以下内容:

  • 附加链接列表
  • 必备活动列表
  • 附加属性-值对列表(编目信息)
  • 每种资源类型所需资源类型和数量的列表
  • 培训目标列表

我希望创建一个报告,将所有内容分组,看起来像这样:

在创建将所有表连接在一起的简单查询后,我得到了近 600 万行,因为由于将活动表与所有 1 对多关系表连接以获取附加链接资源等而出现不同的笛卡尔积...

我想通过几种方式避免这种情况:

  1. 子报告将列出每个活动的不同项目列表。
  2. 为上述每个列表创建一个 XML 字段,并在我的报告中使用 VB 对其进行解析
  3. 在报表中使用多个数据集,并以某种方式使用查找函数来列出不同的值。

目前的结果:

  1. 子报告在性能方面被证明是非常低效的,它比原来的 600 万行查询多 50%。
  2. xml 字段在 DB 方面非常有效,但使用 VB 格式化数据会很麻烦,如果可能的话,我非常希望避免这种情况,
  3. 我似乎找不到正确的方法来使用 lookupSet 来获取附件名称列表及其旁边的链接。

所以我的问题是:

  1. 在处理大量数据和 SSRS 2008-r2 时显示具有大量一对多关系的实体时,最佳做法是什么。
  2. 有没有一种方法可以使用查找功能连接数据并以某种方式创建“嵌套表”来列出一对多关系
  3. 非常感谢任何其他建议。

【问题讨论】:

  • 您是否使用最佳的 JOIN 进行查询?首选 INNER JOIN,其次是 LEFT 和 RIGHT OUTER。避免完全外连接。您所描述的听起来像是需要优化查询,而不是更改报告。 SSRS 有“查找”方法,但 SQL 通常更擅长处理这种基于集合的数据。
  • 查询真的注定要失败..因为我必须加入代表每个活动的附加数据的所有表,并且每行都会乘以activity * number of objectives * number of resource requirements * number of additional properties * number of attachments * number of prerequisites,所以这是我想要避免进入的。 . 任何你尝试这个的方式都会以糟糕的方式结束:)
  • 如果我听说过,请报告仓库。通常,当我收到如此密集的查询并且您必须拥有数据时,需要考虑一些事项。 1. 你能定期将数据转储到另一个地方吗? 2. 你能把那个位置索引出来吗?我每天所做的大部分报告都是在凌晨 4:00 从生产中增量捕获,这与最后一天的不同。问题似乎在于收集和展示而不是 SSRS。我猜想任何报告策略都会遇到类似的问题。
  • 在一个类似的问题中,我注意到在代表集合之一的字段之一中返回一个 XML 字符串实际上使查询明显更快,因为我必须返回更少的行并使用更少的内存。我将在今天晚些时候使用此查询尝试相同的方法,并让您知道进度...
  • 你有什么工作吗?如果可以,需要多长时间?

标签: sql-server reporting-services reportbuilder3.0 ssrs-2008-r2


【解决方案1】:

您可以创建深入报告吗?这看起来是一个不错的选择,可以列出活动并总结课程,然后可钻取其中的细节,或类似的。

或者,如果数据更改不重要,您可以缓存您的报告?

600 万条记录对于 ssrs 报告来说已经很多了!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多