Frage

Ich versuche, Daten aus einer SharePoint -Liste zu verwenden in SSRs (Berichtsdienste).
Der Bericht ist nicht zu groß - nur ein paar Dutzende Zeilen, aber für jede Zeile muss ich Daten aus einer zweiten Liste hinzufügen, die (derzeit) 7000 Zeilen enthält. Auf SharePoint 2007 habe ich erfolgreich ähnliche Dinge gemacht, aber ich kann es nicht dazu bringen, an SharePoint 2010 zu arbeiten.
Ich habe es versucht:

Ich schlage immer wieder auf die gleiche Wand - ich kann keine Daten erhalten, weil die Liste zu groß ist! Ich bekomme einen ähnlichen Fehler wie:

Die versuchte Operation ist verboten, da sie den vom Administrator durchsetzten Schwellenwert der Listenansicht überschreitet.

Das ist entmutigend. Ich habe ziemlich viel zu diesem Thema gelesen und kann es nicht nur gut sehen, abgesehen davon, die Schwelle für die gesamte Anwendung zu erhöhen.

Gibt es einen einfachen Weg um diese neue Einschränkung? Gibt es einen schwierigen Weg?
Ich suche eine "Best Practice" ... es sieht nicht aus, dass ich eine dieser Methoden zuverlässig weiterhin anwenden kann. Die einzige "gute" Lösung kann ich mir vorstellen, um SSIs zu verwenden, um alle Zeilen in eine Datenbank zu kopieren, aber das scheint ein Overkill zu sein ...

War es hilfreich?

Lösung

In der zentralen Verwaltung können Sie den Listenschwellenwert vollständig deaktivieren oder eine höhere Grenze festlegen. Sie können auch ein Zeitfenster festlegen, wenn das Limit deaktiviert ist, und dann Ihren Berichtsdienst ausführen. Gehen Sie zur Seite "Web Application Management" in der zentralen Verwaltung und wählen Sie die Option Ressourcen -Drosselung aus der Schaltfläche Allgemeine Einstellungen im Band.

Wenn Sie eine Liste mit einem Filter befragen, so dass er weniger Elemente zurückgibt als die Schwelle, die ebenfalls funktionieren sollte.

Andere Tipps

Um den ListView -Schwellenwert zu vermeiden, müssen Sie Spalten in Ihrer Bibliothek indexieren und an dieser Spalte abfragen. Solange die Anzahl der in Ihrer Abfrage zurückgegebenen Zeilen unter dem ListView -Schwellenwert liegt, erhalten Sie die Ausnahme nicht.

Als Beispiel habe ich dieses Problem getroffen, als ich versuche, alle Ordner in einer SharePoint -Bibliothek abzurufen. Die Anzahl der Ordner lag deutlich unter 5000 (die Standard -Listansicht -Schwelle), aber mit über 20.000 Elementen in der Bibliothek löste ich die Ausnahme aus.

Die Lösung bestand darin, den Inhaltstyp (über SharePoint -Bibliothekseinstellungen zugänglich) zu indexieren und die folgende Abfrage zu verwenden:

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

Sie müssen nur herausfinden, wie Sie sicherstellen können, dass Ihre Abfrage weniger zurückgibt als die ListView -Schwelle.

Du kannst den ... benutzen Contentiterator Klasse Um den Schwellenwert der Listenansicht zu umgehen, müssten Sie jedoch auf benutzerdefinierten Code zurückgreifen, um die Daten abzurufen.

Dokumentation: "Bietet Methoden zur IT -IT -Listenelementen, Listen und Websites, um die Datenmenge zu regulieren, die übertragen werden (dh, um zu vermeiden, dass eine SpqueryThrottledexception verurteilt wird)."

SSRS 2008 R2 verfügt über eine SharePoint -Datenquellenoption, die hinzugefügt wurde. Die SharePoint -Datenquelle wird eine Serie von 2000 maximalen Elementabfragen durchführen, bis die gesamte Abfrage abgeschlossen ist. Auf diese Weise können Sie die Listenansichtsschwelle überwinden und die Leistung nicht wesentlich beeinflussen. PowerPivot führt dies noch besser durch. Es wird die Listen 1000 Zeilen gleichzeitig abfragen und die Ergebnisse in einer Excel -Arbeitsmappe zwischengespeichert. PowerPivot ermöglicht auch das Erstellen von Suchspalten und -beziehungen. SSRs können dann eine PowerPivot -Datenquelle in SharePoint abfragen, als ob es sich um einen Analyse -Würfel handelt.

Während die Wahl für diesen Fragesteller darin besteht, die Grenze zu erhöhen, ist dies aus gutem Grund vorhanden: es zu vermeiden, schlecht leistungsorientierte Websites zu erstellen. Wenn Ihre Website in Inhalten wächst oder eine Vorlage für andere Websites wird, werden Sie feststellen wird passieren.

Ich habe darüber und eine Reihe von Lösungen gebloggt http://squarepoint.blogspot.com/2013/05/creating-performant-sharepoint-apps.html. Es könnte einige Vorschläge geben, die Ihnen helfen könnten, das Problem zu vermeiden und SharePoint ohne die Leistungsstrafe in Betrieb zu halten.

Sie können auch die Enablethroktrostling -Eigenschaft für die spezifische Liste mit zu vielen Elementen als deaktivieren Michael Morrison schrieb hier:

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

Viel Glück!

Wenn Sie es zur Verfügung haben, sollten Sie möglicherweise die Such -API und einen Webdienst kombinieren? Die Suche kann eine viel größere Anzahl von Feldern indexieren und zurückgeben. Es ist ein Kreisverkehr, an die Daten zu gelangen, ist aber unterstützbar.

Sie können ein "Dienstkonto" definieren und diese Account -Site -Sammeladministratorrechte angeben. Verwenden Sie dieses Konto, um die Daten abzufragen. Ich glaube, sie können 20.000 Artikel (oder waren es 5000?!) Gleichzeitig abfragen.

Wenn das nicht funktioniert:

  • Setzen Sie einen Indexer in eine Listenspalte (UID?)
  • Verwenden Sie PowerShell, um die ListViewTreshold zu erhöhen

Denken Sie daran, dass die Grenze von 5000 Elementen einen Zweck hat. Abfrage von 2200 Elementen kann die Leistung verringern. Eine Abfrage von 5000+ kann die Tabelle sogar in der Datenbank sperren!

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit sharepoint.stackexchange
scroll top