Optimisation de la réutilisabilité du code avec DRY LookML: définissez les champs une seule fois, utilisez les opérateurs de substitution partout

Les définitions des champs LookML peuvent changer au fil du temps. Par exemple, le nom d'une colonne de base de données peut changer ou vous pouvez avoir besoin de modifier la définition d'un champ LookML pour d'autres raisons.

Si vous utilisez la syntaxe {TABLE}.field_name pour référencer une colonne de base de données directement à plusieurs endroits, vous devez mettre à jour chaque référence manuellement. Tous les champs qui font référence à cette dimension peuvent ne plus fonctionner si vous oubliez de les mettre à jour, et Looker affiche une erreur:

Looker affiche l'erreur "Colonne inconnue order_items.sale_price dans la liste des champs".

Pour rendre vos projets LookML plus efficaces et plus faciles à gérer, vous pouvez définir des champs au même endroit et utiliser l'opérateur de substitution ($) pour les référencer partout ailleurs.

Cette page fournit un exemple d'utilisation de l'opérateur de substitution (avec la syntaxe ${field_name}) pour faire référence à une seule dimension dans les définitions de plusieurs champs LookML.

Composants

Prérequis

Exemple: référence unique de la colonne de base de données sous-jacente pour une dimension

Définissez une colonne de table de base de données dans un projet LookML une seule fois à l'aide de la syntaxe ${TABLE}.field_name dans le paramètre sql de la dimension. Ensuite, référencez la dimension à l'aide de la syntaxe ${field_name} ou ${view_name.field_name} ailleurs dans votre projet. Vous pouvez ainsi gérer la définition LookML de la colonne de base de données au même endroit (la dimension ${TABLE}.field_name d'origine), ce qui est utile si vous devez la référencer à plusieurs endroits dans votre projet.

Par exemple, vous pouvez utiliser la syntaxe ${TABLE}.sale_price pour définir une dimension de base appelée sale_price dans une vue appelée order_items:


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

Lorsque vous définissez d'autres champs qui font référence à la dimension sale_price, vous pouvez utiliser la syntaxe ${sale_price} dans la vue order_items (ou la syntaxe ${order_items.sale_price} pour référencer la dimension sale_price dans d'autres vues).


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} ;;
}

Dans cet exemple, si le nom de la colonne de la dimension sale_price change, vous n'avez besoin de mettre à jour la référence ${TABLE}.sale_price qu'une seule fois, dans la définition de la dimension de base sale_price. Cette modification sera ensuite automatiquement appliquée aux champs profit, item_gross_margin et total_sale_price, ainsi qu'à tous les autres champs qui font référence à la dimension sale_price.