Diese Seite bezieht sich auf den Parameter
sql
, der Teil eines Felds ist.
sql
kann auch als Teil einer abgeleiteten Tabelle verwendet werden, wie auf der Dokumentationsseite zum Parametersql
(für abgeleitete Tabellen) beschrieben.
Nutzung
Dimension: Feldname {
sql: ${revenue_in_dollars} - ${inventory_item.cost_in_dollars} ;
}
}
Hierarchie
sql |
Mögliche Feldtypen
Dimension, Dimensionsgruppe, Filter, MessenAkzeptiert
Ein SQL-AusdruckSonderregeln
Ein SQL-Ausdruck, der je nach type des Felds variiert (weitere Informationen siehe unten)
|
Definition
Für den Parameter sql
können verschiedene Arten von SQL-Ausdrücken verwendet werden, um eine Dimension, einen Messwert oder einen Filter zu definieren. Der Ausdruck, den Sie schreiben müssen, variiert je nach Art des Felds, das Sie erstellen. Weitere Informationen zu Dimensions- und Filtertypen finden Sie auf der Dokumentationsseite zu Dimensionen, Filtern und Parametertypen. Informationen zu Messtypen finden Sie auf der Dokumentationsseite zu Messtypen. Weitere Informationen finden Sie auch auf der Dokumentationsseite SQL einbinden und auf LookML-Objekte verweisen.
sql
für Dimensionen
Der sql
-Block für Dimensionen kann in der Regel jede gültige SQL-Abfrage annehmen, die in eine einzelne Spalte einer SELECT
-Anweisung geschrieben wird. Diese Anweisungen basieren im Allgemeinen auf dem Substitutionsoperator von Looker, der mehrere Formen hat:
${TABLE}.column_name
verweist auf eine Spalte in der Tabelle, die mit der Ansicht verknüpft ist, an der Sie gerade arbeiten.${dimension_name}
verweist auf eine Dimension in der Ansicht, an der Sie arbeiten.${view_name.dimension_name}
verweist auf eine Dimension aus einer anderen Ansicht.${view_name.SQL_TABLE_NAME}
verweist auf eine andere Ansicht oder eine abgeleitete Tabelle. Beachten Sie, dassSQL_TABLE_NAME
in dieser Referenz ein literaler String ist. Sie müssen nicht durch etwas ersetzt werden.
Wenn sql
nicht angegeben ist, geht Looker davon aus, dass in der zugrunde liegenden Tabelle eine Spalte mit demselben Namen wie das Feld vorhanden ist. Wenn Sie beispielsweise das Feld city
ohne den Parameter sql
auswählen, entspricht dies der Angabe von sql: ${TABLE}.city
.
Der Parameter
sql
einer Dimension kann keine Aggregationen enthalten. Das bedeutet, dass sie keine SQL-Aggregationen oder Verweise auf LookML-Messwerte enthalten darf. Wenn Sie ein Feld mitsql
erstellen möchten, das eine SQL-Aggregation enthält oder auf einen LookML-Messwert verweist, verwenden Sie einensql
-Parameter in einem Messwert, nicht in einer Dimension.
Eine sehr einfache Dimension, die den Wert direkt aus einer Spalte mit dem Namen revenue
übernimmt, könnte so aussehen:
dimension: revenue_in_cents {
sql: ${TABLE}.revenue ;;
type: number
}
Eine Dimension, die auf einer anderen Dimension in derselben Ansicht basiert, könnte wie folgt aussehen:
dimension: revenue_in_dollars {
sql: ${revenue_in_cents} / 100 ;;
type: number
}
Eine Dimension, die auf einer anderen Dimension in einer anderen Datenansicht basiert, könnte wie folgt aussehen:
dimension: profit_in_dollars {
sql: ${revenue_in_dollars} - ${inventory_item.cost_in_dollars} ;;
type: number
}
Eine Dimension, die auf einer anderen Dimension in einer abgeleiteten Tabelle basiert, könnte so aussehen:
dimension: average_margin {
sql: (SELECT avg(${gross_margin} FROM ${order_facts.SQL_TABLE_NAME})) ;;
type: number
}
Fortgeschrittene SQL-Nutzer können relativ erweiterte Berechnungen durchführen, einschließlich korrelierter Unterabfragen (Hinweis: Nicht alle Datenbankdialekte unterstützen korrelierte Unterabfragen):
dimension: user_order_sequence_number {
type: number
sql:
(
SELECT COUNT(*)
FROM orders AS o
WHERE o.id <= ${TABLE}.id
AND o.user_id = ${TABLE}.user_id
) ;;
}
Weitere Informationen finden Sie in der Dokumentation für einen bestimmten Dimensionstyp.
sql
für Dimensionsgruppen
Der Parameter sql
für eine dimension_group
kann einen beliebigen gültigen SQL-Ausdruck enthalten, der Daten in einem der folgenden Formate enthält: Zeitstempel, Datum/Uhrzeit, Datum, Epoche oder jjjjmmtt.
sql
für Maße
Der sql
-Block für Messwerte hat in der Regel eine von zwei Formen:
- Die SQL, über die eine Aggregatfunktion (z. B.
COUNT
,SUM
,AVG
) ausgeführt wird, auch hier mit dem Substitutionsoperator von Looker, wie oben beschrieben - Ein Wert, der auf mehreren anderen Messwerten basiert
Um den Gesamtumsatz in Dollar zu berechnen, verwenden wir beispielsweise:
measure: total_revenue_in_dollars {
sql: ${revenue_in_dollars} ;;
type: sum
}
Zur Berechnung des Gesamtgewinns können wir:
measure: total_revenue_in_dollars {
sql: ${total_revenue_in_dollars} - ${inventory_item.total_cost_in_dollars} ;;
type: number
}
Weitere Informationen finden Sie in der Dokumentation für einen bestimmten Messtyp.
Für den Messwerttyp count
können Sie den Parameter sql
weglassen.
Bei anderen Arten von Maßnahmen gilt: Wenn sql
nicht angegeben ist, geht Looker davon aus, dass in der zugrunde liegenden Tabelle eine Spalte mit demselben Namen wie das Feld vorhanden ist. Da ein Messwert einen Namen haben sollte, der angibt, dass er aus einer Gruppe von zugrunde liegenden Werten besteht, sollten Sie in der Praxis immer den Parameter sql
angeben.
Mathematikaufgaben mit SQL
Innerhalb des sql
-Parameters gibt es zwei häufige Probleme, die sich aus der Division ergeben.
Erstens: Wenn Sie in der Berechnung die Division verwenden, sollten Sie vermeiden, dass durch die Division eine Null entsteht, die einen SQL-Fehler verursacht. Verwenden Sie dazu die SQL-Funktion NULLIF
. Beispiel: „Wenn der Nenner null ist, sollten Sie ihn stattdessen wie NULL behandeln:“
measure: active_users_percent {
sql: ${active_users} / NULLIF(${users}, 0) ;;
type: number
}
Ein weiteres Problem ist die Art und Weise, wie SQL Ganzzahlen verarbeitet. Wenn man 5 durch 2 teilt, erwartet man, dass das Ergebnis 2,5 ist. Bei vielen SQL-Dialekten wird das Ergebnis jedoch nur als 2 zurückgegeben, da bei der Teilung zweier Ganzzahlen das Ergebnis als Ganzzahl zurückgegeben wird. Zur Lösung dieses Problems können Sie den Zähler mit einer Dezimalzahl multiplizieren, um zu erzwingen, dass SQL ein Dezimalergebnis zurückgibt. Beispiel:
measure: active_users_percent {
sql: 100.00 * ${active_users} / NULLIF(${users}, 0) ;;
type: number
}
Flüssigkeitsvariablen mit sql
Sie können auch Liquid-Variablen mit dem Parameter sql
verwenden. Mit Flüssigkeitsvariablen können Sie auf Daten wie die Werte in einem Feld, Daten zum Feld und auf das Feld angewendete Filter zugreifen.
Diese Dimension maskiert beispielsweise ein Kundenpasswort gemäß einem Looker-Nutzerattribut:
dimension: customer_password {
sql:
{% dynamic if _user_attributes['pw_access'] == 'yes' %}
${password}
{% dynamic else %}
"Password Hidden"
{% dynamic endif %} ;;
}