Weitere LookML-Grundlagen

Auf dieser Seite werden weitere häufige Ausdrucksmuster in LookML behandelt.

Bezeichnungen für Felder (und Namen in der Benutzeroberfläche)

Looker wandelt LookML-Feldnamen in die auf der Benutzeroberfläche angezeigten Strings um, indem der Ansichtsname in normaler Schriftgröße mit dem fett formatierten Kurznamen des Felds kombiniert wird. Beispielsweise wird in der Ansicht Aufträge das Feld Betrag als Betrag für Aufträge angezeigt. Auf dieser Seite sind beide fett formatiert und der Ansichtsname wird großgeschrieben (Bestellmenge), um die Diskussion zu vereinfachen.

Wenn Sie ein Feld anders als den Spaltennamen in einer Tabelle benennen möchten, ändern Sie einfach den Feldnamen und geben Sie seine sql:-Verknüpfung an. Im Beispiel unten sehen Sie eine Tabelle airports mit der Spalte cntrl_twr. In diesem Fall würde Looker die folgende Deklaration generieren:

view: airports {
  dimension: cntrl_twr {        # full name: airports.cntrl_twr
    type: yesno                 # default name: AIRPORT Cntrl Twr (Yes/No)
    sql: ${TABLE}.cntrl_twr ;;  # the sql expression for this field
  }
}

Wir benennen die Dimension cntrl_twr so um, dass sie für Menschen lesbar ist.

view: airports {
  dimension: has_control_tower {  # full name: airports.has_control_tower
    type: yesno                   # aliased name: AIRPORTS Has Control Tower (Yes/No)
    sql: ${TABLE}.cntrl_twr ;;    # the sql expression for this field
  }
}

Anzahl anhand einer Dimension filtern

Die Gruppierung nach einer Dimension und der Anzahl der Elemente ist relativ einfach. Wenn Sie nach NUTZER-Land gruppieren, erfahren Sie unter Anzahl der Bestellungen, woher Ihre Bestellungen stammen. Oftmals ist es jedoch sinnvoll, eine Anzahl zu erstellen, die anhand eines Dimensionswerts gefiltert wird. Sie können beispielsweise das neue Maß BESTELLUNGEN Frankreich – Anzahl festlegen:

view: users {
  dimension: country {}
}
view: orders {
  dimension: id {
    primary_key: yes
    sql: ${TABLE}.id ;;
  }
  measure: count {
    type: count
    drill_fields: [detail]
  }
  measure: france_count {
    type: count   # COUNT(CASE WHEN users.country = 'France' THEN 1 ELSE NULL END)
    filters: [users.country: "France"]
  }
}

Filter können jeden beliebigen Ausdruck verwenden. Wenn Sie ein Feld benötigen, das die Benutzer aus der gesamten EU zählt, könnten Sie dies folgendermaßen umsetzen:

measure: eu_count {
  type: count   # COUNT(CASE WHEN users.countrycode IN 'UK','FR','ES' THEN 1 ELSE NULL END)
  drill_fields: [detail]
  filters: [users.countrycode: "UK,FR,ES"]
}

Wenn Sie mit einem mathematischen Ausdruck filtern möchten, müssen Sie ihn in doppelte Anführungszeichen setzen:

measure: total_orders_above_100_dollars {
  type: sum   # SUM(CASE WHEN order.value > 100 THEN order.value ELSE NULL END)
  sql: ${order.value} ;;
  drill_fields: [detail]
  filters: [order.value: ">100"]
}

Prozentsätze

Viele Leistungskennzahlen werden in Prozent angegeben, z. B. „% der zurückgegebenen Artikel“, „% der E-Mails, die zu einem Verkauf geführt haben“, oder „X“ Y. Dem Gestaltungsmuster von LookML entsprechend werden die Anzahl für die zwei Bedingungen und dann ein drittes Feld erstellt, das das prozentuale Verhältnis zwischen den beiden berechnet.

dimension: returned {
  type: yesno
}
measure: count {   # total count of items
  type: count_distinct
  sql: ${TABLE}.id ;;
  drill_fields: [detail]
}
measure: returned_count {   # count of returned items
  type: count_distinct
  sql: ${TABLE}.id ;;
  drill_fields: [detail]
  filters: [returned: "Yes"]
}
measure: percent_returned {
  type: number
  sql: 100.0 * ${returned_count} / NULLIF(${count}, 0) ;;
  value_format: "0.00"
}

