Pregunta

Estoy tratando de usar datos de una lista de SharePoint En SSRS (servicios de informes).
El informe no es demasiado grande: solo unas pocas docenas de filas, pero para cada fila necesito agregar datos de una segunda lista, que (actualmente) contiene 7000 filas. En SharePoint 2007 he hecho con éxito cosas similares, pero no puedo hacer que funcione en SharePoint 2010.
He intentado:

Sigo golpeando la misma pared: no puedo obtener ningún dato porque la lista es demasiado grande. Recibo un error similar a:

El intento de operación está prohibido porque excede el umbral de vista de lista impuesto por el administrador.

Esto es desalentador. He leído bastante sobre el tema y no puedo ver una buena manera de evitarlo además de aumentar el umbral de toda la aplicación.

¿Hay una manera fácil de evitar esta nueva limitación? ¿Hay alguna manera difícil?
Estoy buscando una "mejor práctica" ... no parece que pueda seguir usando cualquiera de estos métodos de manera confiable. La única "buena" solución que se me ocurre para usar SSIS para copiar todas las filas en una base de datos, pero eso parece una exageración ...

¿Fue útil?

Solución

En la administración central, puede deshabilitar el umbral de la lista por completo o establecer un límite más alto. También puede establecer una ventana de tiempo cuando el límite está deshabilitado y ejecutar su servicio de informe. Vaya a la página de administración de aplicaciones web en la administración central y seleccione la opción de aceleración de recursos en el botón de configuración general en la cinta.

Si consulta una lista con un filtro de tal manera que devuelve menos elementos que el umbral que también debería funcionar.

Otros consejos

Para evitar el umbral de ListView, debe indexar columnas en su biblioteca y consultar contra esa columna. Mientras el número de filas devueltas en su consulta esté por debajo del umbral de ListView, no obtendrá la excepción.

Como ejemplo, presioné este problema al intentar recuperar todas las carpetas en una biblioteca de SharePoint. El número de carpetas estaba muy por debajo de 5000 (el umbral predeterminado de ListView), pero con más de 20,000 elementos en la biblioteca, estaba activando la excepción.

La solución fue indexar el tipo de contenido (accesible a través de la configuración de la biblioteca de SharePoint) y usar la siguiente consulta:

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

Solo tiene que averiguar cómo asegurarse de que su consulta devuelva menos que el umbral de ListView.

Puedes usar el ContentIterator Clase para evitar el umbral de la vista de la lista, pero necesitaría recurrir al código personalizado para obtener los datos.

Documentación: "Proporciona métodos para iterar elementos, listas y sitios de la lista para regular la cantidad de datos que se transfieren (es decir, para evitar lanzar una SpQuertherTrotTledException)".

SSRS 2008 R2 tiene una opción de origen de datos de SharePoint que se agregó. La fuente de datos de SharePoint realizará una serie de 2000 consultas de elementos máximos hasta que se haya completado toda la consulta. Esto le permite superar el umbral de la vista de la lista y no afectar principalmente el rendimiento. PowerPivot realiza esto aún mejor. Consultará las listas de 1000 filas a la vez y almacenará en caché los resultados en un libro de trabajo empatado en Excel. PowerPivot también permite crear columnas y relaciones de búsqueda. SSRS puede consultar una fuente de datos PowerPivot dentro de SharePoint como si fuera un Cubo Analytics.

Si bien la elección de este interrogador es elevar el límite, está ahí por una buena razón: evitar crear sitios de bajo rendimiento. A medida que su sitio crezca en contenido, o se convierte en una plantilla para otros sitios, encontrará que cada usuario que llega a las páginas que requieren "relajarse" esta restricción hará que su sitio disminuya la velocidad. Cuanto más usuarios, más rápido, el rendimiento golpee ocurrira.

Hice un blog sobre esto y un conjunto de soluciones en http://squarePoint.blogspot.com/2013/05/creating-performant-sharepoint-apps.html. Puede haber algunas sugerencias allí que podrían ayudarlo a evitar el problema y mantener a SharePoint operando sin la multa de rendimiento.

También podría deshabilitar la propiedad habilitada para la lista específica con demasiados elementos como Michael Morrison escribió aquí:

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

¡Buena suerte!

Si lo tiene disponible, ¿tal vez considere combinar la API de búsqueda y un servicio web? La búsqueda puede indexar y devolver un número mucho mayor de campos. Es una forma indirecta de llegar a los datos, pero se puede soportar.

Puede definir una "cuenta de servicio" y proporcionar los derechos del administrador de la colección del sitio de la cuenta. Use esa cuenta para consultar los datos. Creo que pueden consultar 20,000 artículos (¿o fueron 5000?) A la vez.

Si eso no funciona:

  • Pon un indexador en una columna de lista (¿UID?)
  • Use PowerShell para aumentar la lista de listviewTReshold

Tenga en cuenta que el límite de 5000 artículos tiene un propósito. La consulta de 2200 elementos puede disminuir el rendimiento, ¡una consulta de 5000+ puede incluso bloquear la tabla en la base de datos!

Licenciado bajo: CC-BY-SA con atribución
scroll top