我正在尝试使用来自SharePoint列表的数据 在SSR(报告服务)中.
该报告不太大 - 只有几十行,但是对于每一行,我需要从第二个列表中添加数据,该列表(当前)包含7000行。在SharePoint 2007上,我已经成功地做了类似的事情,但是我无法在SharePoint 2010上工作。
我试过了:

我不断撞到同一堵墙 - 我无法获得任何数据,因为列表太大了!我有类似的错误:

禁止尝试操作,因为它超过了管理员执行的列表视图阈值。

这令人沮丧。我在这个主题上读了很多东西,除了增加整个应用程序的阈值外,还看不到它的好方法。

这个新限制有简单的方法吗?有艰难的方法吗?
我正在寻找一种“最佳练习” ...看来我可以继续使用任何这些方法。我能想到的唯一“好”解决方案可以使用SSI将所有行复制到数据库,但这似乎是过度的...

有帮助吗?

解决方案

在中央管理中,您可以完全禁用列表阈值,也可以设置更高的限制。您还可以在禁用限制并运行报告服务时设置一个时间窗口。转到中央管理中的Web应用程序管理页面,然后从功能区中的“常规设置”按钮中选择资源节流选项。

如果您查询带有过滤器的列表,以使其返回的项目少于也应该工作的阈值。

其他提示

为避免列表视图阈值,您需要在库中索引列,并针对该列查询。只要查询中返回的行数低于ListView阈值,您就不会得到例外。

例如,在尝试检索SharePoint库中的所有文件夹时,我都会解决这个问题。文件夹的数量远低于5000(默认的ListView阈值),但是图书馆中有20,000多个项目,我触发了例外。

解决方案是索引内容类型(可通过SharePoint库设置访问),并使用以下查询:

<Where><BeginsWith><FieldRef Name='ContentTypeId' /><Value Type='ContentTypeId'>0x0120</Value></BeginsWith></Where>

您只需要弄清楚如何确保查询的返回将少于ListView阈值。

您可以使用 contenterator 绕过列表视图阈值的类,但是您需要求助于自定义代码以获取数据。

文档:“提供迭代列表项目,列表,站点的方法来调节传输的数据量(即,以避免抛出spqueryThrottledledexception)。”

SSRS 2008 R2具有添加的SharePoint数据源选项。 SharePoint数据源将执行一系列2000个最大项目查询,直到整个查询完成为止。这使您可以克服列表视图阈值,而不是主要影响性能。 PowerPivot的执行效果更好。它将一次查询清单1000行,并在Excel绑定的工作簿中缓存结果。 PowerPivot还允许创建查找列和关系。然后,SSR可以在SharePoint内部查询PowerPivot数据源,例如Analytics Cube。

虽然这个发问者的选择是提高限制,但它是有充分理由的:避免创建性能较差的站点。随着您的网站在内容上的增长,或者成为其他网站的模板,您会发现每个用户都击中需要“放松”的页面,这将导致您的网站放缓。用户越多,性能击中的速度就越快会发生。

我在博客上介绍了这一点和一套解决方案 http://squarepoint.blogspot.com/2013/05/creating-performant-sharepoint-apps.html. 。那里可能有一些建议可以帮助您避免问题,并在没有绩效惩罚的情况下保持SharePoint的运行。

您还可以使用过多的项目禁用特定列表的enablethretthrottling属性 迈克尔·莫里森(Michael Morrison)在这里写道:

$web = Get-SPWeb http://url/to/web/with/list
$list = $web.Lists[“BIG_LIST_NAME”]
$list.EnableThrottling = $false

祝你好运!

如果您有可用的话,也许会考虑将搜索API和Web服务合并?搜索可以索引并返回更多的字段。它是获取数据的回旋方式,但可以支持。

您可以定义一个“服务帐户”,并授予该帐户网站收集管理员权限。使用该帐户查询数据。我相信他们可以一次查询20.000件(或5000?!)。

如果那不起作用:

  • 将索引器放在列表列(UID?)上
  • 使用powershell增加listViewTreshold

请记住,5000个项目边界有目的。查询2200个项目可能会降低性能,5000+的查询甚至可能锁定数据库中的表!

许可以下: CC-BY-SA归因
scroll top