Coaches’ Diary: Wie finde ich ganz einfach und schnell in einem Analysis Services Projekt alle Attribute, welche keinen Integer als Key haben…
Hier ein kleiner Kniff aus der Coaching Praxis!
Da erkläre ich einem Kunden im Coaching lang und breit in Farbe und 3D, dass Attribute das A bis Z in einer multidimensionalen Datenbank sind und, ganz ganz wichtig, bitte als Keys bitte nur Integer Spalten verwendet werden sollten. So von wegen Performance und so! Ok, haben die meisten von Euch wohl auch schon von gehört bzw. gelesen. Ist bei größeren und komplexeren Umgebungen wirklich wichtig! Ehrlich!
Natürlich kommt vom Kunden die Aussage, dass sie das ganz sicher bedacht hätten. Ich hatte da so meine Zweifel, aber keinerlei Tools zur Hand bzw. auf dem Kundenserver, um das nun kurz mal zu überprüfen. Alternative wäre ein manuelles Suchen gewesen. Da fiel mir etwas ein! Mit der Power der Kommandozeile lässt sich das nämlich herausfinden!
Es folgt dieses magische Kommando:
dir *.ksstore /s
Und schon werden alle Attribute & die Dimensionen angezeigt, welche einen String im Key haben! Da ich die Kundendatenbank nicht nehmen kann, hier die AdventureWorks2008R2 als Beispiel:
Der Befehl ist im jeweiligen Ordner auf der Server abzusetzen, in welchem die SSAS DB liegt. Also hier beim Beispiel für ADW2008R2..
Wenn nicht klar sein sollte, wo die Datenbanken liegen, dann die SSAS Eigenschaft DataDir anschauen im Management Studio.
Natürlich könnte das DIR auch eine Ebene höher ausgeführt werden, dann würden wir für alle Datenbanken alle Attribute mit Strings im Key sehen.
Ein schönes Beispiel in Adventure Works 2008 R2 ist in Geography das Attribute City! Hier unser Output…
Und hier die Eigenschaften des Attributes im Projekt:
Ach ja, und was ist jetzt ein *.ksstore?
Relativ einfach zu sagen. Im Gegensatz zur relationalen Engine, wo wir ja “nur” mdf, ndf’s und ein ldf pro Datenbank haben, zerlegt SSAS die Datenbank in Tausende von Dateien. Mehrere Dateien pro Attribute zum Beispiel. Allein für den Key eines Attributes gibt es eine *.kstore (Key Store) und eine *.khstore (Key Hash Store). Nun ja, und NUR für den Fall, dass der Key aus Strings besteht auch noch eine *.ksstore (Key String Store)! Die ist sozusagen optional! :^)