In den bisherigen Teilen haben wir die Application Insights für Windows Phone und Windows 8 dazu genutzt die Standardauswertungen zu beziehen sowie das generelle Vorkommen von Events zu loggen. Einfaches Logging von Events bringt uns die Information, wie oft diese Events stattfinden – das war’s dann aber auch schon mit der Information.

Metriken

In vielen Fällen wollen wir aber etwas konkreter wissen, was genau vor sich geht. Im Falle eines Spiels kann die Information interessant sein, mit welchem Punktestand das Spiel beendet wurde. Im Falle von Shopping Apps kann es interessant sein zu sehen, wie sich der Gesamtbetrag von Einkäufen im Laufe der Zeit ändert. Vielleicht kauft er mehr ein, wenn das Hintergrundbild der App vertrauenserweckender aussieht? Vielleicht war der Totenkopf auf der Live-Tile für die Shopping-App eine schlechte Idee?

An dieser Stelle wieder der Hinweis: Es geht hier um Informationen, die dem App-Entwickler helfen sollen zu verbessern, gerade auch unter dem Aspekt, dass neue Funktionen eingebaut werden und man als Entwickler nur schlecht abschätzen kann, wie diese auf den Anwender wirken. Es ist nicht Ziel der Application Insights, persönliche Informationen des Anwenders zu loggen. Nicht zuletzt wir als Entwickler tragen hier die Verantwortung dafür, dass hier kein Unfug angestellt wird!

Zurück zum Thema: Es gibt die Möglichkeit pro geloggtem Event einen (und zwar höchstens einen) numerischen Wert mitzuloggen. Um beim Thema Punktestand zu bleiben – der entsprechende Befehl sähe dann so aus:

// Dictionary mit Wert
var myDic = new Dictionary<string, object>(){{ "punktestand", 42 }};

// Loggen
ClientAnalyticsChannel.Default.LogEvent("meinEvent", myDic);

Diese Art des Loggens legt eine sogenannte “Metrik” an – diese kann man im Visual Studio Online Portal natürlich auch einsehen. Die Auswertung berechnet automatisch Minimum, Durchschnitt und Maximum.

Ihr findet diese Auswertung, wenn Ihr im Dashboard unter Events den Event anwählt und dann oben (oberhalb der Kurve) auch “Detail” klickt. Das übersieht man gerne mal.

image

Ihr bekommt dort mehrere Graphen abgebildet mit der Möglichkeit auf der Zeitachse ganz unten den Bereich, der Euch am meisten interessiert, auszuwählen. Der letzte Graph zeigt Euch den Verlauf Eurer Metrik über die Zeit:

image

Dimensionen

Neben den Metriken könnt Ihr noch mehr Information loggen. Das wichtigste dabei ist: Die weiteren Werte dürfen nicht numerisch sein, sondern müssen Strings sein. Diese Werte werden Dimensionen genannt und führen dazu, dass Ihr Eure Metrik filtern könnt – nach Kriterien, die Ihr festlegt.

So wäre es denkbar, dass Ihr – im Falle eines Spiels – neben dem Punktestand auch mit loggt, welchen Schwierigkeitsgrad der Anwender gewählt hat. Im Falle des Shops ist es vielleicht interessant zu wissen, ob es sich um einen Neukunden handelt. Im Falle von einer Benzinverbrauchs App wollt Ihr vielleicht wissen, wie sich der Verbrauch von Dieselfahrzeugen gegenüber Benzinfahrzeugen im Verlauf der Zeit ändert.

Im Code bildet Ihr das ganze folgedermaßen ab:

// Dictionary mit Wert
var myDic = new Dictionary<string, object>(){{ "Verbrauch", 6 }, {“Kraftstoff”, “Diesel”}};

// Loggen
ClientAnalyticsChannel.Default.LogEvent("meinEvent", myDic);

Wenn Ihr wollt, könnt Ihr auch mehrere nicht-numerische Werte auf einmal sammeln, die in unterschiedlichen Dimensionen resultieren. Im Dashboard sieht das Ganze dann folgendermaßen aus:

image

Jetzt haben wir die Defaultkonfiguration , das einfache Logging, Metriken und Dimensionen besprochen. Wie kann ich aber zur Entwicklungszeit feststellen, wann Daten übertragen werden und welche Daten überhaupt gesammelt werden? Das sehen wir uns  im nächsten Teil an.