Maximierung der Wiederverwendbarkeit von Code mit DRY LookML: Felder einmal definieren, Substitutionsoperatoren überall verwenden

LookML-Felddefinitionen können sich im Laufe der Zeit ändern. Beispielsweise kann sich der Name einer Datenbankspalte ändern oder Sie müssen die Definition eines LookML-Felds aus anderen Gründen ändern.

Wenn Sie mit der Syntax {TABLE}.field_name an mehreren Stellen direkt auf eine Datenbankspalte verweisen, müssen Sie jede Referenz manuell aktualisieren. Wenn Sie Felder, die auf diese Dimension verweisen, nicht aktualisieren, kann es zu Fehlern kommen. In Looker wird dann ein Fehler angezeigt:

In Looker wird in der Feldliste der Fehler „Unbekannte Spalte order_items.sale_price“ angezeigt.

Damit Ihre LookML-Projekte effizienter und einfacher zu verwalten sind, können Sie Felder an einer Stelle definieren und mit dem Ersetzungsoperator ($) an allen anderen Stellen auf diese Felder verweisen.

Diese Seite enthält ein Beispiel für die Verwendung des Substitutionsoperators (mit der Syntax ${field_name}), um in den Definitionen mehrerer LookML-Felder auf eine einzelne Dimension zu verweisen.

Produkte

Vorbereitung

Beispiel: Nur einmal auf die zugrunde liegende Datenbankspalte für eine Dimension verweisen

Definieren Sie eine Datenbanktabellenspalte in einem LookML-Projekt, indem Sie die Syntax ${TABLE}.field_name im sql-Parameter der Dimension verwenden. Verweisen Sie dann an anderer Stelle in Ihrem Projekt mit der Syntax ${field_name} oder ${view_name.field_name} auf die Dimension. So können Sie die LookML-Definition der Datenbankspalte an einer Stelle (der ursprünglichen ${TABLE}.field_name-Dimension) verwalten. Das ist hilfreich, wenn Sie an mehreren Stellen in Ihrem Projekt darauf verweisen müssen.

Sie können beispielsweise die Syntax ${TABLE}.sale_price verwenden, um eine Basisdimension namens sale_price in einer Ansicht mit dem Namen order_items zu definieren:


  dimension: sale_price {
    type: number
    value_format_name: usd
    sql: ${TABLE}.sale_price ;;
    description: "The price at which an item is set to sell."
  }

Wenn Sie andere Felder definieren, die auf die Dimension sale_price verweisen, können Sie in der Ansicht order_items die Syntax ${sale_price} verwenden. In anderen Ansichten können Sie die Syntax ${order_items.sale_price} verwenden, um auf die Dimension sale_price zu verweisen.


dimension: profit {
  type: number
  value_format_name: usd
  sql: ${sale_price} - ${inventory_items.cost} ;;
  description: "The difference between an item's sale price and an item's cost."
}

dimension: item_gross_margin {
  type: number
  value_format_name: percent_2
  sql: 1.0 * ${profit}/NULLIF(${sale_price},0) ;;
}

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

Wenn sich in diesem Beispiel der Spaltenname für die Dimension „sale_price“ ändert, müssen Sie den Verweis „${TABLE}.sale_price“ bei der Definition der Basisdimension „sale_price“ nur einmal aktualisieren. Diese Änderung wird dann automatisch auf die Felder profit, item_gross_margin und total_sale_price sowie auf alle anderen Felder übertragen, die auf die Dimension sale_price verweisen.