Nachdem ich vor einigen Wochen einen sehr guten Vortrag zum Thema BI mit SQL Server und Sharepoint von Oliver Engels und Markus Fischer gehört habe, bin ich ziemlich angetan von einem dabei ebenfalls vorgestelltem Produkt: Microsoft Live Labs Pivot. Irgendwie quält mich auch seit dem die Idee einen kleinen Beitrag zu SSIS und Pivot zu schreiben.
In den letzten paar Tagen habe ich an meiner SSIS Komponente SSIS ImageSource ein paar Änderungen an der internen Verarbeitung vorgenommen und dem ganzen auch mal ein User Interface geschenkt. Noch reicht es zwar nicht um ein neue Release bei Codeplex zu veröffentlichen, aber für eine kleine Demo zusammen mit Microsoft Live Labs Pivot reicht es.
Pivot ist eine Software der Microsoft Live Labs, die es ermöglicht in großen Datenmengen schnell und einfach zu navigieren und zu suchen. Der Kern hinter Pivot basiert auf dem ursprünglichen Projekt Seadragon, jetzt unter zoom.it zu finden. Für die Darstellung von Daten verwendet Pivot sogenannte Collections von Bildern. Beschreibende Daten innerhalb einer Collection, wie z.B. ein Änderungsdatum oder eine Dateigröße bei einem Bild, werden in Facets zusammengefasst. Der große Vorteil ist die konsistente Benutzerführung. Je nach Datentyp werden die einzelnen Facets in Pivot über spezielle Controls dargestellt, so können Zahlen z.B. über Schieberegler ausgewählt werden, Datumswerte über Gruppierungen (Jahr, Monat-Jahr) oder Kalender-Controls.
Pivot eignet sich aber natürlich nicht nur für Urlaubsfotos. Microsoft zeigt dies mit den Beispiel-Collections: Sportler-Fotos, ähnlich der bekannten Sammelbilder, zusammen mit den wichtigsten Kennzahlen (dargestellt als Facet) ergeben tolle Collections, die natürlich besondere Wirkung in Verbindung mit so statistisch geprägten Sportarten wie Football oder Basketball haben. Ich finde das gute alte Quartett beschreibt sehr gut was Collections sind bzw. darstellen.
Nun aber zu meiner kleinen Spielerei mit SSIS & Pivot.
Auf der Microsoft Live Labs Pivot Seite gibt es im Bereich Developer Info die sogenannten Sample Code for Creating Just in Time Pivot Collections Beispiele. Die darin enthaltenen PivoServerTools sind eigentlich alles was man benötigt um selber Just in Time eine Pivot Collection zu erstellen.
Für die Demo habe ich knapp 700 Urlaubsfotos als Originalgröße und als Thumbnails vorliegen. Mit der SSIS ImageSource Komponente habe ich die Thumbnails geladen und dabei die entsprechenden EXIF Daten ausgelesen. Über eine abgeleitete Spalte habe ich mir zusätzlich für jedes einzelne Bild den Pfad zu dem original Bild generieren lassen und diesen dem Datenfluss hinzugefügt.
Hat man das heruntergeladene JiT Collection Projekt mit dem .NET Framework 3.5 (die voreingestellte Version 4 wird nicht von der Script Komponente innerhalb der SSIS unterstützt) kompiliert, so muss die erstellte PivotServerTools Assembly noch dem GAC hinzugefügt werden und innerhalb der SSIS Script Komponente die entsprechende Assembly referenziert werden.
Die einzelnen Eingabespalten werden innerhalb der Script Komponente auf Nullwerte überprüft und dann jeweils in eine Varibale “_NAME DER SPALTE” – siehe Spalte _Artist, _ColorSpace, _Compression – geschrieben und daraus die entsprechenden Facets erstellt.
Der eigentlich Code für die Generierung der Pivot Collection sieht dann wie folgt aus:
1: string extension = Path.GetExtension(_FullName);
2: bool isJpeg = (0 == string.Compare(".jpg", extension, true));
3: bool isPng = (0 == string.Compare(".png", extension, true));
4:
5: FileInfo info = new FileInfo(_FullName);
6: coll.AddItem(Path.GetFileNameWithoutExtension(_FullName)
7: , _FullName
8: , _ImageDescription
9: , new ItemImage(_FullName_gross)
10: , new Facet("File name", _FileName
11: , isJpeg ? "*.jpg" : null
12: , isPng ? "*.png" : null)
13: , new Facet("File size", info.Length / 1000)
14: , new Facet("Creation time", _CreationTime)
15: , new Facet("Link:", new FacetHyperlink("click to view image", _FullName))
16: , new Facet("Artist", _Artist)
17: , new Facet("Color Space", _ColorSpace)
18: , new Facet("Compression", _Compression)
19: , new Facet("Copyright", _Copyright)
20: , new Facet("Exif Version", _ExifVersion)
21: , new Facet("GPS", _GPS)
22: );
Die Verarbeitung der knapp 700 Fotos mit 45 Facets hat ca. 7 Sekunden gedauert und schon war meine Pivot Collection erstellt:
In den nächsten Wochen werde ich mich ein bisschen intensiver mit Pivot beschäftigen, vielleicht findet sich dann auch noch eine Demo mit besseren Daten oder es springt vielleicht eine SSIS PivotDestination Komponente heraus.