Messtypen

Auf dieser Seite wird auf den Parameter type verwiesen, der Teil eines Messwerts ist.

type kann auch als Teil einer Dimension oder eines Filters verwendet werden, wie auf der Dokumentationsseite Dimensionen, Filter und Parametertypen beschrieben.

type kann auch als Teil einer Dimensionsgruppe verwendet werden, wie auf der Dokumentationsseite zum Parameter dimension_group beschrieben.

Nutzung

view: view_name {
  measure: field_name {
    type: measure_field_type
  }
}
Hierarchie
type
Mögliche Feldtypen
Messen

Akzeptiert
Ein Messungstyp

Auf dieser Seite finden Sie Details zu den verschiedenen Typen, die einem Messwert zugewiesen werden können. Ein Measure kann nur einen Typ haben. Wenn kein Typ angegeben ist, wird standardmäßig string verwendet.

Einige Measure-Typen haben unterstützende Parameter, die im entsprechenden Abschnitt beschrieben werden.

Kategorien von Measure-Typen

Jeder Messwerttyp fällt in eine der folgenden Kategorien. Diese Kategorien bestimmen, ob der Messwerttyp Aggregationen ausführt, auf welche Feldtypen der Messwerttyp verweisen kann und ob Sie den Messwerttyp mit dem Parameter filters filtern können:

  • Aggregierte Messwerte: Mit aggregierten Messwerttypen werden Aggregationen wie sum und average durchgeführt. Aggregierte Measures können nur Dimensionen referenzieren, keine anderen Measures. Dies ist der einzige Messwerttyp, der mit dem Parameter filters funktioniert.
  • Nicht aggregierte Messwerte: Nicht aggregierte Messwerte sind, wie der Name schon sagt, Messwerttypen, bei denen keine Aggregationen durchgeführt werden, z. B. number und yesno. Bei diesen Messwerttypen werden grundlegende Transformationen ausgeführt. Da keine Aggregationen erfolgen, können nur aggregierte Messwerte oder zuvor aggregierte Dimensionen referenziert werden. Der Parameter filters kann nicht mit diesen Messarten verwendet werden.
  • Post-SQL-Messwerte: Post-SQL-Messwerte sind spezielle Messwerttypen, die bestimmte Berechnungen ausführen, nachdem Looker die Abfrage-SQL generiert hat. Sie können nur numerische Messwerte oder numerische Dimensionen referenzieren. Der Parameter filters kann nicht mit diesen Messarten verwendet werden.

Liste der Typdefinitionen

Typ Kategorie Beschreibung
average Aggregieren Generiert einen Durchschnitt (Mittelwert) der Werte in einer Spalte
average_distinct Aggregieren Erstellt einen Durchschnitt (Mittelwert) von Werten, wenn denormalisierte Daten verwendet werden. Eine vollständige Beschreibung finden Sie im Abschnitt average_distinct.
count Aggregieren Generiert die Anzahl der Zeilen
count_distinct Aggregieren Generiert die Anzahl der eindeutigen Werte in einer Spalte
date Nicht aggregiert Für Messwerte, die Datumsangaben enthalten
list Aggregieren Erstellt eine Liste der eindeutigen Werte in einer Spalte
max Aggregieren Generiert den Maximalwert innerhalb einer Spalte
median Aggregieren Generiert den Median (Mittelwert) der Werte in einer Spalte.
median_distinct Aggregieren Generiert einen Medianwert (Mittelwert) der Werte, wenn ein Join zu einem Fanout führt. Eine vollständige Beschreibung finden Sie im Abschnitt median_distinct.
min Aggregieren Generiert den Mindestwert innerhalb einer Spalte
number Nicht aggregiert Für Messwerte, die Zahlen enthalten
percent_of_previous Post-SQL Generiert die prozentuale Differenz zwischen den angezeigten Zeilen
percent_of_total Post-SQL Generiert den Prozentsatz der Gesamtsumme für jede angezeigte Zeile
percentile Aggregieren Generiert den Wert am angegebenen Perzentil innerhalb einer Spalte
percentile_distinct Aggregieren Generiert den Wert am angegebenen Perzentil ordnungsgemäß, wenn ein Join ein Fanout verursacht. Eine vollständige Beschreibung finden Sie im Abschnitt percentile_distinct.
running_total Post-SQL Generiert die laufende Summe für jede angezeigte Zeile
period_over_period Aggregieren Verweist auf eine Aggregation aus einem früheren Zeitraum
string Nicht aggregiert Für Measures, die Buchstaben oder Sonderzeichen enthalten (wie bei der MySQL-Funktion GROUP_CONCAT)
sum Aggregieren Generiert eine Summe der Werte in einer Spalte
sum_distinct Aggregieren Generiert eine Summe von Werten, wenn denormalisierte Daten verwendet werden.

Eine vollständige Beschreibung finden Sie im Abschnitt sum_distinct.
yesno Nicht aggregiert Felder, in denen angezeigt wird, ob etwas wahr oder falsch ist
int Nicht aggregiert 5.4 entfernt Ersetzt durch type: number

average

type: average berechnet den Durchschnitt der Werte in einem bestimmten Feld. Sie ähnelt der SQL-Funktion AVG. Im Gegensatz zu Roh-SQL berechnet Looker Durchschnittswerte jedoch auch dann richtig, wenn die Joins Ihrer Abfrage Fanouts enthalten.

Der Parameter sql für type: average-Messwerte kann einen beliebigen gültigen SQL-Ausdruck enthalten, der zu einer numerischen Tabellenspalte, einer LookML-Dimension oder einer Kombination aus LookML-Dimensionen führt.

type: average-Felder können mit den Parametern value_format oder value_format_name formatiert werden.

Mit dem folgenden LookML-Code wird beispielsweise ein Feld namens avg_order erstellt, indem der Durchschnitt der Dimension sales_price berechnet wird. Anschließend wird es im Währungsformat ($1.234,56) angezeigt:

measure: avg_order {
  type: average
  sql: ${sales_price} ;;
  value_format_name: usd
}

average_distinct

type: average_distinct ist für die Verwendung mit denormalisierten Datasets vorgesehen. Es wird der Durchschnitt der nicht wiederholten Werte in einem bestimmten Feld berechnet, basierend auf den eindeutigen Werten, die durch den Parameter sql_distinct_key definiert sind.

Dies ist ein fortgeschrittenes Konzept, das sich am besten anhand eines Beispiels erklären lässt. Betrachten Sie eine denormalisierte Tabelle wie diese:

Artikel-ID des Bestellpostens Bestell-ID Bestellversand
1 1 10,00
2 1 10,00
3 2 20,00
4 2 20,00
5 2 20,00

In diesem Fall sehen Sie, dass für jede Bestellung mehrere Zeilen vorhanden sind. Wenn Sie also einen einfachen type: average-Messwert für die Spalte order_shipping hinzufügen, erhalten Sie den Wert 16,00, obwohl der tatsächliche Durchschnitt 15,00 beträgt.

 # Will NOT calculate the correct average
