Power BI Treemap

Eine eigene Seite widme ich dem "TreeMap" Charts von Power BI. Ich nutze schon viele Jahre Programme wie WinDirStat/Sequioa um die Belegung von Festplatten anzuzeigen. Bislang habe ich mir so etwas aber auch für andere Datenquellen gewünscht. Leider bin ich zu wenig Programmierer, um den Source-Code von WindirStat zu nehmen und mit einer anderen Ausleseroutine zu versehen. Aber nun gibt es Power BI und auch hier gibt es ein Tree-View Control

Sample-Daten aufbereiten

Zuerst wollte ich natürlich mal sehen, wie diese Control mit den Daten arbeitet. ich habe mir also schnell eine CSV-Datei über eine Verzeichnisstruktur erstellt:

Get-ChildItem c:\ -Recurse -File `
   | select directory,name,length `
   | export-csv -NoTypeInformation -Encoding unicode c:\temp\dir.csv

Das Ergebnis war dann eine wenig spektakuläre CSV-Datei  mit dem Dateiname. Interessant könnte natürlich auch das Alter sein. Daher habe ich den Befehl noch etwas erweitert

$now = get-date
Get-ChildItem c:\temp -Recurse -File `
   | select directory,name,fullname,length,@{name="Age";Expression={[int]($now - $_.LastWriteTime).totaldays}}`
   | export-csv -NoTypeInformation -Encoding unicode c:\temp\dir.csv

Nun kann ich sogar auf Dateinamen oder das Alter direkt zugreifen

Treemap in Power BI

Die CSV-Datei wird in Power BI einfach importiert und dann können Sie das Feld Treemap" auch sinnvoll einsetztn

Natürlich müssen Sie dies noch konfigurieren. In diesem Beispiel habe ich das Feld "Directory" in die Gruppe gezogen und den Wert "Length", der die Summer der Größe der Dateien mit dem Verzueichnis angibt. Diese Treemap sieht schon sehr der Ansicht von WinDirStat/Sequioa ähnlich:

Mit Power BI geht aber noch mehr. Ich in den Eigenschaften von "Length" nun einfach von "Summe" auf "Count" umgestellt und das Layout ändert sich deutlich. Nun ist nicht die Größe der Dateien in dem jeweiligen Ordner maßgeblich sondern die Anzahl der Elemente

Allerdings sind nicht alle Daten für dieses Diagramm geeignet. Wenn Sie die Dateien nach dem Alter als Gruppe anzeigen, dann bekommen Sie zwar auch entsprechende "Kästchen", aber die sagen nicht viel aus, da Sie immer den Text dazu lesen müssen. für das Alter einer Datei oder die Größenverteilung über alle Elemente ist dann doch wieder ein klassisches Chat (Alter auf der X-Achse, Summer der Anzahl bzw. Größe auf der Y-Achse)

Exchange Public Folder mit TreeView

Die Ansicht mit der Treemap macht aber mit vielen anderen Datenquellen Sinn, die bislang nicht so gut auszuwerten waren. Eine Struktur mit öffentlichen Ordnern auf einem Exchange Server ist einer Dateistruktur auf einem Fileserver sehr ähnlich. Es gibt eine Struktur aus Ordnern mit Elementen, die eine Größe haben. Und es gibt mit Get-PublicFolderStatistics einen netten Befehl um diese Daten zu erhalten und als CSV-Datei abzuspeichern. Und dann ist es nur ein kleiner Mausklick um diese Daten auch in Power BI zu visualisieren. Dazu reicht auf einem einzelnen Server schon folgender Einzeiler, der zur Lesbarkeit umgebrochen wurde.

# Exchange 2010/2007 Version

Get-publicfolderstatistics -resultsize unlimited `
   | select name,folderpath,itemcount,@{Name="Size";Expression={$_.totalitemsize.value.tomb()}},@{Name="Level0";Expression={$_.folderpath.split("\")[0]}},@{Name="level1";Expression={$_.folderpath.split("\")[1]}} `
   | export-csv .\pfstatistik.csv -notypeinformation -encoding unicode

Achtung: Bei Exchange 2013 ist das Property "Folderpath" kein String mehr, sondern ein Objekt. zudem ist Itemsize nun ein anderes Objekt.
Nutzen Sie dort bitte

# Exchange 2013/2016 Version

Get-publicfolderstatistics -resultsize unlimited `
   | select name,folderpath,itemcount,@{Name="Size";Expression={$_.totalitemsize.tomb()}},@{Name="Level0";Expression={$_.folderpath[0]}},@{Name="level1";Expression={$_.folderpath[1]}} `
   | export-csv .\pfstatistik.csv -notypeinformation -encoding unicode

