Vergleichen dynamisch gefilterter Werte in einem einzelnen Bericht

Beim Arbeiten mit GoodData begrenzen die Benutzer oftmals die Daten eines Berichts mit einem Dashboard-Filter, damit bestimmte Datengruppen ausgeblendet und andere in die Berichtsberechnungen einbezogen werden.

Dieser Artikel erörtert das Szenario, in dem Sie den Benutzern erlauben möchten, die Werte einer Metrik zu vergleichen, wenn alle Kategorien mit ihren Werte einbezogen und einige ausgefiltert werden, und wenn der Benutzer einen Dashboard-Filter verwenden möchte, um die zu einem gegebenen Zeitpunkt ausgefilterten Kategorien dynamisch kontrollieren zu können.

Angenommen, Sie möchten eine Metrik vergleichen, indem Sie die auf bestimmte Segmente beschränkten Werte mit den Werten aller Segmente vergleichen - und zwar in einem einzigen Bericht. Zum Beispiel, wenn Sie den Trend in einem Liniendiagramm darstellen möchten, in dem eine Linie das ausgewählte Segment darstellt und eine andere eines für die gesamte Basis.

In diesem Fall muss der Benutzer in der Lage sein, das Segment dynamisch mit einem Dashboard-Filter auszuwählen.

Zum Beispiel können Sie die durchschnittliche tägliche Anzahl der Leads aus verschiedenen Marketing-Kampagnen nachverfolgen, was in folgendem logischen Datenmodell dargestellt werden kann:

Lösung 1: WITHOUT PARENT FILTER

Die Anforderungen scheinen zu implizieren, dass wir zwei Metriken brauchen: Anzahl der Leads/Tag filterbar mit dem Kampagnenfilter und eine ähnliche, nicht filterbare Metrik. Wir definieren unsere beiden Metriken folgendermaßen:

Durchschnittliche Anzahl Leads