measure: avg_shipping {
  type: average
  sql: ${order_shipping} ;;
}

Um ein genaues Ergebnis zu erhalten, können Sie mit dem Parameter sql_distinct_key für Looker definieren, wie jede eindeutige Entität (in diesem Fall jede eindeutige Bestellung) identifiziert werden soll. Damit wird der richtige Betrag von 15,00 € berechnet:

 # Will calculate the correct average
measure: avg_shipping {
  type: average_distinct
  sql_distinct_key: ${order_id} ;;
  sql: ${order_shipping} ;;
}

Jeder eindeutige Wert von sql_distinct_key darf nur einen entsprechenden Wert in sql haben. Anders ausgedrückt: Das Beispiel oben funktioniert, weil jede Zeile mit einem order_id von 1 denselben order_shipping von 10,00 hat und jede Zeile mit einem order_id von 2 denselben order_shipping von 20,00 hat.

type: average_distinct-Felder können mit den Parametern value_format oder value_format_name formatiert werden.

count

type: count führt eine Tabellenzählung durch, ähnlich der SQL-Funktion COUNT. Im Gegensatz zu Roh-SQL berechnet Looker die Anzahl jedoch auch dann richtig, wenn die Joins Ihrer Abfrage Fanouts enthalten.

type: count-Messwerte führen Tabellenzählungen durch, die auf dem Primärschlüssel der Tabelle basieren. Daher unterstützen type: count-Messwerte den Parameter sql nicht.

Wenn Sie eine Tabellenzählung für ein anderes Feld als den Primärschlüssel der Tabelle durchführen möchten, verwenden Sie einen type: count_distinct-Messwert. Wenn Sie count_distinct nicht verwenden möchten, können Sie eine Measure von type: number verwenden. Weitere Informationen finden Sie im Community-Beitrag How to count a non-primary key.

Mit dem folgenden LookML-Code wird beispielsweise das Feld number_of_products erstellt:

view: products {
  measure: number_of_products {
    type: count
    drill_fields: [product_details*]  # optional
  }
}

Es ist sehr üblich, beim Definieren eines type: count-Messwerts einen drill_fields-Parameter (für Felder) anzugeben, damit Nutzer die einzelnen Datensätze sehen können, aus denen eine Anzahl besteht, wenn sie darauf klicken.

Wenn Sie in einem Explore das Measure type: count verwenden, werden die resultierenden Werte in der Visualisierung mit dem Namen der Ansicht und nicht mit dem Wort „Anzahl“ gekennzeichnet. Um Verwechslungen zu vermeiden, empfehlen wir, den Namen der Ansicht im Plural zu verwenden, in den Visualisierungseinstellungen unter Serie die Option Vollständigen Feldnamen anzeigen auszuwählen oder einen view_label mit einer Pluralversion des Ansichtsnamens zu verwenden.

Mit dem Parameter filters können Sie einer Messung vom Typ type: count einen Filter hinzufügen.

count_distinct

type: count_distinct berechnet die Anzahl der eindeutigen Werte in einem bestimmten Feld. Dabei wird die SQL-Funktion COUNT DISTINCT verwendet.

Der Parameter sql für type: count_distinct-Messwerte kann einen beliebigen gültigen SQL-Ausdruck enthalten, der eine Tabellenspalte, eine LookML-Dimension oder eine Kombination aus LookML-Dimensionen ergibt.

Mit dem folgenden LookML-Code wird beispielsweise das Feld number_of_unique_customers erstellt, in dem die Anzahl der eindeutigen Kundennummern gezählt wird:

measure: number_of_unique_customers {
  type: count_distinct
  sql: ${customer_id} ;;
}

Mit dem Parameter filters können Sie einem Messwert von type: count_distinct einen Filter hinzufügen.

date

type: date wird mit Feldern verwendet, die Datumsangaben enthalten.

Der Parameter sql für type: date-Messwerte kann einen beliebigen gültigen SQL-Ausdruck annehmen, der ein Datum ergibt. In der Praxis wird dieser Typ selten verwendet, da die meisten SQL-Aggregatfunktionen keine Datumsangaben zurückgeben. Eine häufige Ausnahme ist ein MIN oder MAX einer Datumsdimension.

Measure für maximales oder minimales Datum mit type: date erstellen

Wenn Sie einen Messwert für ein maximales oder minimales Datum erstellen möchten, denken Sie vielleicht zuerst, dass ein Messwert für type: max oder type: min funktionieren würde. Diese Messwerttypen sind jedoch nur mit numerischen Feldern kompatibel. Stattdessen können Sie ein maximales oder minimales Datum erfassen, indem Sie einen Measure vom Typ type: date definieren und das im Parameter sql referenzierte Datumsfeld in eine MIN()- oder MAX()-Funktion einbinden.

Angenommen, Sie haben eine Dimensionsgruppe vom Typ type: time mit dem Namen updated:

dimension_group: updated {
  type: time
  timeframes: [time, date, week, month, raw]
  sql: ${TABLE}.updated_at ;;
}

Sie können einen Messwert für type: date erstellen, um das maximale Datum dieser Dimensionsgruppe zu erfassen:

measure: last_updated_date {
  type: date
  sql: MAX(${updated_raw}) ;;
  convert_tz: no
}

In diesem Beispiel wird anstelle des Messwerts type: max zum Erstellen des Messwerts last_updated_date die Funktion MAX() im Parameter sql angewendet. Für die Messung last_updated_date ist außerdem der Parameter convert_tz auf no festgelegt, um eine doppelte Zeitzonenumrechnung in der Messung zu verhindern, da die Zeitzonenumrechnung bereits in der Definition der Dimensionsgruppe updated erfolgt ist. Weitere Informationen finden Sie in der Dokumentation zum Parameter convert_tz.

In der LookML-Beispieldefinition für den Messwert last_updated_date könnte type: date weggelassen werden. Der Wert würde dann als String behandelt, da string der Standardwert für type ist. Wenn Sie jedoch type: date verwenden, erhalten Sie bessere Filterfunktionen für Nutzer.

Möglicherweise stellen Sie auch fest, dass in der Messwertdefinition für last_updated_date auf den Zeitraum ${updated_raw} anstelle des Zeitraums ${updated_date} verwiesen wird. Da der von ${updated_date} zurückgegebene Wert ein String ist, muss stattdessen ${updated_raw} verwendet werden, um auf den tatsächlichen Datumswert zu verweisen.

Sie können den Parameter datatype auch mit type: date verwenden, um die Abfrageleistung zu verbessern, indem Sie den Typ der Datumsdaten angeben, die in Ihrer Datenbanktabelle verwendet werden.

Maximalen oder minimalen Messwert für eine Datetime-Spalte erstellen

Die Berechnung des Maximums für eine type: datetime-Spalte ist etwas anders. In diesem Fall möchten Sie ein Ergebnis erstellen, ohne den Typ zu deklarieren, wie hier:

measure: last_updated_datetime {
  sql: MAX(${TABLE}.datetime_string_field) ;;
}

list

type: list erstellt eine Liste der eindeutigen Werte in einem bestimmten Feld. Sie ähnelt der GROUP_CONCAT-Funktion von MySQL.

Für type: list-Messwerte müssen Sie keinen sql-Parameter angeben. Stattdessen können Sie mit dem Parameter list_field die Dimension angeben, aus der Sie Listen erstellen möchten.

Die Verwendung ist wie folgt:

view: view_name {
  measure: field_name {
    type: list
    list_field: my_field_name
  }
}

Mit dem folgenden LookML wird beispielsweise ein Messwert name_list auf Grundlage der Dimension name erstellt:

measure: name_list {
  type: list
  list_field: name
}

Beachten Sie Folgendes für list:

  • Der Messungstyp list unterstützt keine Filterung. Sie können den Parameter filters nicht für einen type: list-Messwert verwenden.
  • Auf den Messwerttyp list kann nicht mit dem Substitutionsoperator ($) verwiesen werden. Sie können die Syntax ${} nicht verwenden, um auf einen type: list-Messwert zu verweisen.

Unterstützte Datenbankdialekte für list

Damit Looker type: list in Ihrem Looker-Projekt unterstützen kann, muss es auch von Ihrem Datenbankdialekt unterstützt werden. In der folgenden Tabelle ist zu sehen, welche Dialekte type: list in der aktuellen Looker-Version unterstützen:

Dialekt Unterstützt?
Actian Avalanche
Amazon Athena
Amazon Aurora MySQL
Amazon Redshift
Amazon Redshift 2.1+
Amazon Redshift Serverless 2.1+
Apache Druid
Apache Druid 0.13.x - 0.17.x
Apache Druid 0.18+
Apache Hive 2.3+
Apache Hive 3.1.2+
Apache Spark 3+
ClickHouse
ClickHouse 26+
Cloudera Impala 3.1+
Cloudera Impala 3.1+ with Native Driver
Cloudera Impala with Native Driver
DataVirtuality
Databricks
Denodo 7
Denodo 8 & 9
Dremio
Dremio 11+
Dremio 26+ with Arrow Flight SQL
Exasol
Google BigQuery Legacy SQL
Google BigQuery Standard SQL
Google Cloud AlloyDB for PostgreSQL
Google Cloud PostgreSQL
Google Cloud SQL
Google Spanner
Greenplum
HyperSQL
IBM Netezza
MariaDB
Microsoft Azure PostgreSQL
Microsoft Azure SQL Database
Microsoft Azure Synapse Analytics
Microsoft SQL Server 2008+
Microsoft SQL Server 2012+
Microsoft SQL Server 2016
Microsoft SQL Server 2017+
MongoBI
MongoSQL
MySQL
MySQL 8.0.12+
Oracle
Oracle ADWC
PostgreSQL 9.5+
PostgreSQL pre-9.5
PrestoDB
PrestoSQL
SAP HANA
SAP HANA 2+
SingleStore
SingleStore 7+
Snowflake
Teradata
Trino
Vector
Vertica

max

Mit type: max wird der größte Wert in einem bestimmten Feld ermittelt. Dabei wird die SQL-Funktion MAX verwendet.

Der Parameter sql für Messwerte vom Typ type: max kann einen beliebigen gültigen SQL-Ausdruck enthalten, der eine numerische Tabellenspalte, eine LookML-Dimension oder eine Kombination aus LookML-Dimensionen ergibt.

Da Messwerte vom Typ type: max nur mit numerischen Feldern kompatibel sind, können Sie einen Messwert vom Typ type: max nicht verwenden, um ein maximales Datum zu finden. Stattdessen können Sie die Funktion MAX() im Parameter sql eines Measures vom Typ type: date verwenden, um ein maximales Datum zu erfassen, wie zuvor in den Beispielen im Abschnitt date gezeigt.

type: max-Felder können mit den Parametern value_format oder value_format_name formatiert werden.

Mit dem folgenden LookML-Code wird beispielsweise ein Feld namens largest_order erstellt, indem die Dimension sales_price herangezogen wird. Anschließend wird es im Währungsformat ($1,234.56) angezeigt:

measure: largest_order {
  type: max
  sql: ${sales_price} ;;
  value_format_name: usd
}

type: max-Messwerte können nicht für Strings oder Datumsangaben verwendet werden. Sie können die Funktion MAX jedoch manuell hinzufügen, um ein entsprechendes Feld zu erstellen, z. B. so:

measure: latest_name_in_alphabet {
  type: string
  sql: MAX(${name}) ;;
}

median

type: median gibt den Mittelwert für die Werte in einem bestimmten Feld zurück. Das ist besonders nützlich, wenn die Daten einige sehr große oder kleine Ausreißerwerte enthalten, die einen einfachen Durchschnitt (Mittelwert) der Daten verzerren würden.

Nehmen wir eine Tabelle wie diese:

Bestellartikel-ID Kosten Midpoint?
2 10,00
4 10,00
3 20,00 Mittelwert
1 80,00
5 90,00

Die Tabelle ist nach Kosten sortiert, was sich jedoch nicht auf das Ergebnis auswirkt. Während der Typ average den Wert 42 zurückgeben würde (alle Werte addiert und durch 5 geteilt), würde der Typ median den Mittelwert zurückgeben: 20,00.

Bei einer geraden Anzahl von Werten wird der Medianwert berechnet, indem der Mittelwert der beiden Werte ermittelt wird, die dem Mittelpunkt am nächsten sind. Nehmen wir eine Tabelle mit einer geraden Anzahl von Zeilen:

Bestellartikel-ID Kosten Midpoint?
2 10
3 20 Am nächsten vor der Routenhälfte
1 80 Nächster nach der Routenhälfte
4 90

Der Median, also der mittlere Wert, ist (20 + 80)/2 = 50.

Der Median entspricht auch dem Wert beim 50. Perzentil.

Der Parameter sql für type: median-Messwerte kann einen beliebigen gültigen SQL-Ausdruck enthalten, der eine numerische Tabellenspalte, eine LookML-Dimension oder eine Kombination aus LookML-Dimensionen ergibt.

type: median-Felder können mit den Parametern value_format oder value_format_name formatiert werden.

Beispiel

Mit dem folgenden LookML-Code wird beispielsweise ein Feld namens median_order erstellt, indem der Durchschnitt der Dimension sales_price berechnet wird. Anschließend wird es im Währungsformat ($1.234,56) angezeigt:

measure: median_order {
  type: median
  sql: ${sales_price} ;;
  value_format_name: usd
}

Wichtige Punkte für median