Wer mehrere Server in mehreren Standorten hat, kann den Befehl je Server aufrufen und die Daten zusammen fassen. Interessant ist nun natürlich die Auswertung so einer Struktur in einer Treemap. Hier ein Beispiel:

Leider ist der Pfad aber aus Sicht von Power BI nur genau ein String. Eine echte Baumstruktur mit Teilabschnitten können Sie nicht sehr einfach erreichen. Hier würde es natürlich helfen, z.B. die erste und zweite Ebene als eigenes Feld auszuliefern. Das könnten Sie mit Powershell beim generieren der CSV-Datei machen oder natürlich auch wieder in Power BI. Sie können einfach neue Spalten anlegen, und diese anhand von Werten ein er anderen Spalte errechnen lassen. Interessant wäre dann z. B. die Obergruppe als "Group" zu nutzen in die nächste Ordnerstufe als "Detail". Sie können aber auch einfach einen "String-Filter" setzen. Im PowerShell-Sample habe ich die erste und zweite Ebene schon mal al eigenes Feld exportiert, so dass Sie diese einfach verwenden können.

Nun fehlt ihnen nur noch ein automatischer Prozess, der regelmäßig die Daten aus Exchange ausliest und z.B.: in eine SQL-Tabelle ablegt

Treeview auf Postfächer

Der zweite Bereich einer Analyse kann z.B. auf der Ebene eines Postfachs erfolgen. Ein Postfach könnte ja relativ groß sein und und sie werden vom Anwender gebeten, einmal drüber zu schauen und ihm einen Hinweis zu geben, wo sich viele Elemente befinden. Dann ist Power BI mit "Get-Mailboxfolderstatistics" ein möglicher Weg. Aber da die Hierarchie nicht einfach abzubilden ist, ist ein anderer Ansatz zur Analyse vieler Postfächer interessant . Hier dann aber nicht auf die Ebene der Ordner sondern nur auf das Postfach selbst. Als Gruppe oder Detail könnte aber z.B. die Abteilung oder die Ad-Site der Postfächer genutzt werden. Dann könnten Sie z.B. schön auswerten, welche Personengruppen ihren Server wie stark belegen. Das ist aber etwas aufwändiger, da sie erst eine Liste der Mailboxen einsammeln und dann die Statistik dazu erfassen müssen

get-recipient `
   -resultsize unlimited `
   -RecipientTypeDetails usermailbox `
  | select department,identity,mbsize `
  | %{
       $_.mbsize = (get-mailboxstatistics -identity $_.identity).totalitemsize.value.tomb();
       write-host "." -nonewline
       $_} `
  | Export-Csv .\mbsizereport.csv -NoTypeInformation -Encoding unicode

Die hier resultierende CSV-Datei enthält die Abteilung, die Identität und die Größe der Mailbox. Der Abruf dauert aber etwas, da für jede Mailbox erst die Statistik ausgelesen werden muss. Geben Sie ihrem Exchange Server etwas Zeit. Die Ausgabe hänge natürlich davon ab, wie gut sie ihre Stammdaten im Active Directory gepflegt habe.

So eine Grafik sagt doch viel mehr aus, als eine schnöde Liste. Die kleine Zahl ist die Summe der Postfächer in Megabyte. Bei diesen Musterdaten wären das dann 9 Gigabyte beim Vertrieb. Sie sehen schon, dass die Zahlen in diesem Beispiel nicht mit der Realität zu tun haben können. Wenn Sie beim Export natürlich noch andere Kriterien als Feld übertragen, können Sie die Ausgaben noch weiter anpassen.

IISLog

Ein letzte Beispiel bezieht sich nicht nur auf Exchange, aber hier ist es wieder sehr hilfreich, mit dieser Ansicht zu arbeiten. Wieder nutze ich ein Powershell-Skript um die IIS-Logs zu importieren und auf das wesentliche zu reduzieren. Mich interessiert z.B. die Client-IP, der Username die übertragenen Bytes aber vor allem die gekürzte URL.

Hier kommt bei Gelegenheit noch ein Bild rein

Sonstige Daten

Ich kann ihnen hier nur einen ersten Einblick in die Funktion von Power BI TreeMaps und die Möglichkeiten der Datengewinnung liefern. Es gibt sicher noch viele andere Daten, die mit Power BI ausgewertet werden können. Sie könnten z.B. das Exchange Messagetracking anzapfen oder mit einem eigenen Transportagent die Klassen von Anlagen erfassen. Vielleicht können Sie auch aus den Statistiken des Virenscanners aussagekräftige Treemaps erzeugen. Letztlich ist es eine Frage, wie Sie die Daten aufbereiten und visualisieren.

Weitere Links