Posts

Showing posts from July, 2010

Überlegungen über den Aufbau eines Repositorys in einer Business Intelligence Umgebung

Image
Ein kürzlich geführtes Gespräch mit einem Community Kollegen über das Thema Repositorys in Microsoft Business Intelligence Umgebungen, brachte mich auf die Idee meine Überlegungen und Erfahrungen zu dem Thema hier mal kurz zu skizzieren. Meine Definition eines Repositorys ist eine zentrale Sammlung von Metadaten, Versionsständen und Protokollen. Ein solches Repository gehört meiner Meinung nach primär zu dem Themenkomplex Data Warehouse. Das Versprechen einer Business Intelligence Lösung bzw. eines Data Warehouses ist u. a. die Bereitstellung der sogenannten “einzigen Wahrheit” in der Organisation. Das ist zum Beispiel durch den Einsatz von OLAP Cubes technisches relativ leicht durchzusetzen. Alle weiteren Frontend Werkzeuge (zum Beispiel Reporting Services oder Excel) greifen auf diese Datenquellen zu. Was passiert aber nun, wenn sich Strukturen des Data Warehouses und/oder der OLAP Cubes verändern? Diese Veränderungen ziehen sich in der Regel bis zu den Frontends durch und haben

ADOMD.NET und die CellSet Klasse

Image
So, als eine Ergänzung zu meinen letzten Einträgen zum Thema ADOMD.NET, habe ich heute ein paar weitere Details zur CellSet Klasse. Ich hatte ja bereits gezeigt, wie Ihr generell mittels ADOMD.NET und der CellSet Klasse auf Daten eines Cube zugreifen könnt. Dazu hatte ich auch ein paar Eigenschaften und Methoden der CellSet Klasse erläutert. Hier nun ein Beispiel für den Zugriff auf ein Resultset innerhalb eines CellSets. Hier nochmal ein Stück Code, welches sich mit einem Analysis Services Cube verbindet und eine MDX Query ausführt. AdomdConnection mdcon = new AdomdConnection(“<ConnectionString>”); mdcon.Open(); AdomdCommand cmd = mdcon.CreateCommand(); cmd.CommandText = “Query”; CellSet cs = cmd.ExecuteCellSet(); mdcon.Close(); Entscheidend für uns ist hier das CellSet cs, welches wir nun ein wenig mehr “auseinandernehmen” werden! Dafür brauchen wir aber auch die MDX Query: SELECT {[Date].[Calendar].[Calendar Year].&[2003], [Dat

Analysis Services Metadata mittels ADOMD.NET auslesen

Image
Ok, mein Blogartikel über ADOMD.NET war ja auch nur als Einstieg und Anregung gedacht! Aber es kamen nun die Wünsche nach Beispielen und Demos. Daher heute mal ein wenig Democode inkl. Download . Ich hoffe, dass ich in den nächsten Tagen noch mehr dazu beisteuern kann. Also, ich habe ein kleines Beispiel in WinForms gebaut, welches die Metadaten aus einer Verbindung mit den Analysis Services ausliest und in einem TreeView darstellt. Das ist jetzt bewusst keine fertige BI Anwendung, sondern soll als Beispiel für den Zugriff auf besagte Metadaten dienen. Wichtig ist, dass Ihr auf Eurem Rechner eine ADOMD.NET DLL habt. Sprich Ihr solltet ADOMD.NET installiert haben! Der eigentliche Code ist recht “einfach” gehalten und hält sich mit wenig auf. Es geht hier ja auch um ein erstes Demo.             int nCubes = 0;             tvMetadata.Nodes.Clear();             AdomdConnection mdcon = new AdomdConnection(tbConnString.Text);             mdcon.Open();             forea

Microsoft SQL Server 2008 R2 Update for Developers Training Course

Es gibt auf Basis des SQL Server 2008 R2 Update for Developers Training Kit nun auch noch auf Channel9 einen passenden Kurs in Form von Webcasts! Also, hier geht es zum Microsoft SQL Server 2008 R2 Update for Developers Training Course ! :-)

PivotViewer Extension for Reporting Services CTP1

Image
Vielleicht erinnert Ihr Euch noch an Pivot? Ich hatte schon mal kurz drüber geschrieben. Dazu ist mittlerweile einiges passiert. Es gibt nun ein PivotViewer Silverlight Control als Download , welches Ihr auf Euren Seiten einsetzen könnt! Aber was noch cooler wird, ist die Tatsache, dass Microsoft nun für den SharePoint 2010 ebenfalls eine Erweiterung, welche auf dem Control basiert, als CTP auf der Straße. Diese wird zwar als Designstudie bezeichnet, aber das wirkt schon durchdacht für den Moment. Den Download der “PivotViewer Extension for Reporting Services CTP1” gibt es hier: http://www.microsoft.com/downloads/details.aspx?displaylang=en&FamilyID=d31f609d-a353-41ad-a1a4-f81456e3a6c4 Den Blog zum Projekt und einer sehr nützlichen Anleitung für die Installation hier: http://petcu40.blogspot.com/2010/07/pivotviewer-extension-for-reporting.html

Erste Schritte mit ADOMD.NET

In den letzten Jahren habe ich eine ganze Reihe von Vorträgen über den Zugriff auf Analysis Services Cubes mittels .net Code und ADOMD.NET gehalten. Da die Funktionsweise eigentlich äußert einfach ist, habe ich aber bisher wenig bis wohl gar nichts dazu geschrieben. Das möchte ich nun nachholen, da sich hier bei mir die Nachfragen langsam häufen! :-) Also, was ist ADOMD.NET eigentlich, was kann das und kostet das was? ADOMD.NET ist ein sogenannter Data Provider von Microsoft für das .net Framework und bietet u. a. aus meiner .net Anwendung heraus die Möglichkeit auf SQL Server Analysis Services Cubes zuzugreifen. Wichtig ist dabei zu verstehen, dass ADOMD.NET kein fertiges BI Tool oder Control ist, welches ich nur noch einbinden muss und damit eine Art Excel-BI-Grid-GUI in meiner Anwendung habe. ADOMD.NET bietet mir im Code alle Möglichkeiten für den Zugriff auf die Daten, aber ich muss diese selbst kreativ nutzen . Wäre es dann nicht einfacher sich nicht gleich was Fertiges zu kau