Wenn Sie median für ein Feld verwenden, das an einem Fanout beteiligt ist, versucht Looker stattdessen, median_distinct zu verwenden. medium_distinct wird jedoch nur für bestimmte Dialekte unterstützt. Wenn median_distinct für Ihren Dialekt nicht verfügbar ist, gibt Looker einen Fehler zurück. Da median als 50. Perzentil betrachtet werden kann, besagt der Fehler, dass der Dialekt keine unterschiedlichen Perzentile unterstützt.

Unterstützte Datenbankdialekte für median

Damit Looker den Typ median in Ihrem Looker-Projekt unterstützen kann, muss er auch von Ihrem Datenbankdialekt unterstützt werden. In der folgenden Tabelle ist zu sehen, welche Dialekte den Typ median in der neuesten Version von Looker unterstützen:

Dialekt Unterstützt?
Actian Avalanche
Amazon Athena
Amazon Aurora MySQL
Amazon Redshift
Amazon Redshift 2.1+
Amazon Redshift Serverless 2.1+
Apache Druid
Apache Druid 0.13.x - 0.17.x
Apache Druid 0.18+
Apache Hive 2.3+
Apache Hive 3.1.2+
Apache Spark 3+
ClickHouse
ClickHouse 26+
Cloudera Impala 3.1+
Cloudera Impala 3.1+ with Native Driver
Cloudera Impala with Native Driver
DataVirtuality
Databricks
Denodo 7
Denodo 8 & 9
Dremio
Dremio 11+
Dremio 26+ with Arrow Flight SQL
Exasol
Google BigQuery Legacy SQL
Google BigQuery Standard SQL
Google Cloud AlloyDB for PostgreSQL
Google Cloud PostgreSQL
Google Cloud SQL
Google Spanner
Greenplum
HyperSQL
IBM Netezza
MariaDB
Microsoft Azure PostgreSQL
Microsoft Azure SQL Database
Microsoft Azure Synapse Analytics
Microsoft SQL Server 2008+
Microsoft SQL Server 2012+
Microsoft SQL Server 2016
Microsoft SQL Server 2017+
MongoBI
MongoSQL
MySQL
MySQL 8.0.12+
Oracle
Oracle ADWC
PostgreSQL 9.5+
PostgreSQL pre-9.5
PrestoDB
PrestoSQL
SAP HANA
SAP HANA 2+
SingleStore
SingleStore 7+
Snowflake
Teradata
Trino
Vector
Vertica

Wenn eine Abfrage einen Fanout beinhaltet, versucht Looker, median in median_distinct umzuwandeln. Dies funktioniert nur bei Dialekten, die median_distinct unterstützen.

median_distinct

Verwenden Sie type: median_distinct, wenn Ihr Join einen Fanout beinhaltet. Es wird der Durchschnitt der nicht wiederholten Werte in einem bestimmten Feld berechnet, basierend auf den eindeutigen Werten, die durch den Parameter sql_distinct_key definiert sind. Wenn die Messung keinen sql_distinct_key-Parameter hat, versucht Looker, das Feld primary_key zu verwenden.

Sehen Sie sich das Ergebnis einer Abfrage an, bei der die Tabellen „Order Item“ und „Order“ zusammengeführt werden:

Bestellartikel-ID Bestell-ID Bestellversand
1 1 10
2 1 10
3 2 20
4 3 50
5 3 50
6 3 50

In diesem Fall sehen Sie, dass für jede Bestellung mehrere Zeilen vorhanden sind. Diese Abfrage beinhaltete ein Fanout, da jede Bestellung mehreren Bestellpositionen zugeordnet ist. Bei der Berechnung von median_distinct wird dies berücksichtigt und der Medianwert zwischen den einzelnen Werten 10, 20 und 50 ermittelt. Das Ergebnis ist also 20.

Damit Sie ein genaues Ergebnis erhalten, können Sie in Looker mit dem Parameter sql_distinct_key definieren, wie jede eindeutige Einheit (in diesem Fall jede eindeutige Bestellung) identifiziert werden soll. So wird der richtige Betrag berechnet:

measure: median_shipping {
  type: median_distinct
  sql_distinct_key: ${order_id} ;;
  sql: ${order_shipping} ;;
}

Jeder eindeutige Wert von sql_distinct_key muss genau einen entsprechenden Wert im Parameter sql der Messung haben. Anders ausgedrückt: Das obige Beispiel funktioniert, weil jede Zeile mit einem order_id von 1 denselben order_shipping von 10 hat und jede Zeile mit einem order_id von 2 denselben order_shipping von 20 hat.

type: median_distinct-Felder können mit den Parametern value_format oder value_format_name formatiert werden.

Wichtige Punkte für median_distinct

Der Messwerttyp medium_distinct wird nur für bestimmte Dialekte unterstützt. Wenn median_distinct für den Dialekt nicht verfügbar ist, gibt Looker einen Fehler zurück. Da der median als 50. Perzentil betrachtet werden kann, besagt der Fehlerstatus, dass der Dialekt keine unterschiedlichen Perzentile unterstützt.

Unterstützte Datenbankdialekte für median_distinct

Damit Looker den Typ median_distinct in Ihrem Looker-Projekt unterstützen kann, muss er auch von Ihrem Datenbankdialekt unterstützt werden. In der folgenden Tabelle ist zu sehen, welche Dialekte den Typ median_distinct in der aktuellen Version von Looker unterstützen:

Dialekt Unterstützt?
Actian Avalanche
Amazon Athena
Amazon Aurora MySQL
Amazon Redshift
Amazon Redshift 2.1+
Amazon Redshift Serverless 2.1+
Apache Druid
Apache Druid 0.13.x - 0.17.x
Apache Druid 0.18+
Apache Hive 2.3+
Apache Hive 3.1.2+
Apache Spark 3+
ClickHouse
ClickHouse 26+
Cloudera Impala 3.1+
Cloudera Impala 3.1+ with Native Driver
Cloudera Impala with Native Driver
DataVirtuality
Databricks
Denodo 7
Denodo 8 & 9
Dremio
Dremio 11+
Dremio 26+ with Arrow Flight SQL
Exasol
Google BigQuery Legacy SQL
Google BigQuery Standard SQL
Google Cloud AlloyDB for PostgreSQL
Google Cloud PostgreSQL
Google Cloud SQL
Google Spanner
Greenplum
HyperSQL
IBM Netezza
MariaDB
Microsoft Azure PostgreSQL
Microsoft Azure SQL Database
Microsoft Azure Synapse Analytics
Microsoft SQL Server 2008+
Microsoft SQL Server 2012+
Microsoft SQL Server 2016
Microsoft SQL Server 2017+
MongoBI
MongoSQL
MySQL
MySQL 8.0.12+
Oracle
Oracle ADWC
PostgreSQL 9.5+
PostgreSQL pre-9.5
PrestoDB
PrestoSQL
SAP HANA
SAP HANA 2+
SingleStore
SingleStore 7+
Snowflake
Teradata
Trino
Vector
Vertica

min

type: min findet den kleinsten Wert in einem bestimmten Feld. Dabei wird die SQL-Funktion MIN verwendet.

