Skip to main content

Verschieben Durchschnitt In Sql Server 2008 R2


Kevin S Goff Kevin S. Goff, ein Microsoft SQL Server MVP, schreibt seit 2004 die Bakers Dozen Produktivitätsserie im CoDe Magazine. Kevin hostet einen wöchentlichen Webcast auf SQL Server und Business Intelligence, bei BDBIRadio. Kevin ist seit 1987 als Anwendungsentwickler, Architekt und Technologie-Mentor tätig. Kevin hat in vielen Branchen tätig, darunter Versicherungen, Fertigung, Gesundheitswesen, Konsumgüter, Buchhaltung und Finanzen, Werbung und viele andere. Auf dem Weg, hat Kevin mehrere Preise in der öffentlichen und privaten Sektor für die Anwendungsentwicklung gewonnen. Darüber hinaus hat Kevin SQL Server, Business Intelligence und Data Warehousing Klassen für Hunderte von Studenten über einen Zeitraum von fünf Jahren gelehrt und hat zahlreiche benutzerdefinierte Courseware-Module auf dem Weg gebaut. Kevin hat ein Buch über Reporting-Entwicklung verfasst und trug Kapitel zu MDX Programmierung zu zweitem Buch bei. Er entwickelt derzeit eine Reihe von kommerziellen Video-Schulungen für SQL Server und BI-Themen. Er war ein SQL Server MVP seit 2010 und war zuvor ein. NETC MVP von 2005 bis 2009. Kevin ist ein häufiger Redner bei User Group und anderen Community Events (SQL Samstag, SharePoint Samstag, Code Camp) in der Mid-Atlantic Region, Und spricht gelegentlich auf Konferenzen. Im Jahr 2012 arbeitete Kevin mit Microsoft TechNet Radio auf einem 13 Wochen Webcast-Serie auf neue Funktionen in SQL Server 2012. Für weitere Informationen, besuchen Sie Kevins Haupt-Website bei KevinSGoff. net oder E-Mail an kgoffkevinsgoff. net Dieser Artikel wurde veröffentlicht in: This Artikel wurde abgelegt unter: Mit jeder neuen Version von SQL Server Reporting Services bietet Microsoft weiterhin neue Funktionen für das Reporting an. SQL Server 2008 R2, freigegeben zur Fertigung Mitte 2010, stellt Microsofts viertes großes Freigabe von Reporting Services in den letzten 10 Jahren dar. Diese vierte Version konzentriert sich auf die Generierung von Karten und verschiedene Visualisierungsfunktionen für Business Intelligencedata. In diesem Artikel, Ill zeigen 13 wesentliche Merkmale in SSRS. Whats on the Menu Vor kurzem besuchte ich eine Präsentation, wo der Redner schien für immer zu nehmen, um das Fleisch der Demonstration zu bekommen. So krank erhalten Sie rechts zu meinem 13 Themen-in Sergeant Joe Freitag-Art (d. h. die Tatsachen, gerade die Tatsachen). Hier sind die 13 Elemente im Menü für diesen Artikel: Bereitstellen von Berichten auf native Server oder SharePoint. Erstellen von SSRS-Karten mithilfe der SSRS State Map Gallery. Erstellen von SSRS-Karten mit Geodaten. Verknüpfen der beiden SSRS-Karten zusammen mit einer Berichtsaktion. Ein anderes Beispiel mit Geospatial-Daten, aber mit einem benutzerdefinierten Zoom in einer Web-Seite. Erstellen eines Pivot-Tabellenaufrissberichts mit dem Tablix-Berichtsteuerelement. Erstellen von Berichten mit kaskadierenden Parametern. Erstellen von Berichten für OLAP-Cubes. Erstellen von Berichten mit Leistungsindikatoren und Sparklines. Ausführen von Berichten aus C und Exportieren in PDF. SSRS 2008 R2 Potpourri. Bakers Dozen Spotlight: Datengesteuerte Abonnements. Unterberichte. So was haben Sie am Ende Abbildung 1 zeigt ein SSRS-Projekt in Business Intelligence Development Studio (BIDS). Das Projekt enthält mehr als ein Dutzend Berichte mit drei gemeinsam genutzten Datenquellen. Die Datenquellen sind dsADW2008 (die OLTP-relationale Datenbank für AdventureWorks), dsADW2008DW (die OLTP-Datenmart-relationale Datenbank für AdventureWorks) und dsADW2008OLAP (die OLAP-Datenbank für AdventureWorks). Tipp 1: Bereitstellen von Berichten auf native Server oder SharePoint Dieser Artikel setzt voraus, dass Sie die Grundlagen der Erstellung von SSRS-Berichten in BIDS kennen und dass Sie die Grundlagen der Abfrage von Daten für Berichte kennen. Nachdem Sie Berichte in BIDS erstellt haben und sie mit der BIDS-Vorschauoption testen, besteht der nächste Schritt darin, Berichte auf einem Server bereitzustellen. Der Server könnte ein QA-Server, ein Testentwicklungsserver oder ein Produktionsserver sein. Reporting Services unterstützt zwei verschiedene Arten von Bereitstellungszielen: den integrierten SharePoint-Modus oder den nativen SSRS-Modus (Nicht-SharePoint-Modus). Mit dem integrierten SharePoint-Modus stellen Sie SSRS-Berichte und Datenquellen in einer SharePoint-Dokumentbibliothek bereit, und Sie können die Vorteile von SharePoint-Ressourcen nutzen. Im nativen SSRS-Modus stellen Sie Berichte in einer Webumgebung bereit, die ausschließlich Berichtsdiensten zugeordnet ist. Um SSRS für jeden Modus auf einem Server (oder sogar in einer Entwicklungsumgebung) zu konfigurieren, müssen Sie zunächst den Konfigurationstyp definieren. Abbildung 2 zeigt den Bildschirm SSRS 2008 R2 Configuration, in dem Sie die Report Server-Datenbank für den nativen SSRS-Modus oder den integrierten SharePoint-Modus bereitstellen können. Darüber hinaus müssen Sie die Web-Service-URL, die oft so etwas wie Serverreportserver. Abbildung 2: SSRS 2008 R2 Configuration Manager-Berichtsserver-Datenbank. Beachten Sie, dass es für den nativen SSRS-Modus nicht mehr erforderlich ist (in SSRS 2008 und 2008 R2), IIS auszuführen - da SSRS den SQL-Netzwerkstack verwendet. Offensichtlich, wenn youre Bereitstellung von SSRS Berichte in einer SharePoint-Umgebung, dann IIS erforderlich ist. Auf dem SharePoint-Ende müssen Sie das Reporting Services Add-In für SharePoint installieren (verfügbar als kostenloser Download für MOSS 2007 und in die SharePoint 2010-Installation vorinstalliert). Sie müssen auch zu SharePoint-Zentraladministration gt Application Management gehen und dann die Berichtsserverintegration so konfigurieren, dass dieselbe Webdienst-URL verwendet wird, die im SSRS-Konfigurationsbereich definiert ist. Nachdem Sie SSRS und Ihren Ziel-Bereitstellungsbereich konfiguriert haben, können Sie ein SSRS-Projekt ausführen und die Projekteigenschaften festlegen. Abbildung 3 zeigt die Eigenschaften eines SSRS-Projekts bei der Bereitstellung in einem SharePoint-Standort. Hinweis: Es wird davon ausgegangen, dass eine SharePoint-Website oder Websitesammlung bereits vorhanden ist. So angenommen Ive einen Aufstellungsort, der MyServersitesMySiteCollection genannt wird, eine Reportdokumentbibliothek in der Aufstellungssammlung genannt MyReportLibrary und ein Reportprojekt mit dem Namen MyReportProject. Hier sind die erforderlichen Einträge auf der Seite der Projekteigenschaften: Bei der Bereitstellung auf einem nativen Berichtsserver (nicht mit SharePoint) ist die URL-Position viel einfacher. In meinem Fall habe ich einen lokalen Bediener, der localhost genannt wird. Und eine Datenbankreportinstanz von SQL2008 R2. In diesem Fall sind hier die erforderlichen Einträge auf der Seite der Projekteigenschaften (Abbildung 4): TargetReportFolder: MyReportProject myserversitesMySiteCollectionMyReportLibraryMyReportProject TargetServerURL: localhostReportServerSQL2008 R2 Nach der Bereitstellung können Sie Berichte im SSRS Report Manager (bei Verwendung des systemeigenen SSRS-Modus, Abbildung 5) , Oder in der SharePoint-Websitesammlung (Abbildung 6). Tip 2: Erstellen von SSRS-Karten mithilfe der SSRS-State-Map-Galerie SSRS 2008 R2 und Report Builder 3.0 bieten neue Funktionen zum Erstellen von Karten. Dies eröffnet große Möglichkeiten für geographische Visualisierungen. Man könnte einen ganzen Artikel schreiben, nur auf die neuen Mapping-Funktionen, aber Ill versuchen, ein paar Features hier zu zeigen. Fig. 7 zeigt eine US-Zustandskarte mit Zustandsfarben, die durch Verkäufe unter Verwendung einer eingebauten Kartengalerie und eines Datensatzes, der Verkäufe durch Zustand enthält, codiert sind. Der Benutzer kann über einen Zustand schweben und eine Tooltip der Verkäufe und Gewinnrangliste anzeigen. Der Bericht zeigt auch ein Zwei-Achsen-Diagramm, das den Umsatz nach Staat als Säulendiagramm und den Gewinnmargen-Prozentsatz durch den Zustand als Streudiagramm darstellt. SSRS 2008 R2 und Report Builder 3.0 bieten neue Funktionen zum Erstellen von Karten. Dies eröffnet große Möglichkeiten für geographische Visualisierungen. Um dies zu erstellen, muss ich zunächst ein Dataset für die unterstützenden Daten für das Mapchart erstellen: Erstellt einen neuen Datensatz mit dem ADWOLAP-Cube (dsSalesByState). Abrufen der Reseller-Verkaufsmenge und der Reseller-Bruttogewinnspanne aus der Reseller Sales Fact-Tabelle und Abrufen des Geography State-Province-Attributs. Setzen Sie einen internen Filter, um nur Staaten-Provinzen in den Vereinigten Staaten anzuzeigen, und einen Parameterfilter für den Benutzer zur Auswahl eines Geschäftsjahres erstellt. Erstellt zwei MDX-berechnete Mitglieder, um jeden Staat nach Umsatz und Rohertragsmarge zu klassifizieren (das Downloadprojekt enthält den MDX-Code). Der nächste Schritt besteht darin, die Karte mithilfe des Kartenassistenten zu erstellen. Dies ist ein erstaunlich einfacher Vorgang: Ziehen Sie ein Kartenobjekt aus der Toolbox in den Hauptberichtbereich. Dies ruft den SSRS Map Wizard auf. Wählen Sie Landkartengalerie für die Kartenquelle aus, wählen Sie USA durch Staat explodiert aus. Und wählen Sie dann Weiter. Überprüfen Sie einen Bing Maps Layer. Wählen Sie eine Kachelart des Hybrids aus. Und wählen Sie dann Weiter. Wählen Sie für die Option Map-Visualisierung auswählen Color Analytic Map. Und wählen Sie dann Weiter. Wählen Sie für die Option Select Analytic DataSet den Datensatz aus dem ersten Satz von Schritten (dsSalesByState) aus. Passen Sie in dem Feld Angeben von Übereinstimmungsfeldern die Spalte für StateName an, und wählen Sie dann die Datenmengenspalte StateValue aus. Wählen Sie ein Thema (Mahagoni) aus, wählen Sie die Summe des Reseller Sales-Betrags als Feld zum Visualisieren aus, und wählen Sie dann eine Farbregel aus Rot-Gelbgrün aus. So fügen Sie einen Tooltip hinzu, sodass ein Benutzer über einen Status navigieren und die Verkaufsinformationen anzeigen kann: Klicken Sie mit der rechten Maustaste auf die Karte, gehen Sie zu den Kartenlayern, klicken Sie mit der rechten Maustaste auf die Polygonschichteigenschaften und geben Sie dann die folgende Formel ein Der QuickInfo-Formel-Ausdruck: Tip 3: Erstellen von SSRS-Maps mit Geodaten aus der Karte in Abbildung 7. Kann ein Benutzer einen Status anklicken und einen zweiten Bericht starten, der die Händlerstandorte und - verkäufe innerhalb des Zustands anzeigt (Abbildung 8 und Abbildung 9). Diese zweite Karte wird Verkäufe durch die Verwendung der geokatialen Koordinaten für jeden Verkäufer. Sie können den neuen Geografiedatentyp in SQL Server 2008 (und die geospatialen Adresspositionen, die in der Tabelle Person. Address in AdventureWorks gefunden werden) verwenden. Um dies zu erreichen, muss ich zuerst (noch einmal) einen unterstützenden Dataset erstellen: Erstellen Sie einen Dataset (dsVendorSales), der Vendor Sales, Vendor ID und Vendor Name, Stadtname, Vendor Rank und die räumlichen geografischen Geodaten der Person abruft. Adresstabelle. Abbildung 8 zeigt eine gespeicherte Prozedur, die diese Informationen für einen bestimmten Zustand als Parameter erfasst. Ich kann dann eine Karte in den Layoutbereich ziehen, aber diesmal im Karten-Assistenten kann ich die Option SQL Server Spatial Query für die Quelle der räumlichen Daten angeben. Ich muss auch den Layer-Typ als Punkt definieren, da ich Geo-Datenpunkte zur Verfügung stelle. Tipp 4: Zusammenführen der beiden SSRS-Maps zusammen mit einer Report-Aktion Damit ein Benutzer auf einen Zustand in der ersten Map klicken und eine detailliertere Map starten kann, muss ich eine Report-Aktion im ersten Report definieren. Ich kann zu den Polygon-Eigenschaften der ersten Karte gehen, zur Aktions-Seite im Eigenschaftsdialog gehen und dann die Aktion zu Gehe zu Bericht setzen, den Namen des Child-Reports angeben und die Child-Report-Parameter angeben, die ich möchte Aus dem Hauptbericht. Tip 5: Ein anderes Beispiel mit Geospatial-Daten, aber mit einem benutzerdefinierten Zoom in einer Webseite Als ich den neuen geospatialen Datentyp in SQL Server 2008 lernte, habe ich eine Demo-Map-Report-Anwendung, die meine Lieblings-Restaurants in der Atlanta, Georgia Bereich . (Ich lebte in Atlanta in den frühen 1990er Jahren.) Das Ergebnis ist Abbildung 10 und Abbildung 11. Die einen SSRS-Bericht in einer Web-Seite zeigen, mit einigen sehr einfachen Schieberegler-Extender-Steuerelemente aus der ASP. NET AJAX-Bibliothek zum Zoomen und Verschieben nach Norden und Osten. Abbildung 10: SSRS-Karte mit Geodaten von Restaurants in Atlanta, Georgia. Abbildung 11: SSRS-Karte mit Zoom-Set. Darüber hinaus füllte ich die Adresstabelle mit einem Webdienst (Listing 1) und eine gespeicherte Prozedur (Listing 2). Hier sind die Schritte, die ich durchgemacht habe: Erstellt zwei SQL Server-Datenbanktabellen, um Gaststättennamen und Adresseninformationen zu speichern. Schrieb eine kleine Anwendung in C, um einen freien öffentlichen Webdienst (geocoder. us) anzurufen, der eine Adresse, Stadt und Zustand empfängt und die Breiten - und Längengrade zurückgibt (Listing 1). Es wurde eine kleine gespeicherte Prozedur (Listing 2) geschrieben, die die Breiten - und Längengrade aus dem C-Programm empfängt und die SQL 2008-Funktion STPointFromText verwendet. Diese Funktion wandelt Breiten - und Längengradkoordinaten zu einem Geographiepunkt um, den ich letztlich in einer SSRS-Karte verwenden kann. Erstellt einen Bericht (rptMapFavoriteRestaurant) mit einer Karte, die auf die Geodaten aus der Adressentabelle im ersten Schritt zeigt. Schließlich möchte ich, dass der Endbenutzer in der Lage ist, die Karte inout zu vergrößern, und auch die Map updown (northsouth) und leftright (eastwest) aus der Mitte zu verschieben. So habe ich drei Integer-Parameter erstellt (Zoom, MoveUp, MoveRight), die die Zoom-Ebene binden. Ansicht Mitte X. Und View Center Y-Eigenschaften. Beachten Sie, dass in Abbildung 10 und Abbildung 11. Wird der Bericht in einer ASP. NET-Webseite angezeigt, wobei ich ein grundlegendes Schieberegler-Extendersteuerelement (aus der ASP. NET AJAX-Bibliothek) für den Benutzer verwenden kann, um die Eigenschaften von View Center X und View Center Y anzupassen. Um auf den Bericht innerhalb einer. NET-Webseite zuzugreifen, habe ich ein neues Visual Studio 2010-Websiteprojekt erstellt, eine Instanz eines Reporting Services-Viewers in einem Webformular zusammen mit Schieberegler-Extendern für das View Center X und das View Center Y und a Web-Befehlsschaltfläche, um den Bericht auszuführen. Im Click-Ereignis der Befehlsschaltfläche verwende ich den Code in Listing 3. Das die URL für den Bericht festlegt, ein ReportParameter-Parameterlistenobjekt erstellt, die drei Parameter füllt und dann die sichtbare Eigenschaft des Berichtsobjekts auf true setzt. Der Benutzer kann nun den Bericht in einem Webbrowser anzeigen (wieder, Abbildung 10 und Abbildung 11). Abbildung 11 zeigt ein Beispiel für das Zoomen vom allgemeinen Atlanta-Bereich zu einem bestimmten Restaurant (Rays on the River) - die Zoom-Ebene ist so hoch, dass Sie fast das Menü lesen können Tip 6: Erstellen eines Pivot TableDrilldown-Bericht Abbildung 12 und Abbildung 13 zeigen Ein Report, der die Pivot-Tabelle (Matrix) von SSRS verwendet. Beide Screenshots zeigen Zeilengruppen mit der Produkthierarchie (Category-Subcategory-Product) und Spaltengruppen mit der Datumshierarchie (Fiscal Year-Fiscal Quarter), mit expandcollapse (Drilldown) - Fähigkeiten, um Details zu zeigen oder zu unterdrücken. Der Bericht enthält auch eine Dropdown-Option, um erweiterte Quartale als Prozentsatz des Jahres oder einen Prozentsatz der übergeordneten Produktebene anzuzeigen. Abbildung 12: Matrix und Aufriss: Option, jedes Viertel (Spreizelement) als Prozentsatz des Jahres anzuzeigen. Abbildung 13: Matrix und Aufriß: Option, jedes Viertel (Spreizelement) als Prozentsatz der Zeile Eltern anzuzeigen. Um diesen Bericht zu implementieren, habe ich folgendes getan: Ich habe einen neuen Bericht mit der ADWOLAP-Datenquelle erstellt. Im Report primären DataSet benutzte ich den OLAP MDX-Abfrage-Designer, um die Internet-Verkaufsmaßnahme und die folgenden Dimensionsmitglieder auszuwählen: Geschäftsjahr, Geschäftsquartal des Jahres, Produktkategorie, Produkt-Unterkategorie und Produkt. Außerdem habe ich im Query-Designer die Customer Geography-Hierarchie im Dimension Slicer am oberen Rand des Dialogfensters definiert und das Kontrollkästchen Parameter aktiviert, damit der Benutzer zur Laufzeit eine Geografiewahl erstellen kann. Zusätzlich zu dem datengebundenen Parameter habe ich auch einen ungebundenen Parameter für das Dropdown (in Abbildung 11 und Abbildung 12) erstellt, um dem Benutzer zu ermöglichen, aus den beiden Berechnungslogikoptionen für die Prozentsätze auszuwählen (entweder Jedes Quartal als eines anzeigen Jahr oder Zeige jedes Quartal als eines der Produkt-Eltern). In der Berichts-Designer, zog ich in einem Matrix-Steuerelement aus der Toolbox, und dann zog das Internet Sales Amount Maßnahme in die Matrix-Daten Abschnitt. Ich dann erstellt Zeilengruppen für die Produktkategorie, Unterkategorie und Product Dimension Mitglieder. Ich begann mit der Erstellung der Produktkategorie-Gruppe und fügte dann untergeordnete Gruppen für SubCategory und Product hinzu. Um die Drilldown-Funktion für die Zeilen zu implementieren, lud ich den Gruppeneigenschaftsdialog für die Produkt - und Produkt-SubCategory-Gruppe, ging zum Visibility-Dialogfeld, legte die Report-Funktion anfänglich auf Hide aus und dann kann die Anzeige auf die SubCategory umgeschaltet werden Und Kategorie, beziehungsweise. Ich habe die Spaltengruppen für die Dimension Mitglieder des Geschäftsjahres und des Finanzquartals ähnlich wie die Zeilengruppen erstellt und einen Spaltengruppen-Drilldown implementiert, indem ich zunächst die Spaltengruppe "Finanzquartal" verstecke und die Anzeige auf das Geschäftsjahr umschalten lässt. Bei Zeilengruppen nach Produktkategorie, Unterkategorie und Produkt ist die Ebene der Zeilengruppierung (dh Summe) Produkt. Um Zeilensummen für Unterkategorie, Kategorie und eine Gesamtsumme zu implementieren, klickte ich auf das Zeilengruppen-Dropdown für jede der drei Gruppen und nahm die Option Add TotalBefore. Wenn Sie sich fragen, warum ich ausgewählt haben, bevor statt der eher typischen After, seine nur zu vereinfachen die generierte Ausgabe, wenn der Benutzer kollabiert eine Zeile Gruppe Ebene. Ich implementiert Spalte Summen für das Geschäftsjahr und eine Gesamtsumme in der gleichen allgemeinen Weise, dass ich Zeilensummen implementiert. Ich klickte auf die Spaltengruppe dropdown für jede der beiden Spaltengruppen und nahm die Option Add TotalBefore. Alle der oben genannten Schritte waren mit SSRS 2005 möglich. Das nächste Merkmal (Implementierung eines Prozentsatzes der Summe für jede Spaltengruppe) ist jedoch nur in SSRS 2008 möglich. Um einen Prozentsatz der Summe für jeden der Steuerquartiere (wie verteilt über Das Geschäftsjahr), habe ich mit der rechten Maustaste in die Matrix, auf die Spalten-Trennzeichen für das Geschäftsjahr des Jahres, und wählte Insert Columninside Gruppe. BIDS eröffnet eine neue Spalte (innerhalb der Geschäftsquartalgruppe), wo ich einen Prozentsatz der Gesamtberechnung umsetzen kann. Um den Prozentsatz der Gesamtberechnung für alle Zeilengruppen tatsächlich zu implementieren, kann ich die Vorteile der SSRS-Funktion nutzen, um über die ReportItems-Auflistung auf bestimmte Bericht-Textfeldzellen zuzugreifen. Da die Berechnung von der Benutzerprozentsatzoption abhängt, muss ich die folgende Berechnung in den Ausdruck der neuen Zelle platzieren: Beachten Sie, dass ich dies für jede Zeilengruppe wiederholen muss. Ich muss auch die Vordergrundfarbe einstellen: Tipp 7: Erstellen von Berichten mit Cascading-Parametern Abbildung 14 zeigt ein Beispiel für einen Bericht mit einer OLAP-Datenbank, die kaskadierende Parameter verwendet. In dieser Situation generiert der Bericht täglich Umsatz für eine bestimmte Stadt und Produkt. Da die OLAP-Dimension Tausende von Produkten aufweisen kann, wird der Bericht eine Stadt eingeben und dann nur die Produkte im Vertrieb anzeigen (d. h. nur die Produkte, die für den aktuellen Kunden verkauft wurden). Ich habe den Datensatz für den Bericht erstellt, indem Sie das Datumsdimensionsattribut, den Betrag für den Internetverkauf und dann die Dimensionsschneiderparameter für das Attribut "Kundenstadt" und das Attribut "Produktdimension" auswählen. BIDS erstellt versteckte Datasets, um an die Dropdowns Stadt und Produkt zu binden. Ich kann den generierten MDX für das Produkt versteckte Datenmenge ändern und dann den folgenden MDX-Code hinzufügen: Tipp 8: Erstellen von Reports mit OLAP Abbildung 15 zeigt ein weiteres Beispiel eines SSRS-Berichts mit einer OLAP-Datenquelle. Dieser Bericht enthält ein Diagramm, in dem monatliche Verkäufe zusammen mit einem gleitenden 12-Monatsdurchschnitt (d. h. für jeden einzelnen Monat, der durchschnittliche Umsatz, der in den letzten zwölf Monaten zurückgeht) aufgeteilt wird. Viele Analysten werden ein Diagramm wie Abbildung 15, um alle Trends, wo die monatlichen Umsatz Dip unter dem Standard-Mittelpunkt. SSRS kann einfach zwei Takte in einem Diagramm mit verschiedenen Diagrammtypen (Spaltenbalken und Linie), aber ich muss die Berechnung für den gleitenden Durchschnitt zur Verfügung stellen. Im Grunde, für einen Monat (mit der MDX CurrentMember Aussage), muss ich berechnen, die durchschnittliche zurück in den letzten 12 Monaten (mit der MDX LastPeriods-Funktion). Hier ist die volle MDX-Berechnung für den Moving Average: Theres ein anderes Thema, das ich abdecken muss: ein ziemlich unangenehmes Feature, das Microsoft in SSRS 2008 eingeführt hat. Im Hauptbericht DataSet habe ich einen Parameter für die Geografiehierarchie angelegt. Als Ergebnis, SSRS automatisch eine zweite (versteckte) Datensatz mit MDX-Code, um ein Parameter-Dropdown-Liste (und das ist eine gute Sache). Mit SSRS (Visual Studio) können Sie auch den MDX-Code für diesen zweiten Dataset ändern, wenn Sie nur eine Teilmenge der Hierarchie (und das ist auch eine gute Sache) wollen. Wenn Sie jedoch standardmäßig zurückgehen und das erste Dataset ändern oder den neuen Berichtsparameter ändern, wird Visual Studio den MDX-Dataset-Code neu erstellen. Dies wird Ihre benutzerdefinierte MDX-Änderungen überschreiben - und das ist keine gute Sache Glücklicherweise Theres ein Workaround. Hinweis: Sie müssen dies tun, bevor Sie einen der generierten MDX-Code ändern. Schließen Sie den Berichtsentwurf, aber halten Sie das gesamte SSRS-Projekt offen. Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf den Bericht, und nehmen Sie dann die Option Code anzeigen. Suchen Sie für jede Instanz eines ausgeblendeten Datasets die ltQuerygt. ltDataSetgt-Kombination, und geben Sie dann Folgendes ein: Speichern Sie den Code, schließen Sie das Codefenster, und laden Sie dann den Bericht in dem Visual Studio-Designer erneut. Tipp 9: Erstellen von Berichten mit Performance-Messgeräten und Sparklines Eine der wichtigsten Verbesserungen bei SSRS 2008 waren neue Datenvisualisierungen. Man könnte denken, dies bedeutet einfach neue Charting-Funktionen. Tatsächlich gehen die neuen Visualisierungsmerkmale in SSRS 2008 weit über die neuen Charting-Funktionen hinaus. SSRS 2008 bietet neue Maßstabsberichtoptionen, die es Entwicklern ermöglichen, dashboardartige Berichte so zu erstellen, dass sie die Leistung visuell darstellen, ähnlich den KPI-artigen Berichten, die in Tools wie PerformancePoint Services gefunden werden. Die neuen Visualisierungsfunktionen in SSRS 2008 und 2008 R2 gehen weit über die neuen Charting-Funktionen hinaus. Bevor ich anfange, entstand das folgende Beispiel in Teo Lachevs herausragendem Buch, Applied Microsoft SQL Server 2008 Reporting Services. Dies ist eines von zwei SSRS-Büchern, die ich am Ende dieses Artikels empfehle. In diesem Buch zeigt Lachev, wie man eine bullet graph lineare gauge verwenden, um den Umsatz als Prozentsatz der Umsatzquote zu visualisieren. Ive hat mehrere Verbesserungen am Beispiel: Interaktive Sortierung auf Mitarbeiter-Ebene auf die verschiedenen Umsatzzahlen. Anzeige des zweiten Indikators in einer anderen Farbe basierend auf dem Umsatzanteil. Referenzieren des Prozentsatzes des Umsatzes in der Anzeige aus der ReportItems-Textfeld-Sammlung. Zeigt zwei Sparkline-Diagrammtypen (ein Liniendiagramm mit Markierungen und eine geglättete Kurvenlinie). Zeigt eine große Summe für das Jahr. Allerdings kommt das Beispiel ursprünglich aus Lachevs Buch, das ich sehr empfehlen kann. Abbildung 16 zeigt einen Bericht, der Verkaufs - und Angebotsinformationen von Vertriebsmitarbeitern zusammen mit zwei wichtigen Visualisierungen zeigt, die in SQL Server 2008 und R2 2008 neu sind. Die erste ist die Performance-Lehre (neu im Jahr 2008), und die zweite ist die Sparkline (neu in 2008 R2). Eine Sparkline ist ein stark komprimiertes Diagramm (oft ein Liniendiagramm) mit allen Etiketten, Häkchen und anderen Accoutrements, die gestrippt werden, und soll die gesamte Trendrichtung zeigen. Abbildung 16: Bericht mit Sparklines und Performance-Messgeräten. Das Performance-Gauge ähnelt einem visuellen KPI in PerformancePoint Server oder SharePoint, aber mit dem zusätzlichen Vorteil, visuell anzuzeigen, wie nah (oder weit entfernt) eine Metrik aus einem Ziel stammt. SSRS bietet eine Vielzahl unterschiedlicher Linear - und Radialmesser an. Ich wählte eine lineare Kugelgraphik. Das Performance-Gauge besteht aus den folgenden Eigenschaften, die ich angeben muss: Range-Eigenschaften: Standardmäßig enthält das Performance-Messgerät horizontale Bereiche, in denen ich mit der rechten Maustaste auf die Bereichseigenschaften klicken und die Bereichs - und Hintergrundfarbe (0-80 Licht) angeben kann Rot, 80-90 hellgelb, 90-100 hellgrün Linear Zeiger: standardmäßig gibt es zwei lineare Zeiger auf die tatsächliche Leistung in den Bereichen zu zeigen. Ich kann die wichtigsten linearen Zeiger eine horizontale Balken, dass die Mitarbeiter prozentualen Anteilskarten zu machen Profit, und ich kann definieren, die lineare Zeiger füllen Farbe: Tipp 10: Ausführen von Reports aus C Angenommen, Sie haben eine Situation, wo Sie programmgesteuert einen SSRS-Bericht zu einer PDF-Datei erstellen möchten - vielleicht nach Abschluss eines Datenbank-Job Kann einen ausgereiften Bericht ausführen und dann einen Datei-Stream erstellen, um den Bericht als PDF-Datei darzustellen. Tip 11: SSRS 2008 R2 Potpourri SSRS 2008 R2 enthält eine Reihe von verschiedenen Verbesserungen, die Ive besonders wertvoll fand. Während nicht eine vollständige Liste hier Sind einige von denen, die ich verwendet habe: Sie können jetzt Seitenumbrüche auf der Berichtgruppenebene erstellen. SSRS 2008 R2 verfügt nun zusätzlich zu einer Gesamt-Seite X von Y über eine Gruppen-Seite X von Y. Wenn Sie auf das Eigenschaftenfenster für jede Gruppe zugreifen, gibt es neue PageBreak-Eigenschaften (BreakLocation, ResetPageNumber usw.), die Sie verwenden können Set. Wenn Sie einen Bericht erstellen, der auf Gruppenebene repaginiert werden muss, entfällt diese neue Funktion, um die Paginierung manuell zu berechnen. Darüber hinaus können Sie eine Aggregation auf eine Seite durchführen - dies ist eine sehr willkommene Funktion für diejenigen, die bestimmte Finanzberichte erstellen SharePoint-Listen ist jetzt viel einfacher-Theres keine Notwendigkeit, die. ASMX nicht mehr verweisen. Sie können das Ausgabe-Exportformat zur Laufzeit mit der neuen globalen GlobalsRenderFormat-Variablen referenzieren. Entwickler, die Werte in Report-DataSets verknüpfen möchten, werden mit diesem zufrieden sein - das DataSet-Objekt unterstützt nun mehrere LOOKUP-Funktionen, um einen JOIN zwischen DataSets zu simulieren. Beim Exportieren in Excel können Sie die Namen der Tabellen des Arbeitsblatts angeben. Sie können nun einen Berichtsausdruck als Aggregat eines Aggregats definieren. Tip 12: Bakers Dozen Spotlight: Datengesteuerte Abonnements Viele SSRS-Unternehmensumgebungen erstellen Berichte über einen Zeitplan (typischerweise über Nacht) und liefern den generierten Berichtsinhalt entweder per E-Mail, Dateifreigabe oder einer SharePoint-Dokumentbibliothek. Dies hat sich zu einem sehr beliebten Methode für die Bereitstellung von SSRS-Ausgabe an die Endbenutzer, vor allem, wenn es eine prädiktive Natur, wie die Menschen Berichte laufen. Dies kann auch die Gesamtleistung und Skalierbarkeit in bestimmten Daten-Warehouse-Business Intelligence-Umgebungen verbessern, in denen Benutzer ansonsten große komplizierte Berichte während des Tages ausführen würden. Berichtabonnements können die Gesamtleistung und die Skalierbarkeit in bestimmten Data Warehouse-Business Intelligence-Umgebungen verbessern, in denen Benutzer ansonsten große komplizierte Berichte während des Tages ausführen würden. Ein SSRS-Abonnement ist genau wie jedes Standard-Abonnement - Sie melden sich für bestimmte Inhalte an und Sie haben den Inhalt an Ihre Haustür geliefert. Im Kontext von SSRS bedeutet das, dass Sie SSRS-Inhalte an einen E-Mail-Posteingang, an einen freigegebenen Netzwerkordner oder an eine SharePoint-Dokumentbibliothek übermitteln können. SSRS bietet viele serverseitige Optionen zum Definieren von Berichtscaches, Snapshots und Abonnements. Im gehend, auf eine spezifische (und wichtige) Eigenschaft zu konzentrieren: datengetriebene Abonnements. Im gehend, einen Report zu nehmen, der für verschiedene Produktkategorien laufen gelassen werden könnte, einen Zeitplan definieren, um den Report für verschiedene Kategorien auszuführen, und dann einen liefern Typ einer SharePoint Dokumentenbibliothek spezifizieren. Ein möglicher geschäftlicher Kontext würde hier einen Umsatzbericht für jeden einzelnen Brandcategory Manager in einem Unternehmen generieren: Ich könnte auch ein Abonnement für regionmarket Manager oder einen anderen Business Workflow generieren. Um zu starten, erstellen wir eine Tabelle in einer relationalen SQL Server-Datenbank (Listing 5), die den Inhalt für ein datengetriebenes Abonnement definiert. Das Konzept der Daten-driven sollte offensichtlich sein, aber nur für den Fall, Im die Speicherung in einer Tabelle die Informationen für ein Abonnement, dass Id sonst müssen SSRS manuell zur Verfügung stellen. Ein datengetriebenes Abonnement ist ideal, wenn ich eine große Anzahl von Abonnementdefinitionen habe, die sich auch mit der Zeit ändern könnten. Im Falle von Listing 5. Ive definiert den Bericht zum Ausführen (rptSalesByBrand, einen sehr einfachen Verkaufsbericht), den Namen der Ziel-Ausgabedatei und die SharePoint-Dokumentbibliothek, das Renderformat (statisches HTML, obwohl es ein PDF ebenso einfach sein kann) und den Parametertyp Für die Reportinstanz (da ich eine separate Ausgabe für Fahrräder, Zubehör und Kleidung wünsche). Da dieser spezifische Bericht ein OLAP-Bericht ist, muss ich die Parameterschlüssel in Form von MDXOLAP Dimension Member Notation (Product. Category. amp1) ausdrücken. Wenn ich einen Bericht für eine relationale Datenbank erstellt hatte, muss Id wahrscheinlich den Surrogate-Integer-Schlüssel für den Parameter angeben. In vielen Fällen werden Entwickler eine spezielle Benutzeroberfläche erstellen, um diese Tabellen aus menügeführten Selektionen zu füllen. Beachten Sie auch die Option für AutoIncrement - dies erzeugt eine eindeutige Ausgabedatei für jede Ausführung des Reportabonnements. Der nächste Schritt besteht darin, einen gemeinsamen Ausführungsplan in SharePoint zu erstellen. In der SharePoint-Websitesammlung, in der sich der Bericht befindet, möchten Sie zu den Websiteaktionen und dann zu den Standorteinstellungen wechseln und einen freigegebenen Zeitplan definieren. Dies ist eine Schnittstelle, die auf dem SQL Server-Agenten ausgeführt wird, um einen Job mit einer bestimmten Ausführungsfrequenz zu erstellen (z. B. jeden Montag um Mitternacht, alle zwei Wochen usw.) (Über SharePoint) über die Subskriptionstabelle aus Listing 5. Leider gibt es ein Problem. Standardmäßig verwenden Berichtsdatenquellen die Windows-Authentifizierung, die SSRS nicht akzeptieren wird, wenn ein Bericht unbeaufsichtigt in einem Zeitplan ausgeführt wird. Also muss ich auf die Website-Sammlung Ordner, der die bereitgestellten Datenquellen enthält öffnen, öffnen Sie die Datenquelle (die im Grunde eine Verbindungszeichenfolge ist), und dann die Option zum Speichern von Anmeldeinformationen sicher auf dem Server für unbeaufsichtigte Berichtsausführung. Dieses Konto muss ein Domänenkonto mit ausreichenden Rechten für die Ausführung des Berichts sein und auf die Ausgabe-SharePoint-Dokumentbibliothek zugreifen - ein Dienstkonto wird normalerweise nicht stark genug sein. (Ein IT-Manager oder DBA könnte für diese Situationen ein spezielles nicht-menschliches Domänenkonto erstellen.) Sobald ich mich um die Datenquelle gekümmert habe, kann ich zum bereitgestellten Bericht gehen, auf das Dropdown-Menü der SharePoint-Dokumentdatei klicken und dann die Option hinzufügen Ein Abonnement (und geben Sie dann ein datengetriebenes Abonnement an). SharePoint fordert mich dann für die Datenquelle auf, die die Subskriptionstabelle (aus Listing 5) enthält, zusammen mit bestimmten Spalten, die SSRS erwartet (und wie sie den Spalten in Listing 5 zugeordnet sind) und den Namen des gemeinsam genutzten Zeitplans, der ausgeführt werden soll Das Abonnement. Abbildung 17 zeigt die Ausgabe in der SharePoint-Dokumentbibliothek, wenn der Zeitplan ausgeführt wird. Manchmal möchten DBAs die SQL Server-Agent-Protokolltabellen abfragen, um den Verlauf eines Zeitplans zu sehen. Listing 6 zeigt eine SQL-Abfrage sowohl für die ReportServer-Systemtabellen als auch für die SQL Server-Agent-Systemtabellen zum Anzeigen des Verlaufs eines Zeitplans. Tipp 13: Unterberichte Gelegentlich wird ein Bericht mehrere Detailstufen erfordern (d. h. Daten aus mehreren 1-zu-vielen Beziehungen). Zum Beispiel könnte ich eine Liste der Produkte und ihre Verkäufe über den Einzelhandelskanal (zusammengefasst durch Verkaufsgebiet) sowie Verkäufe durch den Wiederverkäufer Kanal (zusammengefasst vom Verkäufer) zeigen müssen. Ein bestimmtes Produkt kann einen Umsatz in einem oder beiden Kanälen haben. Darüber hinaus möchte ich zeigen, jeden Satz von Umsatz separat. Abbildung 18 zeigt ein grundlegendes Beispiel für einen Bericht mit mehreren Detailebenen (Unterberichte). Der Hauptbericht ist rptProductSubReportExample (das die Hauptproduktauflistung darstellt), und die beiden Unterberichte sind rptSubProductInternetSales (die Internetverkäufe nach Gebiet für jedes Produkt zeigt) und rptSubProductResellerSales (das Reseller Sales durch Verkäufer für jedes Produkt darstellt). Ich baute jeden der beiden Unterberichte, indem ich einen Standard-SSRS-Report schrieb, aber auch einen Berichtsparameter für eine einzelne Produkt-ID definierte. So jedes Mal, wenn ich eines der Unterberichte unabhängig ausführen, fordert SSRS mich für einen Produkt-ID-Parameter. However, in the main report, after I build a basic layout for a product listing, I can add a reference to a subreport from the toolbox. In the subreport properties, SSRS (BIDS) provides a parameters page where I can map the ProductID value from the main report dataset to the subreport parameter. Book Recommendations I highly recommend the following two books. If you work with Reporting Services on a regular basis, these two books should be considered required reading: Applied Microsoft SQL Server 2008 Reporting Services by Teo Lachev (published by Prologika). I also recommend Teo Lachevs blog and his other books. Microsoft SQL Server Reporting Recipes for Designing Expert Reports by Paul Turley and Robert M. Buckner. I also have additional SSRS book recommendations on my website (KevinSGoff. net ), but these are the absolute must-have books. Article Project File You can find the entire source code and project file on my website at KevinSGoff. net. in the download area. SQL Saturday and SharePoint Saturday events If you werent aware of this, there are SQLSaturday and SharePoint Saturday events all over North America, as well as Australia, the U. K. and New Zealand. These are free events that offer much of the same content that youll find at commerical conferences. For more information, check out sqlsaturday and sharepointsaturday. org. I often speak on SQL Server and Business Intelligence topics at these events, mainly in the Mid-Atlantic region. If you work with either SQL Server or SharePoint, I definitely recommend you check out these events Listing 1: Code to call a public Web Service for geospatial data Listing 2: Stored procedure to write address and LatLong data Listing 3: Accessing the map from a. NET web page Listing 4: Generating a report to a PDF Listing 5: Creating a data-driven table for SSRS subscriptions Listing 6: Querying a subscription table Kevin S GoffIntroduction With the release of SQL Server 2016 Service Pack 1 the In-Memory ColumnStore technology is now also available in the Standard, Web and even Express and LocalDB Editions. Besides the benefit of only 1 codebase to maintain, this change in policy will also become a clear disk storage space saver due to its high data de-duplication and compression ratios and, last but not least, its also a serious ad-hoc query performance booster The main difference between the SQL flavors is how much CPU power and memory is allocated to tasks like (re-)building of the Clustered ColumnStore Index. For example: with the Standard Edition a single core (max. 100 Processor time of the sqlservr process) is being used and querying a CCI happens with a maximum of 2 CPUs (MAXDOP2), versus leveraging all available CPUs in Enterprise Edition. Building a Clustered ColumnStore Index (CCI) with SQL Server 2016 Standard Edition: Building a CCI with all 4 available cores with SQL Server 2016 Enterprise Edition: The base timings for loading 7.2 GB 60 Million rows from a single TPCH lineItem files doesnt show much of a difference between the flavors when Bulk inserting the data direct into either a heap table or a table with a CCI the difference become clear when we compare the time needed to build a CCI on a heap table or rebuilding a CCI: To summarize, the absolute fastest way to have data available in a table with a Clustered ColumnStore Index is to: load into heap build the CCI afterwards with SQL 2016 Ent. Ed. Direct load into CCI For tables with a Clustered ColumnStore Index already created make sure that you stream directly into Compressed Row Groups to maximize throughput. In order to do so, the Insert batch size should be equal or larger than 100K Rows (102400 to be precise). Smaller batches will be written into compressed delta store tables first before being tuple moved into its final compressed Row Group segments, which means SQL Server has to touch the data twice: There are various options to load data and we will go over the most frequently used ones, like the Bulk Insert command, BCP and SSIS. Lets see what is needed to get best performance and how to monitor 1) T-SQL Bulk Insert Let us start with a the BULK INSERT command: Checking Data Load Progress To check the Number of Rows that already got loaded into the CCI, even when the Table Lock option is being used, query a new dmv called sys. dmdbcolumnstorerowgroupphysicalstats: This DMV will also reveal the possible Resource Group states in more detail while loading. There are four possible Row Group states while loading data. When you see the state INVISBILE like in the picture below means that data is being compressed into a RowGroup. 0: INVISIBLE ( RowGroup is in the process of being built from data in the delta store) 1: OPEN160160160160160160160 ( RowGroup is accepting new records) 2: CLOSED160160160 ( RowGroup is filled but not yet compressed by the tuple mover process) 3: COMPRESSED160 ( RowGroup is filled and compressed). 4 TOMBSTONE160 ( RowGroup is ready to be garbage collected and removed) By specifying the Batch Size with a value of 102400 or higher you will achieve maximum performance and data will get streamed and directly compressed into its final RG this behavior will show up as COMPRESSED. You can also check a DMV that got introduced with SQL2014 to check on the RowGroup State, which is the sys. columnstorerowgroups DMV: Test Result Bulk inserting data into a table with CCI via the Bulk Insert command can slightly be improved by adding the Batchsize102400 and TABLOCK options. This brings an 8 improvement in throughput. 2) BCP. exe The BCP utility is still being used quite heavily in many production environments so worth to check on it quickly: by default, the BCP sents 1000 rows at the time to SQL Server. The time it takes to load 7.2GB of data via BCP: 530 seconds. or160 113K rowssec The RowGroup state shows NVISIBLE which means that with the default settings the Delta Store is being used. To make sure the BCP command streams the data directly into the compressed RGs you have to add the batchsize b option with a value of at least 102400. I ran various tests with larger batch sizes: up to 1048576, but the 102400 gave best me the result. BCP DB. dbo. LINEITEMCCI in F:TPCHlineitem. tbl S. - c - T - tquotquot - b 102400 h tablock The RowGroup state now shows COMPRESSED which means we bypass the Delta Store and data streams into the compressed RGs: Result: the BCP completed in 457 seconds, or 133K rows per second or During testing I noticed that the default SSIS 2016 settings use memory buffer sizes that can also potentially limit the batch size to become less than 100K Rows. In the example below you see that data landed in delta stores: the RG states are Closed and the deltastorehobtid fields are populated, which means the delta stores are leveraged. This was the moment to reach out and check with to my colleagues who luckily have noticed this to and a solution is already there (see: Data Flow Buffer Auto Sizing capability benefits data loading into CCI ). To fully leverage the CCI streaming capabilities you have to increase the Default memory BufferSize amp MaxRows settings: Change the these into 10x larger values: 8211 DefaultMaxBufferRows from 10000 into 1024000 and the most important one: 8211 DefaultBufferSize from 10485760 into 104857600 . Note: the new AutoAdjustBufferSize setting should be set to True when you load very wide Rows of data. Change also the values for the Destination adapter: 8211 Rows per Batch:160 from none into 102400 8211 Maximum Insert commit size: from 2147483647 into 102400 The feature parity introduced with SQL Server 2016 SP1 opens up a whole new range of possibilities to benefit from Hopefully the walkthroughs above help you to max out Bulk Insert, BCP and SSIS performance when loading data into a Clustered ColumnStore Index What will be the absolute fastest way to load data from a flatfile into a table within SQL Server 2016 A lot has changed since my initial post on this topic many years ago, ike the introduction of In-memory optimized tables and Updateable Columnstore table indexes. Also the list of data transport vehicles to choose from is growing: besides BCP, the T-SQL Bulk Insert command, SSIS as ETL tool and PowerShell there are some new ones added, like PolyBase, External R Script or ADF. In this post I will start with the checking how much faster the new durable amp non-durable In-memory tables are Setting the Baseline For these tests Im using an Azure DS4V2 Standard VM with 8 cores28 GB of RAM and 2 HDD Volumes with host caching RW enabled. (Both Luns provide 275 MBsec RW throughput although the GUI states a limit of 60MBsec). I generated a single 60 Million row7.2 Gigabyte TPCH lineitem flat file as data to load. As baseline to for use for comparison we will use the time it takes to load the file into a Heap table: This regular Bulk Insert command completes within 7 minutes with an average of 143K rowssec. Enabling the test database for Memory optimized tables The (in SQL20142016 Enterprise amp developer Edition ) introduced in-memory tables are designed for very fast OLTP with many small transactions and high concurrency, which is a completely different type of workload as bulk inserting but, just out of curiositylets give it a try There are 2 types of in-memory tables: durable and non-durable tables. The durable ones will persist data on disk, the non-durable ones wont. To enable this option we have to do some housekeeping and assign a fast disk volume for hosting these files. First, alter the database to enable the Contains MEMORYOPTIMIZEDDATA option followed by adding a File location and Filegroup that will contain the Memory-Optimized tables: The third thing to do is to add a separate memory pool to the SQL Server instance so it can keep all the data we will load into in-memory tables separate from its default memory pool: Binding a database to a memory pool The steps to define a separate memory pool and to bind a database to it are listed below: Extra memory pools are managed via the SQL Resource Governor. The 4th and last step is to bind the test database to the new memory Pool with the sys. spxtpbinddbresourcepool command.160 In order for the binding to become effective we have to take the database offline and bring it back online. Once bound we can dynamically change the amount of memory assigned to its pool via the ALTER RESOURCE POOL PoolHk WITH (MAXMEMORYPERCENT 80 ) command. Bulk Insert into Durable In-Memory table Now we are all set with the In-memory option enabled, we can create an in-memory table. Every memory-optimized table must have at least one index (either a Range - or Hash index ) which are completely (re-)composed in memory and are never stored on disk. A durable table must have a declared primary key, which could then be supported by the required index. To support a primary key I added an extra rownumber ROWID1 column to the table: Specifying a batch size of 1 (up to 5) Million rows to the bulk insert command helps to persist data to disk while the bulk insert is ongoing (instead of saving it all at the end) doing so minimizes memory pressure on the memory pool PookHK we created. The data load into the durable In-Memory table completes in 5 minutes 28 seconds, or 183K Rowssec. Thats an okay time but not that much faster than our baseline. Looking at the sys. dmoswaitstats shows that the no.1 waitstat is IMPPROVIOWAIT which occurs when SQL Server waits for a bulk load IO to finish. Looking at the Performance counter Bulk Copy Rowssec and Disk Write Bytessec shows the flushing to disk spikes of 275 MBsec once a batch got in (the green spikes). That is the maximum of what the disk can deliver but doesnt explain it all. Given the minor gain, we will park this one for future investigation. Monitoring the Memory Pool Via the sys. dmresourcegovernorresourcepools dmv can we check if our in-memory table leverages the newly created PoolHK memory Pool: The output shows this is the case the 7.2GB ( some extra for the Rowid) got uncompressed loaded into the memory poolHk pool: If you try to load more data than you have memory available to the pool you will get an proper message like this one: The statement has been terminated. Msg 701, Level 17, State 103, Line 5 There is insufficient system memory in resource pool 8216PookHK to run this query. To look one level deeper at memory space allocation on a per In-memory table basis you can run the following query (taken from the SQL Server In-Memory OLTP Internals for SQL Server 2016 document ): The data we just loaded is stored as a varheap structure with a hash index: So far so good Now lets move on and check out how staging in a non-durable table performs Bulk Insert into Non-Durable In-Memory table For IMND tables we do not need a Primary key so we just add and Non-clustered Hash index and set DURABILITY SCHEMAONLY. The Bulk insert Data loading into the non-durable table completes within 3 minutes with a throughput of 335K rowssec (vs 7 minutes) This is 2.3x faster then inserting into a heap table. For the staging of data this definitely a quick win SSIS Single Bulk Insert into a Non-Durable table Traditionally SSIS is the fastest way to load a file quickly into SQL Server because SSIS will handle all the data pre-processing so the SQL Server engine can spend its CPU ticks on persisting the data to disk. Will this still be the case when inserting the data into a non-durable table Below a summary of the tests I ran with SSIS for this post: the SSIS Fastparse option and160 the DefaultBufferMaxRows and DefaultBufferSize settings are the main performance boosters. Also the Native OLE DB (SQLOLEDB.1) provider performs slightly better than the SQL Native Client (SQLNCLI11.1). When you run SSIS and SQL Server side by side, increasing the network packet size isnt needed.160160 Net result: a basic SSIS package that reads a flat file source and writes the data out directly to the Non-Durable table via an OLE DB destination performs similar as the Bulk Insert command into a IMND table: the 60 Million rows are loaded in 2minutes 59seconds or 335K rowssec, identical to the Bulk insert command. SSIS with Balanced Data Distributor But wait8230160 the in-memory tables are designed to work lock amp latch free so this means that we can load data also via multiple streams That is easy to achieve with SSIS the Balanced Data Distributor will bring just that (the BDD is listed in the Common section of the SSIS Toolbox) Adding the BDD component and inserting the data into the same Non-durable table with 3 streams provides the best throughput: we are now up to 526000 Rowssec Looking at this very flat line, with only 160 of CPU time used by SQLServer, it seems we are hitting some bottleneck: I quickly tried to be creative by leveraging the modulo function and added 2 more data flows within the package (each processing 13 of the data)160 but it that isnt improving much (1 min52sec) so a great topic to investigate for a future post160160 The In-Memory Non-Durable table option brings some serious performance improvement for staging of data loading data 1.5x faster with a regular Bulk insert and up to 3.6x times faster with SSIS. This option, primarily designed to speed up OLTP, can also make a huge difference to shrink your batch window quickly (To be continued)