Verwenden Sie zum Berechnen von Prozentsätzen die nachstehende Formel. In Postgres ist die Anzahl eine Ganzzahl, und die Division von Ganzzahlen ergibt wiederum Ganzzahlen. Durch Multiplikation mit 100,0 wird die erste Anzahl in eine Gleitkommazahl umgerechnet, wodurch auch der Rest des Ausdrucks zu einem Gleitkommawert wird. Zur Vermeidung von Fehlern, die durch null geteilt werden, wandelt NULLIF(value, 0) einen Nullwert in null um. Dadurch wird das Ergebnis auf null gesetzt und ein Fehler wird vermieden.

100.0 * ${returned_count} / NULLIF(${count}, 0)

Sätze für Drilldown-Details verwenden

Zu den stärksten Funktionen von Looker gehört unter anderem die Fähigkeit, Daten so aufzuschlüsseln, dass die zugrunde liegenden Entitäten sichtbar werden, aus denen eine Anzahl oder ein anderer Messwert besteht.

Beim Klicken auf einen Messwert auf der Looker-Benutzeroberfläche wird eine neue Abfrage erstellt, die den Satz Daten, aus dem der Messwert besteht, lokalisiert. Jeder Wert für jede Dimension in der Tabellenzeile wird den aktuellen Filtern hinzugefügt.

Looker benötigt eine Liste von Aufschlüsselungsfeldern, um anzuzeigen, wann auf den Wert des Messwerts geklickt wurde. Wenn Sie ein Modell erstellen, erstellt der Generator in der Regel einige erste Aufschlüsselungsfelder für Sie. Darüber hinaus können Sie selbst weitere Drill-Felder hinzufügen. Ein Beispiel: Wir analysieren die Anzahl der BESTELLUNGEN nach dem NUTZER-Status in der letzten Woche. Dann sieht die Abfrage in Looker in etwa folgendermaßen aus:

BENUTZER BundesstaatAUFTRÄGE Anzahl
Kalifornien24
Texas5
Colorado4
Florida4
Illinois4

Wenn wir in der Zeile Kalifornien auf 24 klicken, wird erwartet, dass die 24 Bestellungen aus Kalifornien angezeigt werden.

Looker übernimmt das Hinzufügen des Filters NUTZER Status: Kalifornien, aber Looker weiß nicht, welche Felder Sie in der Bestellung anzeigen möchten. Sie müssen ein Set verwenden, um diese Felder in Ihrem Modell zu deklarieren.

In LookML ist set eine Liste von Feldnamen (Dimensionen, Messwerte und Filter). Mithilfe von Sätzen erhält Looker Informationen dazu, welche Felder:

  • Angezeigt werden sollen, wenn Sie eine Anzahl oder einen anderen Messwert aufschlüsseln
  • Beim Verbinden einer Ansicht importiert werden sollen
  • In einem Explore indiziert werden

Dieser Satz kann an zahlreichen Stellen in einem Modell verwendet werden. Daher gibt es in Looker verschiedene Möglichkeiten, Sätze zu erstellen.

Literalsätze

Die einfachste Form eines Satzes ist ein Literalsatz. Ein Literalsatz entsteht dadurch, dass der Satz einfach als Array deklariert wird. Sie können Literalsätze mithilfe von '[]' deklarieren.

Nehmen wir folgendes Beispiel:

view: customers {
  dimension: id {
    primary_key: yes
  }
  measure: count {
    type: count
  }
  dimension: city {}
  dimension: state {}
  dimension: name {}
}

Die Felder, die angezeigt werden sollen, sind id, name und city.

Im Messwert könnten wir einfach ein Literal-Array deklarieren.

measure: count {
  type: count
  drill_fields: [id, name, city]
}

Bei Sätzen, die lediglich einmal verwendet werden, ist es einfach und gut nachvollziehbar, sie literal zu deklarieren.

Benannte Sätze

Angenommen, es gibt zwei Werte: CUSTOMERS Count und CUSTOMERS In California Count. Wenn wir eine dieser Zahlen aufschlüsseln, möchten wir die Felder id, name und city anzeigen. Bei einer Literaldeklaration könnten wir folgendermaßen vorgehen:

view: customers {
  measure: count {
    type: count
    drill_fields: [id, name, city]
  }
  measure: in_california_count {
    type: count
    filters: [state: "California"]
  }
}

Wenn wir ein neues Feld (z. B. das Feld customers.state) hinzufügen möchten, müssen wir beide Listen bearbeiten. Stattdessen bietet LookML eine Möglichkeit, benannte Sätze zu erstellen, die wir an einer Stelle verwalten und an mehreren Stellen verwenden können.

Mit dem folgenden Code wird ein Satz customers.detail erstellt und beide Werte auf denselben Satz von Feldern verweisen.