Der Parameter sql für Messwerte vom Typ type: min kann einen beliebigen gültigen SQL-Ausdruck enthalten, der eine numerische Tabellenspalte, eine LookML-Dimension oder eine Kombination aus LookML-Dimensionen ergibt.

Da type: min-Messwerte nur mit numerischen Feldern kompatibel sind, können Sie keinen type: min-Messwert verwenden, um ein Mindestdatum zu ermitteln. Stattdessen können Sie die Funktion MIN() im Parameter sql eines Measures vom Typ type: date verwenden, um ein Minimum zu erfassen, genau wie Sie die Funktion MAX() mit einem Measure vom Typ type: date verwenden können, um ein maximales Datum zu erfassen. Dies wurde bereits im Abschnitt date auf dieser Seite gezeigt. Dort finden Sie Beispiele für die Verwendung der Funktion MAX() im Parameter sql, um ein maximales Datum zu finden.

type: min-Felder können mit den Parametern value_format oder value_format_name formatiert werden.

Mit dem folgenden LookML-Code wird beispielsweise ein Feld namens smallest_order erstellt, indem die Dimension sales_price betrachtet und dann im Währungsformat ($1,234.56) angezeigt wird:

measure: smallest_order {
  type: min
  sql: ${sales_price} ;;
  value_format_name: usd
}

type: min-Messwerte können nicht für Strings oder Datumsangaben verwendet werden. Sie können die Funktion MIN jedoch manuell hinzufügen, um ein entsprechendes Feld zu erstellen, z. B. so:

measure: earliest_name_in_alphabet {
  type: string
  sql: MIN(${name}) ;;
}

number

type: number wird mit Zahlen oder Ganzzahlen verwendet. Bei einem Messwert vom Typ type: number wird keine Aggregation ausgeführt. Er ist für die Durchführung einfacher Transformationen anderer Messwerte vorgesehen. Wenn Sie einen Messwert definieren, der auf einem anderen Messwert basiert, muss der neue Messwert vom Typ type: number sein, um Fehler bei verschachtelten Aggregationen zu vermeiden.

Der Parameter sql für type: number-Messwerte kann einen beliebigen gültigen SQL-Ausdruck enthalten, der eine Zahl oder eine Ganzzahl ergibt.

type: number-Felder können mit den Parametern value_format oder value_format_name formatiert werden.

Mit dem folgenden LookML-Code wird beispielsweise ein Messwert namens total_gross_margin_percentage auf Grundlage der aggregierten Messwerte total_sale_price und total_gross_margin erstellt und dann in einem Prozentformat mit zwei Dezimalstellen (12,34%) angezeigt:

measure: total_sale_price {
  type: sum
  value_format_name: usd
  sql: ${sale_price} ;;
}

measure: total_gross_margin {
  type: sum
  value_format_name: usd
  sql: ${gross_margin} ;;
}

measure: total_gross_margin_percentage {
  type: number
  value_format_name: percent_2
  sql: ${total_gross_margin}/ NULLIF(${total_sale_price},0) ;;
}

In diesem Beispiel wird auch die SQL-Funktion NULLIF() verwendet, um die Möglichkeit von Fehlern durch Division durch null auszuschließen.

Wichtige Punkte für type: number

Bei der Verwendung von type: number-Messwerten sind einige wichtige Punkte zu beachten:

  • Ein Messwert vom Typ type: number kann nur arithmetische Operationen für andere Messwerte, nicht für andere Dimensionen ausführen.
  • Symmetrische Aggregate von Looker schützen keine Aggregatfunktionen im SQL-Code eines Measures type: number, wenn sie über einen Join berechnet werden.
  • Der Parameter filters kann nicht mit type: number-Messwerten verwendet werden. In der Dokumentation zu filters wird jedoch eine Problemumgehung erläutert.
  • type: number Maßnahmen liefern Nutzern keine Vorschläge.

percent_of_previous

Mit type: percent_of_previous wird die prozentuale Differenz zwischen einer Zelle und der vorherigen Zelle in ihrer Spalte berechnet.

Der Parameter sql für type: percent_of_previous-Messungen muss auf einen anderen numerischen Messwert verweisen.

type: percent_of_previous-Felder können mit den Parametern value_format oder value_format_name formatiert werden. Die Prozentformate des Parameters value_format_name funktionieren jedoch nicht mit type: percent_of_previous-Messwerten. Bei diesen Prozentformaten werden Werte mit 100 multipliziert, was die Ergebnisse einer Berechnung des Prozentsatzes des vorherigen Werts verzerrt.

In diesem LookML-Beispiel wird ein count_growth-Messwert erstellt, der auf dem count-Messwert basiert:

measure: count_growth {
  type: percent_of_previous
  sql: ${count} ;;
}

Die percent_of_previous-Werte hängen von der Sortierreihenfolge ab. Wenn Sie die Sortierung ändern, müssen Sie die Abfrage noch einmal ausführen, um die percent_of_previous-Werte neu zu berechnen. Wenn eine Abfrage pivotiert wird, wird percent_of_previous zeilenweise statt spaltenweise ausgeführt. Dieses Verhalten kann nicht geändert werden.

Außerdem werden percent_of_previous-Messwerte berechnet, nachdem Daten aus Ihrer Datenbank zurückgegeben wurden. Das bedeutet, dass Sie nicht auf einen percent_of_previous-Messwert in einem anderen Messwert verweisen sollten, da sie möglicherweise zu unterschiedlichen Zeiten berechnet werden und Sie daher keine genauen Ergebnisse erhalten. Außerdem können percent_of_previous-Messwerte nicht gefiltert werden.

Eine Anwendung für diese Art von Messung ist die Analyse von Zeitraum zu Zeitraum (Period-over-Period, PoP). Dabei wird etwas in der Gegenwart gemessen und mit derselben Messung in einem vergleichbaren Zeitraum in der Vergangenheit verglichen. Weitere Informationen zu PoP finden Sie in den Artikeln How to do Period-over-Period Analysis und Methods for Period Over Period (PoP) Analysis in Looker in der Looker-Community.

percent_of_total

type: percent_of_total berechnet den Anteil einer Zelle an der Spaltensumme. Der Prozentsatz wird anhand der Gesamtzahl der von Ihrer Abfrage zurückgegebenen Zeilen und nicht anhand der Gesamtzahl aller möglichen Zeilen berechnet. Wenn die von Ihrer Abfrage zurückgegebenen Daten jedoch ein Zeilenlimit überschreiten, werden die Werte des Felds als Nullwerte angezeigt, da für die Berechnung des Prozentsatzes der Gesamtsumme die vollständigen Ergebnisse erforderlich sind.

Der Parameter sql für type: percent_of_total-Messwerte muss auf einen anderen numerischen Messwert verweisen.