Warum sollten Tabellenhinweise (table hints) vermieden werden?

Image
Immer wieder sehe ich bei der Analyse von Anwendungen, dass mit sogenannten Tabellenhinweisen (table hints) gearbeitet wird. Meist ist die Begründung, dass der “doofe” SQL Server einfach nicht verstanden hat, dass es doch extra einen nicht-gruppierten Index für die Abfrage gibt. Den hat der doch einfach ignoriert! Und von anderen Entwicklungsumgebungen sei man ja schließlich auch gewöhnt die Verwendung von Indizes explizit anzugeben. Wo ist also das Problem? Nun ja, das Problem ist, dass die Erfahrung gezeigt hat, dass wenn soweit alles in Ordnung ist, der SQL Server ziemlich genau weiß, was er da so macht bei der Aufbereitung von Abfragen. Und wenn er einen Index nicht nutzen möchte, dann hat er in der Regel einen verdammt guten Grund dafür. Dummerweise wird dieser nicht angeben. Der häufigste Grund dafür, dass der SQL Server einen Index nicht verwendet, ist die Vermeidung von unnötiger Arbeit. Der SQL Server kann nämlich auf Basis der sogenannten Statistiken ziemlich genau abschä

Reifegradmodelle im Projektmanagement

Mich erreichte die Nachfrage, was ich denn mit Reifegradmodellen im Projektmanagement meinen würde. In einem Post hatte ich den Begriff kurz fallengelassen als Hinweis auf einen möglichen Projektverlauf im Rahmen eines Performance Tunings . Oft beschreiben Reifegradmodelle themenbezogen die möglichen Entwicklungsschritte einer ganzen Organisation. Es gibt dabei Modelle für ganz unterschiedliche Herausforderungen: IT-Infrastruktur & Security, Business Intelligence, Projektmanagement usw. Dabei wird in der Regel als Orientierung festgelegt, wo die Organisation im Referenzmodell gerade steht, was die nächste Stufe ist und durch welche Merkmale diese zu erreichen wäre. Das Reifegradmodell fasst dabei durch sein “Modell” die einzelnen “Reifegrade” der notwendigen Prozesse innerhalb der Organisation zusammen. Es geht mir nun darum, wie große, unhandliche und komplexere Projekte “eingefangen” werden können und damit das Risiko eines Scheiterns bereits während der Planung minimiert wer

Size matters! Woher bekomme ich größere Testdatenbanken?