view: customers {
  set: detail {
    fields: [id, name, city]      # creates named set customers.detail
  }

  measure: count {
    type: count
    drill_fields: [detail*]       # show fields in the set "customers.detail"
  }
  measure: in_california_count {
    type: count
    filters: [state: "California"]
  }
}

LookML-Sätze sind recht leistungsfähig:

  • Die Deklaration eines Satzes ist additiv. Wenn Sie einen Satz an mehreren Orten deklarieren, enthält Looker alle Felder, die für den Satz an allen Standorten deklariert wurden.
  • Sie können Sets in andere Gruppen einbetten, indem Sie den Namen des anderen Sets gefolgt von einem Sternchen wie setname* eingeben.
  • Sie können sogar Elemente aus Gruppen entfernen, indem Sie einen Bindestrich vor den Feldnamen setzen, z. B. -fieldname.

Vollständige Sätze lesen

Aufschlüsselungsvisualisierungen anpassen

Wenn der Looker-Administrator die Labs-Funktion Visuelles Aufschlüsselung aktiviert hat, werden standardmäßig keine Datentabellen angezeigt. In diesem Fall können Sie die angezeigte Visualisierung mit Liquid-Variablen im Parameter link anpassen, wie auf der Dokumentationsseite zum Parameter link und im Hilfeartikel Leistungsstärkere Datenbohrungen gezeigt.

Auf der neuen Dashboard-Oberfläche werden mit dem Parameter link visuelle Aufschlüsselungen unterstützt, ohne dass die Labs-Funktion für visuelle Bohrungen aktiviert werden muss.

Ergebnissätze filtern

LookML bietet eine Reihe von Filtervorgängen, die auf Felder angewendet werden können, sowie Explores zum Filtern von Ergebnissätzen, bevor sie an den Benutzer übergeben werden.

always_filter auf dem Tab „Entdecken“

Mit always_filter können Sie immer eine Reihe von Filtern auf jede Abfrage anwenden, die in einem Explore ausgeführt wird. Die Filter werden auf der Benutzeroberfläche von Looker angezeigt. Die Benutzer können zwar den von Ihnen vorgegebenen Standard-Filterwert ändern, die Filter jedoch nicht löschen. Im Allgemeinen werden diese Filter verwendet, um Daten zu entfernen, die Sie normalerweise nicht einschließen möchten. Beispiel: In der Ansicht Aufträge wollten wir nur abgeschlossene oder ausstehende Bestellungen sehen. In dem Fall könnten wir Folgendes hinzufügen:

explore: orders {
  view_name: order
    filters: [status: "complete,pending"]
  }
}

Wenn der Nutzer Aufträge mit anderen Statuswerten sehen möchte, kann er in der Benutzeroberfläche den Bestellstatus auf % setzen.

sql_always_where auf dem Tab „Entdecken“

Wenn Sie eine Abfrageeinschränkung anwenden möchten, die Nutzer nicht ändern können, verwenden Sie sql_always_where. Neben den von menschlichen Benutzern ausgeführten Abfragen gilt diese Beschränkung für Dashboards, geplante Looks und eingebettete Informationen, die auf dieses Explore zurückgreifen. Eine sql_always_where-Bedingung wird dem Nutzer nicht angezeigt, es sei denn, er sieht sich die zugrunde liegende SQL-Abfrage an, die er erstellt.

Das folgende Beispiel verhindert, dass Benutzer Aufträge vor dem 01.01.2012 zu sehen bekommen:

# Using Looker references
explore: order {
  sql_always_where: ${created_date} >= '2012-01-01' ;;
}

# Using raw SQL
explore: order {
  sql_always_where: DATE(created_time) >= '2012-01-01' ;;
}

conditionally_filter auf dem Tab „Entdecken“

Bei besonders großen Tabellen müssen Abfragen sorgfältig überdacht werden, da eine unbegrenzte Anzahl von Abfragen schnell zu einer Belastung für die Datenbank werden kann. LookML bietet eine Möglichkeit, dies in Form von conditionally_filter zu beheben.

Sie verwenden den Parameter conditionally_filter, um einen Filter auf die Abfrage anzuwenden, es sei denn, der Nutzer hat bereits einen Filter für eines der im Abschnitt unless aufgeführten Felder hinzugefügt.

Im folgenden Beispiel wird keine Änderung an der Abfrage des Nutzers vorgenommen, wenn der Nutzer einen Filter auf eines oder mehrere der Felder angewendet hat: created_date, shipped_time, shipped_date, orders.id oder customer.name. Wenn der Nutzer eines dieser Felder nicht gefiltert hat, fügt Looker am orders.created_time automatisch den Filter für 1 Tag hinzu.

  filters: [orders.created_time: "1 day"]
  unless: [created_date, shipped_time, shipped_date, orders.id, customer.name]
}