type: percent_of_total-Felder können mit den Parametern value_format oder value_format_name formatiert werden. Die Prozentformate des Parameters value_format_name funktionieren jedoch nicht mit type: percent_of_total-Messwerten. Bei diesen Prozentformaten werden Werte mit 100 multipliziert, was die Ergebnisse einer percent_of_total-Berechnung verfälscht.

In diesem Beispiel wird mit LookML der Messwert percent_of_total_gross_margin erstellt, der auf dem Messwert total_gross_margin basiert:

measure: percent_of_total_gross_margin {
  type: percent_of_total
  sql: ${total_gross_margin} ;;
}

Wenn eine Abfrage pivotiert wird, wird percent_of_total zeilenweise statt spaltenweise ausgeführt. Wenn Sie das nicht möchten, fügen Sie der Definition des Messwerts direction: "column" hinzu.

Außerdem werden percent_of_total-Messwerte berechnet, nachdem Daten aus Ihrer Datenbank zurückgegeben wurden. Das bedeutet, dass Sie nicht auf einen percent_of_total-Messwert in einem anderen Messwert verweisen sollten, da sie möglicherweise zu unterschiedlichen Zeiten berechnet werden und Sie daher keine genauen Ergebnisse erhalten. Außerdem können percent_of_total-Messwerte nicht gefiltert werden.

percentile

type: percentile gibt den Wert am angegebenen Perzentil der Werte in einem bestimmten Feld zurück. Wenn Sie beispielsweise das 75. Perzentil angeben, wird der Wert zurückgegeben, der größer als 75% der anderen Werte im Dataset ist.

Um den zurückzugebenden Wert zu ermitteln, berechnet Looker die Gesamtzahl der Datenwerte und multipliziert das angegebene Perzentil mit der Gesamtzahl der Datenwerte. Unabhängig davon, wie die Daten tatsächlich sortiert sind, identifiziert Looker die relative Reihenfolge der Datenwerte in aufsteigender Reihenfolge. Der von Looker zurückgegebene Datenwert hängt davon ab, ob die Berechnung eine Ganzzahl ergibt oder nicht, wie in den folgenden beiden Abschnitten beschrieben.

Wenn der berechnete Wert keine Ganzzahl ist

Looker rundet den berechneten Wert auf und verwendet ihn, um den zurückzugebenden Datenwert zu ermitteln. In diesem Beispiel mit 19 Testergebnissen wird das 75. Perzentil durch 19 * 0,75 = 14,25 identifiziert. Das bedeutet, dass 75% der Werte in den ersten 14 Datenwerten liegen, also unter der 15. Position. Daher gibt Looker den 15. Datenwert (87) als größer als 75% der Datenwerte zurück.

Wenn der berechnete Wert eine Ganzzahl ist

In diesem etwas komplexeren Fall gibt Looker einen Durchschnitt des Datenwerts an dieser Position und des folgenden Datenwerts zurück. Sehen wir uns dazu eine Reihe von 20 Testergebnissen an: Das 75. Perzentil wird durch 20 * 0, 75 = 15 ermittelt. Das bedeutet, dass der Datenwert an der 15. Position zum 75. Perzentil gehört und wir einen Wert zurückgeben müssen, der höher als 75% der Datenwerte ist. Durch die Rückgabe des Durchschnitts der Werte an der 15. Position (82) und der 16. Position (87) stellt Looker sicher, dass 75 % der Werte unter dem Ergebnis liegen. Dieser Durchschnitt (84,5) ist nicht in der Menge der Datenwerte enthalten, wäre aber größer als 75% der Datenwerte.

Erforderliche und optionale Parameter

Mit dem Keyword percentile: geben Sie den Bruchteilswert an, also den Prozentsatz der Daten, der unter dem zurückgegebenen Wert liegen soll. Verwenden Sie beispielsweise percentile: 75, um den Wert am 75. Perzentil in der Reihenfolge der Daten anzugeben, oder percentile: 10, um den Wert am 10. Perzentil zurückzugeben. Wenn Sie den Wert am 50. Perzentil ermitteln möchten, können Sie percentile: 50 angeben oder einfach den Typ median verwenden.

Der Parameter sql für type: percentile-Messwerte kann einen beliebigen gültigen SQL-Ausdruck enthalten, der eine numerische Tabellenspalte, eine LookML-Dimension oder eine Kombination aus LookML-Dimensionen ergibt.

type: percentile-Felder können mit den Parametern value_format oder value_format_name formatiert werden.

Beispiel

Mit dem folgenden LookML-Code wird beispielsweise ein Feld namens test_scores_75th_percentile erstellt, das den Wert des 75. Perzentils in der Dimension test_scores zurückgibt:

measure: test_scores_75th_percentile {
  type: percentile
  percentile: 75
  sql: ${TABLE}.test_scores ;;
}

Wichtige Punkte für percentile

Wenn Sie percentile für ein Feld verwenden, das an einem Fanout beteiligt ist, versucht Looker stattdessen, percentile_distinct zu verwenden. Wenn percentile_distinct für den Dialekt nicht verfügbar ist, gibt Looker einen Fehler zurück. Weitere Informationen finden Sie unter Unterstützte Dialekte für percentile_distinct.

Unterstützte Datenbankdialekte für percentile

Damit Looker den Typ percentile in Ihrem Looker-Projekt unterstützen kann, muss er auch von Ihrem Datenbankdialekt unterstützt werden. In der folgenden Tabelle ist zu sehen, welche Dialekte den Typ percentile in der neuesten Version von Looker unterstützen:

Dialekt Unterstützt?
Actian Avalanche
Amazon Athena
Amazon Aurora MySQL
Amazon Redshift
Amazon Redshift 2.1+
Amazon Redshift Serverless 2.1+
Apache Druid
Apache Druid 0.13.x - 0.17.x
Apache Druid 0.18+
Apache Hive 2.3+
Apache Hive 3.1.2+
Apache Spark 3+
ClickHouse
ClickHouse 26+
Cloudera Impala 3.1+
Cloudera Impala 3.1+ with Native Driver
Cloudera Impala with Native Driver
DataVirtuality
Databricks
Denodo 7
Denodo 8 & 9
Dremio
Dremio 11+
Dremio 26+ with Arrow Flight SQL
Exasol
Google BigQuery Legacy SQL
Google BigQuery Standard SQL
Google Cloud AlloyDB for PostgreSQL
Google Cloud PostgreSQL
Google Cloud SQL
Google Spanner
Greenplum
HyperSQL
IBM Netezza
MariaDB
Microsoft Azure PostgreSQL
Microsoft Azure SQL Database
Microsoft Azure Synapse Analytics
Microsoft SQL Server 2008+
Microsoft SQL Server 2012+
Microsoft SQL Server 2016
Microsoft SQL Server 2017+
MongoBI
MongoSQL
MySQL
MySQL 8.0.12+
Oracle
Oracle ADWC
PostgreSQL 9.5+
PostgreSQL pre-9.5
PrestoDB
PrestoSQL
SAP HANA
SAP HANA 2+
SingleStore
SingleStore 7+
Snowflake
Teradata
Trino
Vector
Vertica