SELECT AVG(# Leads)

Durchschnittliche Anzahl Leads (alle Datensätze)

SELECT AVG(# Leads) WITHOUT PARENT FILTER

Die Klausel WITHOUT PARENT FILTER schirmt unsere Metrik von allen Filtern ab, die in den Dashboards, Berichten und äußeren Metriken definiert wurden. Dies löst unser Problem, hat jedoch eine unerwünschte Nebenwirkung: Unser Dashboard kann andere Filter (normalerweise einen Datenfilter) enthalten, die sich sowohl auf die ‘teilweisen’ als auch die ‘gesamten’ Metriken auswirken sollen. Wenn Sie den Zeitraum der letzten 30 Tage filtern möchten, interessieren Sie sich für den Anteil, den die Kampagne an allen in den letzten 30 Tagen erstellten Leads ausmacht, nicht für die Gesamtanzahl der Leads.

Lösung 2: Variablen

Drei Arten von Filter-Dropdownmenüs können auf ein GoodData-Dashboard gesetzt werden: Attributsfilter, Datumsfilter und Variablenfilter. Meistens verwenden wir nur Attributs- und Datumsfilter. Variablenfilter können in einigen speziellen Situationen jedoch sehr hilfreich sein.

Bei GoodData sind gefilterte Variablen eigentlich einfach nur Kopien anderer Projektattribute, die nach einer Untergruppe von Attributswerten vorgefiltert wurden. Mit anderen Worten: Gefilterte Variablen sind Platzhalter für den Ausdruck: „Attribute IN (Value1, Value2, …).“

GoodData unterstützt ebenfalls numerische Variablen, aber diese sind in diesem Fall nicht relevant). Es besteht jedoch auch die Möglichkeit, eine Variable zu erstellen, die als Kopie irgendeines Attributs dient, ohne überhaupt irgendeinen Wert auszufiltern. In der Standardeinstellung werden keine Werte ausgefiltert.

Nachdem Sie eine gefilterte Variable erstellt haben, können Sie diese zum Definieren von Berichten (durch Variablenfilter) und Metriken wie der folgenden verwenden:

SELECT AVG(# Leads) WHERE Campaign_Variable

Es gilt zu berücksichtigen, dass die obige Metrik mit der Metrik SELECT AVG(# Leads) identische Ergebnisse liefert, wenn Campaign_Variable so definiert wird, dass keine Attributswerte ausgefiltert werden. Mit einem Campaign_Variable-Dashboard-Filter sind die Benutzer jedoch in der Lage, die Campaign_Variable schnell neu zu definieren, wodurch die Variablenmetrik effektiv geändert wird, während die ursprüngliche Metrik unverändert bleibt.

Obwohl wir mit Variablen alle unsere ursprünglichen Zielsetzungen erreichen können, haben sie mindestens einen Mangel. Während Attributs-Dashboard-Filter durch in Kaskaden aneinandergereihte übergeordnete/untergeordnete Beziehungen miteinander verbunden werden können, wird dies für Variablenfilter nicht unterstützt. Wenn das kaskadenförmige Aneinanderreihen von Dashboard-Filtern in Ihrem Projekt Priorität hat, müssen Sie sich möglicherweise für eine andere Lösung entscheiden.

Lösung 3: Kampagnen indirekt verbinden

Die letzte Lösung sieht möglicherweise aus, als sei sie von einem verrückten Datentüftler entwickelt worden (was ja auch stimmt). Aber es handelt sich dabei eigentlich nur um einen ziemlich ungewöhnlichen Anwendungsfall des kreuzweisen Filterns von Datensätzen mit Filterinjektion. Sie basiert auf der Idee des Injizierens eines Filters (Links) mit einer Untermetrik COUNT auf der Grundlage eines zugehörigen Datensatzes (auch bekannt als gesichtslose Fakttabelle), um unseren Hauptdatensatz (Daily Leads) und das Kampagnenattribut miteinander zu verbinden.

Es bedeutet, dass eine Modelländerung erforderlich ist:

Wie Sie sehen, wird Campaign nicht mehr von Daily Leads referenziert. Dies bedeutet, dass wir den Vorteil verlieren, dass die Metrik Daily Leads automatisch durch einen Kampagnen-Dashboard-Filter gefiltert wird. Dieses Verhalten ist beabsichtigt.

Nun sieht unsere ‘partielle’ Metrik folgendermaßen aus:

SELECT AVG(# Leads)
WHERE (SELECT COUNT(Campaign Daily Leads Association)
BY Daily Leads, ALL OTHER) > 0

Der Trick dabei ist, dass der Kampagnenfilter sich auf die Untermetrik COUNT auswirkt. Der Teil BY Daily Leads, ALL OTHER gewährleistet, dass die Untermetrik COUNT für jeden Datensatz von Daily Leads berechnet wird und die Bedingung ‘größer null’ nur die Datensätze Daily Leads auswählt, so dass diese in der Zuordnungstabelle durch mindestens einen Datensatz mit der ausgewählten Kampagne verbunden werden.

Wenn wir möchten, dass die Kampagne für normales Aufschlüsseln und Filtern verfügbar bleibt und nicht in einen zugehörigen Datensatz verschoben wird, können wir das Modell unverändert lassen und eine Attributskopie hinzufügen, die nur vom Dashboard-Filter verwendet wird. In diesem Fall sieht das Datenmodell folgendermaßen aus:

Die Definition der „partiellen“ Metrik bleibt dieselbe.

Schlussfolgerung

Ein Dashboard, das eine filterbasierte Auswahl mit einem ungefilterten Wert (oder sogar mehrere Filterauswahlen untereinander) vergleicht, kann sehr einfach mit Variablen erstellt werden, da diese es uns erlauben, die Filterregel direkt auf einen bestimmten Teil einer Metrik anzuwenden anstatt die gesamte Metrik zu filtern.

Wir können dasselbe Ergebnis erzielen, wenn wir das Filterattribut indirekt über eine Zuordnungstabelle mit dem Hauptdatensatz verbinden und den Filter auf eine Untermetrik COUNT anwenden.

Die banalste Version besteht darin, die Klausel WITHOUT PARENT FILTER zur ‘gesamten’ Metrik hinzuzufügen. Sie ist jedoch nicht praktikabel. Sie eliminiert nämlich auch alle Filter einschließlich der Datumsfilter, die wir normalerweise auf die ‘gesamte’ Metrik anwenden wollen.