Question

Je suis en train d'utiliser des données à partir d'une liste SharePoint SSRS (Reporting Services) .
Le rapport est pas trop grand - seulement quelques lignes de dizaines, mais pour chaque ligne je besoin d'ajouter des données à partir d'une seconde liste, (actuellement) contient 7000 lignes. Sur SharePoint 2007, je l'ai fait avec succès des choses semblables, mais je ne peux pas l'obtenir pour travailler sur SharePoint 2010.
J'ai essayé:

Je continue à frapper le même mur - je ne peux pas obtenir de données, car la liste est trop grand! Je reçois une erreur semblable à:

L'opération tentée est interdite car elle dépasse la vue de la liste seuil appliqué par l'administrateur.

Ceci est décourageant. J'ai lu beaucoup sur le sujet et ne peut pas voir une bonne façon autour d'elle en plus d'augmenter le seuil sur l'ensemble de l'application.

Y at-il un moyen facile autour de cette nouvelle limite? Y at-il une dure
Je suis à la recherche d'une « meilleure pratique » ... Il ne semble pas que je peux continuer à utiliser l'une de ces méthodes de manière fiable. La seule « bonne » solution que je peux penser à utiliser SSIS pour copier toutes les lignes à une base de données, mais qui semble comme un surpuissant ...

Était-ce utile?

La solution

Dans l'Administration centrale, vous pouvez désactiver le seuil de liste complètement ou fixer une limite supérieure. Vous pouvez également définir une fenêtre de temps lorsque la limite est désactivée et exécutez votre service de rapport alors. Accédez à la page de gestion des applications Web dans l'administration centrale et sélectionnez l'option de ressources Throttling à partir du bouton Paramètres dans le ruban.

Si vous interrogez une liste Caml avec un filtre de telle sorte qu'il retourne moins d'éléments que le seuil devrait également fonctionner.

Autres conseils

Pour éviter le seuil listview, vous devez colonnes d'index dans votre bibliothèque et requête sur cette colonne. Tant que le nombre de lignes renvoyées dans votre requête est en dessous du seuil de ListView, vous n'obtiendrez pas l'exception.

À titre d'exemple, je frappe ce problème en essayant de récupérer tous les dossiers dans une bibliothèque SharePoint. Le nombre de dossiers était bien inférieur à 5000 (le seuil de listview par défaut), mais avec plus de 20 000 articles dans la bibliothèque, je déclenchait l'exception.

La solution était à l'index type de contenu (accessible via les paramètres de la bibliothèque SharePoint) et utilisez la requête suivante:

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

Vous avez juste à comprendre comment vous assurer que votre requête sera de retour inférieur au seuil de listview.

Vous pouvez utiliser la ContentIterator classe pour contourner le seuil d'affichage de la liste, mais vous auriez besoin de recourir à un code personnalisé pour récupérer les données.

Documentation: «Fournit des méthodes à des éléments de liste ITERATE listes, sites de réguler la quantité de données transférées (par exemple, pour éviter de jeter un SPQueryThrottledException) »

SSRS 2008 R2 a une option de source de données SharePoint qui a été ajouté. La source de données SharePoint effectuera une série de 2000 requêtes max de point jusqu'à ce que toute la requête est terminée. Cela vous permet de surmonter le seuil d'affichage de liste et non majorly affecter les performances. PowerPivot effectue encore mieux. Il interroge les listes de 1000 lignes à la fois et mettre en cache les résultats dans un classeur Excel lié. PowerPivot permet également de créer des colonnes et des relations recherche. SSRS peuvent alors interroger une source de données PowerPivot dans SharePoint comme il est un cube d'analyse.

Alors que le choix de ce questionneur est d'augmenter la limite, il est là pour une bonne raison: pour éviter de créer des sites peu performants. À mesure que votre site se développe dans le contenu, ou il devient un modèle pour d'autres sites, vous verrez que tous les utilisateurs de frapper les pages qui nécessitent « de détente » cette restriction entraînera votre site à ralentir. Plus les utilisateurs, plus ce coup de performance se produira.

Je blogué à ce sujet et un ensemble de solutions à http: //squarepoint.blogspot.com/2013/05/creating-performant-sharepoint-apps.html. Il pourrait y avoir quelques suggestions là-bas qui pourrait vous aider à éviter le problème et continuer à fonctionner SharePoint sans pénalité de performance.

Vous pouvez, également, désactivez la propriété EnableThrottling pour la liste spécifique avec trop d'éléments comme Michael Morrison a écrit ici :

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

Bonne chance!

Si vous avez disponible, peut-être envisager la combinaison de l'API de recherche et un service Web? Rechercher index et peut renvoyer un plus grand nombre de domaines. Sa façon détournée d'obtenir au données, mais il est tolérable.

vous pouvez définir un « compte de service » et donner ce site compte des droits d'administrateur de collection. Utilisez ce compte pour interroger les données. Je crois qu'ils peuvent interroger 20.000 titres (ou était-ce 5000 ?!) à la fois.

Si cela ne fonctionne pas:

  • mettre un indexeur sur une colonne de liste (uid?)
  • Utilisez Powershell pour augmenter la listviewtreshold

Gardez à l'esprit que la limite de 5000 articles a un but. requête de 2200 articles peut diminuer les performances, une requête de 5000+ peut même verrouiller la table dans la base de données!

Licencié sous: CC-BY-SA avec attribution
Non affilié à sharepoint.stackexchange
scroll top