Comments

Popular posts from this blog

Ist Binary Options Trading Worth It

Binäre Optionen - eine reine und einfache Art zu handeln oder einfach ein SCAM Eine unvoreingenommene Anleitung für binäre Optionen - Aufdeckung von Betrug und Tatsachen, die Sie jetzt brauchen. Was sind binäre Optionen Binäre Optionen für Dummies: Eine binäre Option ist eine Option, deren Auszahlung entweder eine feste Menge oder Null ist. Zum Beispiel könnte es eine binäre Option, die 200, wenn ein Hurrikan trifft Miami vor einem bestimmten Datum und Null sonst. Auch als digitale Option. Binäre Optionen unterscheiden sich von konventionellen Optionen in signifikanter Weise. Eine binäre Option ist eine Art von Optionskontrakt, in dem die Auszahlung ganz auf das Ergebnis eines yesno-Vorschlags abhängt. Der yesno-Vorschlag bezieht sich typischerweise darauf, ob der Preis eines bestimmten Vermögenswertes, der der binären Option zugrunde liegt, über einen bestimmten Betrag steigt oder unterschreitet. Beispielsweise könnte der mit der binären Option verbundene yesno-Vorschlag etwas so einf...

Inside Pin Bar Strategie

Pin-Bar und Innen-Bar Combo-Muster Eine Pin-Bar ist eine Preis-Aktion-Strategie, die Ablehnung des Preises zeigt und zeigt eine potenzielle Umkehr bevorsteht. Eine innere Bar ist eine Preis-Aktion-Strategie, die Konsolidierung zeigt und dass ein potenzieller Ausbruch bevorsteht. Diese beiden Signale, wenn kombiniert, ergeben entweder ein Pin-Bar-Combo-Muster oder ein inneres Bar-Pin-Bar-Combo-Muster. Pin bar und innen bar Kombination Muster sind einige der stärksten Preis Aktion Signale, die Sie begegnen werden. Es gibt zwei Haupt-Combo-Muster sollten Sie auf das Lernen zu konzentrieren. 1) Die Pin-Bar im Bar-Combo, besteht aus einer Pin-Bar, die eine kleine innere Bar in Richtung der Nase des Stiftes verbraucht (die Stifte realen Körper). 2) Die innere Pin Bar Combo-Setup ist einfach eine Pin-Bar, die auch eine innere Bar. Mit anderen Worten, eine Stange, die innerhalb des Bereichs eines äußeren Stabes oder einer Mutterstange ist. Wie man die Pin-Bar im Inneren Bar-Combo-Muster Wenn S...

Teknik Forex Sebenar Free Pdf Download

Die Essenz ist sehr inhaltlich fokussiert, leserfreundlich. Modern und sauber, Blogger-Thema. Es ist 100 responsive bedeutet, dass es in verschiedene Geräte unterschiedlicher Größe passen. Es unterstützt alle Arten von Post-Format. Es ist einfach und it8217s elegant. Mit The Essence können Sie einen schönen persönlichen Blog oder Mode-Blog. Installieren und Anpassen dieses Themas ist sehr einfach. Alle erforderlichen Informationen sind in der Dokumentation enthalten. Jetzt herunterladen Wir bieten viele Vorlagen kostenlos, aber wenn Sie etwas einzigartiges für Ihr Blog wollen dann lassen Sie uns ein einzigartiges Design für Ihr Blog, Sagen Sie uns einfach Ihre Bedürfnisse und wir konvertieren Ihr Traum-Design in die Realität. Kontakt Jetzt Sora Ads ist eine perfekte Anzeige optimierte Blogger-Thema für AdSense-Nutzer und Affiliate-Vermarkter, um hohe Einnahmen durch Werbung durch Erhöhung der Klickrate (CTR) zu bekommen. Diese hervorragende AdSense-fertige Vorlage hat sehr beeindrucken...