sql (für Felder)

Auf dieser Seite wird auf den Parameter sql verwiesen, der Teil eines Felds ist.

sql kann auch als Teil einer abgeleiteten Tabelle verwendet werden, wie auf der Dokumentationsseite zum Parameter sql (für abgeleitete Tabellen) beschrieben.

Nutzung

view: view_name {
  dimension: field_name {
    sql: ${revenue_in_dollars} - ${inventory_item.cost_in_dollars} ;;
  }
}
Hierarchie
sql
Mögliche Feldtypen
Dimension, Dimensionsgruppe, Filter, Messwert

Akzeptiert
Ein SQL-Ausdruck

Besondere Regeln
Ein SQL-Ausdruck, der je nach type des Felds variiert (wie auf dieser Dokumentationsseite ausführlich beschrieben)

Definition

Der Parameter sql akzeptiert verschiedene Arten von SQL-Ausdrücken, mit denen eine Dimension, ein Messwert oder ein Filter definiert wird. Der Ausdruck, den Sie schreiben müssen, hängt vom Typ des Felds ab, das Sie erstellen. Weitere Informationen zu Dimensions- und Filtertypen finden Sie auf der Dokumentationsseite Dimensionen, Filter und Parametertypen. Weitere Informationen zu Messwerttypen finden Sie auf der Dokumentationsseite Messwerttypen. Weitere Informationen finden Sie auf der Dokumentationsseite SQL-Einbindung und Verweise auf LookML-Objekte.

sql für Dimensionen

Der sql-Block für Dimensionen kann im Allgemeinen jeden gültigen SQL-Ausdruck enthalten, der in einer einzelnen Spalte einer SELECT-Anweisung verwendet wird. Diese Anweisungen basieren in der Regel auf dem Substitutionsoperator von Looker, der mehrere Formen hat:

  • ${TABLE}.column_name verweist auf eine Spalte in der Tabelle, die mit der Ansicht verbunden ist, an der Sie arbeiten.
  • ${dimension_name} verweist auf eine Dimension in der Ansicht, die Sie gerade bearbeiten.
  • ${view_name.dimension_name} verweist auf eine Dimension aus einer anderen Ansicht.
  • ${view_name.SQL_TABLE_NAME} verweist auf eine andere Ansicht oder abgeleitete Tabelle. SQL_TABLE_NAME in diesem Verweis ist eine literale Zeichenfolge. Sie muss nicht ersetzt werden.

Wenn sql nicht angegeben wird, geht Looker davon aus, dass es in der zugrunde liegenden Tabelle eine Spalte mit demselben Namen wie das Feld gibt. Wenn Sie beispielsweise das Feld city ohne den Parameter sql auswählen, entspricht das der Angabe von sql: ${TABLE}.city.

Der Parameter sql einer Dimension darf keine Aggregationen enthalten. Daher darf sie keine SQL-Aggregationen oder Verweise auf LookML-Messwerte enthalten. Wenn Sie ein Feld mit sql erstellen möchten, das eine SQL-Aggregation enthält oder auf einen LookML-Messwert verweist, verwenden Sie den Parameter sql in einem Messwert, nicht in einer Dimension.

Eine sehr einfache Dimension, die den Wert direkt aus einer Spalte namens 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 so aussehen:

dimension: revenue_in_dollars {
  sql: ${revenue_in_cents} / 100 ;;
  type: number
}

Eine Dimension, die auf einer anderen Dimension in einer anderen Ansicht basiert, könnte so aussehen:

dimension: profit_in_dollars {
  sql: ${revenue_in_dollars} - ${inventory_item.cost_in_dollars} ;;
  type: number
}

Eine Dimension, die in einer abgeleiteten Tabelle auf einer anderen Dimension basiert, könnte so aussehen:

dimension: average_margin {
  sql: (SELECT avg(${gross_margin} FROM ${order_facts.SQL_TABLE_NAME})) ;;
  type: number
}

Erfahrene SQL-Nutzer können relativ komplexe 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 zu einem bestimmten Dimensionstyp.

sql für Dimensionsgruppen

Der Parameter sql für ein dimension_group akzeptiert jeden gültigen SQL-Ausdruck, der Daten in einem Zeitstempel-, Datums-/Uhrzeit-, Datums-, Epoch- oder „yyyymmdd“-Format enthält.

sql für Messungen

Der sql-Block für Messwerte hat in der Regel eine von zwei Formen:

  • Der SQL-Code, für den eine Aggregatfunktion (z. B. COUNT, SUM, AVG) ausgeführt wird. Dabei wird wieder der Looker-Substitutionsoperator verwendet, wie im Abschnitt SQL für Dimensionen beschrieben.
  • Ein Wert, der auf mehreren anderen Messwerten basiert

Um beispielsweise den Gesamtumsatz in Dollar zu berechnen, können wir Folgendes verwenden:

measure: total_revenue_in_dollars {
  sql: ${revenue_in_dollars} ;;
  type: sum
}

So berechnen wir den Gesamtgewinn:

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 zu einem bestimmten Messwerttyp.

Bei einem count-Messwerttyp können Sie den Parameter sql weglassen.

Bei anderen Arten von Messwerten geht Looker davon aus, dass in der zugrunde liegenden Tabelle eine Spalte mit demselben Namen wie das Feld vorhanden ist, wenn sql nicht angegeben wird. Da ein Messwert einen Namen haben sollte, der angibt, dass er eine Aggregation einer zugrunde liegenden Gruppe von Werten ist, sollten Sie in der Praxis immer einen sql-Parameter einfügen.

Mathematische SQL-Aufgaben

Bei der Division im sql-Parameter treten häufig zwei Probleme auf.

Wenn Sie in Ihrer Berechnung eine Division verwenden, sollten Sie sich zuerst vor einer Division durch null schützen, da dies einen SQL-Fehler verursacht. Verwenden Sie dazu die SQL-Funktion NULLIF. Beispiel: „Wenn der Nenner null ist, behandeln Sie ihn stattdessen als NULL.“

measure: active_users_percent {
  sql: ${active_users} / NULLIF(${users}, 0) ;;
  type: number
}

Ein weiteres Problem ist die Art und Weise, wie SQL mit Ganzzahlmathematik umgeht. Wenn Sie 5 durch 2 teilen, erwarten die meisten Menschen das Ergebnis 2,5. In vielen SQL-Dialekten wird das Ergebnis jedoch als „2“ zurückgegeben, da bei der Division von zwei Ganzzahlen auch das Ergebnis als Ganzzahl angegeben wird. Um dieses Problem zu beheben, können Sie den Zähler mit einer Dezimalzahl multiplizieren, damit SQL ein Dezimalergebnis zurückgibt. Beispiel:

measure: active_users_percent {
  sql: 100.00 * ${active_users} / NULLIF(${users}, 0) ;;
  type: number
}

Liquid-Variablen mit sql

Sie können auch Liquid-Variablen mit dem Parameter sql verwenden. Mit Liquid-Variablen können Sie auf Daten wie die Werte in einem Feld, Daten zum Feld und auf das Feld angewendete Filter zugreifen.

Mit dieser Dimension wird beispielsweise ein Kundenpasswort gemäß einem Looker-Nutzerattribut maskiert:

dimension: customer_password {
  sql:
    {% if _user_attributes['pw_access'] == 'yes' %}
      ${password}
    {% else %}
      "Password Hidden"
    {% endif %} ;;
}