percentile_distinct

Der type: percentile_distinct ist eine spezielle Form des Perzentils und sollte verwendet werden, wenn Ihr Join einen Fanout umfasst. Dabei werden die nicht wiederholten Werte in einem bestimmten Feld verwendet, die auf den eindeutigen Werten basieren, die durch den Parameter sql_distinct_key definiert werden. Wenn die Messung keinen sql_distinct_key-Parameter hat, versucht Looker, das Feld primary_key zu verwenden.

Sehen Sie sich das Ergebnis einer Abfrage an, bei der die Tabellen „Order Item“ und „Order“ zusammengeführt werden:

Bestellartikel-ID Bestell-ID Bestellversand
1 1 10
2 1 10
3 2 20
4 3 50
5 3 50
6 3 50
7 4 70
8 4 70
9 5 110
10 5 110

In diesem Fall gibt es mehrere Zeilen für jede Bestellung. Diese Abfrage beinhaltete ein Fanout, da jede Bestellung mehreren Bestellpositionen zugeordnet ist. Bei percentile_distinct wird dies berücksichtigt und der Perzentilwert wird anhand der eindeutigen Werte 10, 20, 50, 70 und 110 ermittelt. Das 25. Perzentil gibt den zweiten eindeutigen Wert zurück, also 20, während das 80. Perzentil den Durchschnitt des vierten und fünften eindeutigen Werts zurückgibt, also 90.

Erforderliche und optionale Parameter

Verwenden Sie das Keyword percentile:, um den Bruchwert anzugeben. Verwenden Sie beispielsweise percentile: 75, um den Wert am 75. Perzentil in der Reihenfolge der Daten anzugeben, oder percentile: 10, um den Wert am 10. Perzentil zurückzugeben. Wenn Sie den Wert beim 50. Perzentil ermitteln möchten, können Sie stattdessen den Typ median_distinct verwenden.

Um ein genaues Ergebnis zu erhalten, geben Sie mit dem Parameter sql_distinct_key an, wie Looker jede eindeutige Entität (in diesem Fall jede eindeutige Bestellung) identifizieren soll.

Hier ein Beispiel für die Verwendung von percentile_distinct, um den Wert am 90. Perzentil zurückzugeben:

measure: order_shipping_90th_percentile {
  type: percentile_distinct
  percentile: 90
  sql_distinct_key: ${order_id} ;;
  sql: ${order_shipping} ;;
}

Jeder eindeutige Wert von sql_distinct_key darf nur einen entsprechenden Wert im Parameter sql des Messwerts haben. Anders gesagt: Das Beispiel oben funktioniert, weil jede Zeile mit dem order_id-Wert 1 denselben order_shipping-Wert 10 hat und jede Zeile mit dem order_id-Wert 2 denselben order_shipping-Wert 20 hat.

type: percentile_distinct-Felder können mit den Parametern value_format oder value_format_name formatiert werden.

Wichtige Punkte für percentile_distinct

Wenn percentile_distinct für den Dialekt nicht verfügbar ist, gibt Looker einen Fehler zurück. Weitere Informationen finden Sie unter Unterstützte Dialekte für percentile_distinct.

Unterstützte Datenbankdialekte für percentile_distinct

Damit Looker den Typ percentile_distinct in Ihrem Looker-Projekt unterstützen kann, muss er auch von Ihrem Datenbankdialekt unterstützt werden. In der folgenden Tabelle ist zu sehen, welche Dialekte den Typ percentile_distinct in der aktuellen Version von Looker unterstützen:

Dialekt Unterstützt?
Actian Avalanche
Amazon Athena
Amazon Aurora MySQL
Amazon Redshift
Amazon Redshift 2.1+
Amazon Redshift Serverless 2.1+
Apache Druid
Apache Druid 0.13.x - 0.17.x
Apache Druid 0.18+
Apache Hive 2.3+
Apache Hive 3.1.2+
Apache Spark 3+
ClickHouse
ClickHouse 26+
Cloudera Impala 3.1+
Cloudera Impala 3.1+ with Native Driver
Cloudera Impala with Native Driver
DataVirtuality
Databricks
Denodo 7
Denodo 8 & 9
Dremio
Dremio 11+
Dremio 26+ with Arrow Flight SQL
Exasol
Google BigQuery Legacy SQL
Google BigQuery Standard SQL
Google Cloud AlloyDB for PostgreSQL
Google Cloud PostgreSQL
Google Cloud SQL
Google Spanner
Greenplum
HyperSQL
IBM Netezza
MariaDB
Microsoft Azure PostgreSQL
Microsoft Azure SQL Database
Microsoft Azure Synapse Analytics
Microsoft SQL Server 2008+
Microsoft SQL Server 2012+
Microsoft SQL Server 2016
Microsoft SQL Server 2017+
MongoBI
MongoSQL
MySQL
MySQL 8.0.12+
Oracle
Oracle ADWC
PostgreSQL 9.5+
PostgreSQL pre-9.5
PrestoDB
PrestoSQL
SAP HANA
SAP HANA 2+
SingleStore
SingleStore 7+
Snowflake
Teradata
Trino
Vector
Vertica

period_over_period

Für Dialekte, die periodenübergreifende Messwerte unterstützen, können Sie einen LookML-Messwert vom Typ type: period_over_period erstellen, um einen periodenübergreifenden Messwert zu erstellen. Ein PoP-Messwert bezieht sich auf eine Aggregation aus einem früheren Zeitraum.

Hier ist ein Beispiel für eine PoP-Messung, die die Anzahl der Bestellungen des Vormonats liefert:

  measure: orders_last_month {
    type: period_over_period
    based_on: orders.count
    based_on_time: orders.created_month
    period: month
    kind: previous
  }

Messwerte mit type: period_over_period müssen auch die folgenden Unterparameter haben:

Weitere Informationen und Beispiele finden Sie unter Periodenübergreifende Messwerte in Looker.

running_total

type: running_total berechnet eine kumulative Summe der Zellen in einer Spalte. Sie kann nicht verwendet werden, um Summen entlang einer Zeile zu berechnen, es sei denn, die Zeile ist das Ergebnis einer Pivotierung.

Der Parameter sql für type: running_total-Messwerte muss auf einen anderen numerischen Messwert verweisen.

type: running_total-Felder können mit den Parametern value_format oder value_format_name formatiert werden.

Im folgenden LookML-Beispiel wird das Messwert-cumulative_total_revenue auf Grundlage des Messwerts total_sale_price erstellt:

measure: cumulative_total_revenue {
  type: running_total
  sql: ${total_sale_price} ;;
  value_format_name: usd
}

Die Werte für running_total hängen von der Sortierreihenfolge ab. Wenn Sie die Sortierung ändern, müssen Sie die Abfrage noch einmal ausführen, um die running_total-Werte neu zu berechnen. Wenn eine Abfrage pivotiert wird, wird running_total über die Zeile anstatt über die Spalte ausgeführt. Wenn das nicht Ihren Vorstellungen entspricht, fügen Sie der Messwertdefinition direction: "column" hinzu.