Häufig bekomme ich zu hören, dass die Adventure Works Datenbank ja zu klein sei, um mal wirklich Performance Tuning Szenarios im stillen Kämmerlein zu testen. Ok, zuerst natürlich die Anmerkung, dass wohl die wenigsten in besagtem Kämmerlein auch eine entsprechende Hardware haben, um “echte” Erlebnisse zu haben und damit Erfahrung zu sammeln. Sowas bekommt Ihr nur im Feld! Aber gut, ich gebe gern zu, dass die Adventure Works Umgebung tatsächlich ein wenig schlank ist. Daher hier ein paar Tipps wie Ihr an wesentlich mehr Daten kommen könnt! Erst mal die Frage an den Hersteller Microsoft, was dieser uns so bietet? Und siehe da, es gibt eine wesentlich größere Datenbank: Microsoft Contoso BI-Demodatensatz für die Einzelhandelsbranche Woher kommen die denn nun? Das ist u. a. das Futter für PowerPivot Demos! :-) Hey, wer sagt da jetzt, dass ihm der Download zu groß ist? Ihr wolltet doch mehr… Ach so, es sollen mehr Datensätze aus dem Nix entstehen und zwar genau jetzt! Auch da

Indizes? Haben wir doch schon längst! Lassen Sie uns nun bitte zu den echten Tuning Methoden kommen.

Das ist häufig eine spontane Antwort, welche ich auf den Vorschlag bekomme eine Anwendung mittel Indizes zu optimieren, wenn so das Gröbste aus dem Weg ist. Sowohl Entwickler als auch Administratoren scheint durchaus bewusst zu sein, dass Indizes und das Laufzeitverhalten einer Datenbank durchaus zusammenhängen (können). Aber ihnen scheint oft nicht die mögliche Tiefe des Themas bewusst zu sein, denn sie suchen häufig den wahren heiligen Gral der Performance Optimierung. Indizes haben sie schon, also muss es da draußen noch etwas anderes geben. Ist doch logisch, oder? :-) Mit diesem Post möchte ich den Leser, welcher sich angesprochen fühlt, dafür sensibilisieren, dass Indizierung viel mehr zu bieten hat, als er sich für den Moment vielleichtnvorstellen kann. Es hat sicherlich auch etwas damit zu tun, welche Rolle Indizes früher gespielt haben. Unter dbase III+ waren Indizes zum Beispiel eigentlich nichts anderes als nur zusätzliche Sortierreihenfolgen, welche auch für eine schne

GROUP BY mit ROLLUP

Image
Anbei ein Thema, welches mir neulich erst wieder aufs Flipchart kam. Wie errechne ich in einem gruppierten Resultset möglichst einfach Zwischensummen? Nun ja, da sieht der Berater draußen schon recht spannende Konzepte in denen diverse UNION ALL eine entscheidende Rolle spielen! Dabei gibt es dafür in der Abfragesprache SQL extra ein Argument für diese Herausforderung. Kurze Anmerkung dazu, wenn Ihr zum Beispiel mit den Reporting Services unterwegs seit, dann habt Ihr diese Fragestellung sehr wahrscheinlich gar nicht, da dort Zwischensummen durch die Gruppierungsfunktion im Report abgebildet wird. So, der Rest von uns kann nun weiterlesen. Ach ja, und das betrifft jetzt nicht nur den SQL Server, wir bewegen uns da durchaus im ANSI Standard! :-) Wir nehmen unsere gute alte AdventureWorksDW2008. Als Beispiel wollen wir uns den Umsatz aus der FactInternetSales aufgeteilt nach Attributen aus der Dimension Product darstellen lassen. select EnglishProductCategoryName, EnglishProduc

Wie messe ich eigentlich den Erfolg der Optimierung einer SQL Abfrage?

Hier ein Thema, welches mir immer wieder in Coachings von Einsteigern und Juniorberatern begegnet. Daher speziell für diese Zielgruppe ein paar Grundlagen. Wie messe ich eigentlich, ob dank einer Maßnahme eine Query “schneller” geworden ist? Der eine oder andere mag denken, dass das doch eine überflüssige Frage ist. Die Optimierung war erfolgreich, wenn eine Abfrage schneller fertig ist. Wo ist also das Problem? Und schließlich hat doch das Management Studio in der rechten untern Ecke extra dafür einen Timer. Und im Profiler kann ich mir doch auch die Dauer einer Abfrage anschauen. Damit sollte das Thema doch eigentlich durch sein, oder? Und bei vielen Queries steht da unten doch eh nur 00:00:00, die können also doch gar nicht weh tun. Nun ja, ganz so einfach ist es dann doch nicht. Die Zeit, welche eine Query benötigt, ist immer relativ und kann von vielem abhängig sein. Die wesentlich entscheidendere Größe beim Tuning ist die Anzahl der für die Beantwortung notwendigen Datenba