Außerdem werden running_total-Messwerte berechnet, nachdem Daten aus Ihrer Datenbank zurückgegeben wurden. Das bedeutet, dass Sie nicht innerhalb eines anderen Measures auf ein running_total-Measure verweisen sollten. Da sie zu unterschiedlichen Zeiten berechnet werden können, erhalten Sie möglicherweise keine genauen Ergebnisse. Das bedeutet auch, dass running_total-Messwerte nicht gefiltert werden können.

string

type: string wird für Felder verwendet, die Buchstaben oder Sonderzeichen enthalten.

Der Parameter sql für type: string-Messwerte kann jeden gültigen SQL-Ausdruck annehmen, der einen String ergibt. In der Praxis wird dieser Typ selten verwendet, da die meisten SQL-Aggregatfunktionen keine Strings zurückgeben. Eine häufige Ausnahme ist die GROUP_CONCAT-Funktion von MySQL. Looker bietet jedoch type: list für diesen Anwendungsfall.

Mit dem folgenden LookML-Code wird beispielsweise ein Feld category_list erstellt, indem die eindeutigen Werte eines Felds mit dem Namen category kombiniert werden:

measure: category_list {
  type: string
  sql: GROUP_CONCAT(${category}) ;;
}

In diesem Beispiel könnte type: string weggelassen werden, da string der Standardwert für type ist.

sum

type: sum addiert die Werte in einem bestimmten Feld. Sie ähnelt der SQL-Funktion SUM. Anders als bei rohem SQL berechnet Looker Summen jedoch auch dann richtig, wenn die Joins Ihrer Abfrage Fanouts enthalten.

Der Parameter sql für type: sum-Messwerte kann einen beliebigen gültigen SQL-Ausdruck enthalten, der eine numerische Tabellenspalte, eine LookML-Dimension oder eine Kombination aus LookML-Dimensionen ergibt.

type: sum-Felder können mit den Parametern value_format oder value_format_name formatiert werden.

Mit dem folgenden LookML-Code wird beispielsweise ein Feld namens total_revenue erstellt, indem die Dimension sales_price addiert wird. Anschließend wird es im Währungsformat ($1.234,56) angezeigt:

measure: total_revenue {
  type: sum
  sql: ${sales_price} ;;
  value_format_name: usd
}

sum_distinct

type: sum_distinct ist für die Verwendung mit denormalisierten Datasets vorgesehen. Dabei werden die nicht wiederholten Werte in einem bestimmten Feld addiert, basierend auf den eindeutigen Werten, die durch den Parameter sql_distinct_key definiert sind.

Dies ist ein fortgeschrittenes Konzept, das sich am besten anhand eines Beispiels erklären lässt. Betrachten Sie eine denormalisierte Tabelle wie diese:

Artikel-ID des Bestellpostens Bestell-ID Bestellversand
1 1 10,00
2 1 10,00
3 2 20,00
4 2 20,00
5 2 20,00

In diesem Fall gibt es mehrere Zeilen für jede Bestellung. Wenn Sie also einen type: sum-Messwert für die Spalte order_shipping hinzufügen, erhalten Sie insgesamt 80,00, obwohl die gesamten Versandkosten tatsächlich 30,00 betragen.

 # Will NOT calculate the correct shipping amount
measure: total_shipping {
  type: sum
  sql: ${order_shipping} ;;
}

Damit Sie ein genaues Ergebnis erhalten, können Sie in Looker mit dem Parameter sql_distinct_key definieren, wie jede eindeutige Einheit (in diesem Fall jede eindeutige Bestellung) identifiziert werden soll. Damit wird der korrekte Betrag von 30,00 berechnet:

 # Will calculate the correct shipping amount
measure: total_shipping {
  type: sum_distinct
  sql_distinct_key: ${order_id} ;;
  sql: ${order_shipping} ;;
}

Jeder eindeutige Wert von sql_distinct_key darf nur einen entsprechenden Wert in sql haben. Anders gesagt: Das Beispiel oben funktioniert, weil jede Zeile mit einer order_id von 1 dieselbe order_shipping von 10,00 hat und jede Zeile mit einer order_id von 2 dieselbe order_shipping von 20,00 hat.

type: sum_distinct-Felder können mit den Parametern value_format oder value_format_name formatiert werden.

yesno

type: yesno erstellt ein Feld, das angibt, ob etwas wahr oder falsch ist. Die Werte werden in der Explore-Benutzeroberfläche als Ja und Nein angezeigt.

Der Parameter sql für einen type: yesno-Messwert akzeptiert einen gültigen SQL-Ausdruck, der als TRUE oder FALSE ausgewertet wird. Wenn die Bedingung als TRUE ausgewertet wird, wird dem Nutzer Ja angezeigt, andernfalls Nein.

Der SQL-Ausdruck für type: yesno-Messwerte darf nur Aggregationen enthalten, d. h. SQL-Aggregationen oder Verweise auf LookML-Messwerte. Wenn Sie ein yesno-Feld erstellen möchten, das einen Verweis auf eine LookML-Dimension oder einen SQL-Ausdruck enthält, der keine Aggregation ist, verwenden Sie eine Dimension mit type: yesno und keinen Messwert.

Ähnlich wie bei Messungen mit type: number werden bei einer Messung mit type: yesno keine Aggregationen durchgeführt. Es wird nur auf andere Aggregationen verwiesen.

Das folgende Beispiel für den total_sale_price-Messwert ist beispielsweise eine Summe des Gesamtverkaufspreises von Bestellartikeln in einer Bestellung. Ein zweiter Messwert namens is_large_total ist type: yesno. Der Measure is_large_total hat einen sql-Parameter, mit dem geprüft wird, ob der total_sale_price-Wert größer als 1.000 € ist.

measure: total_sale_price {
  type: sum
  value_format_name: usd
  sql: ${sale_price} ;;
  drill_fields: [detail*]
}
measure: is_large_total {
  description: "Is order total over $1000?"
  type: yesno
  sql: ${total_sale_price} > 1000 ;;
}

Wenn Sie in einem anderen Feld auf ein type: yesno-Feld verweisen möchten, sollten Sie das type: yesno-Feld als booleschen Wert behandeln, d. h. so, als ob es bereits einen „true“- oder „false“-Wert enthält. Beispiel:

measure: is_large_total {
  description: "Is order total over $1000?"
  type: yesno
  sql: ${total_sale_price} > 1000 ;;
}
# This is correct:
measure: reward_points {
  type: number
  sql: CASE WHEN ${is_large_total} THEN 200 ELSE 100 END ;;
}
# This is NOT correct:
measure: reward_points {
  type: number
  sql: CASE WHEN ${is_large_total} = 'Yes' THEN 200 ELSE 100 END ;;
}