Maximiza la reutilización de código con DRY LookML: Define campos una vez y usa operadores de sustitución en todas partes

Las definiciones de los campos de LookML pueden cambiar con el tiempo. Por ejemplo, el nombre de una columna de base de datos puede cambiar, o es posible que debas cambiar la definición de un campo de LookML por otros motivos.

Si usas la sintaxis {TABLE}.field_name para hacer referencia a una columna de la base de datos directamente en varios lugares, debes actualizar cada referencia de forma manual. Los campos que hagan referencia a esa dimensión pueden fallar si olvidas actualizarlos, y Looker mostrará un error:

Looker muestra el error Unknown column order_items.sale_price en la lista de campos.

Para que tus proyectos de LookML sean más eficientes y fáciles de mantener, puedes definir campos en un solo lugar y usar el operador de sustitución ($) para hacer referencia a esos campos en el resto.

En esta página, se proporciona un ejemplo de cómo usar el operador de sustitución (con la sintaxis ${field_name}) para hacer referencia a una sola dimensión en las definiciones de varios campos de LookML.

Componentes

Requisitos previos

Ejemplo: Haz referencia a la columna de la base de datos subyacente solo una vez para una dimensión

Define una columna de tabla de base de datos en un proyecto de LookML una vez mediante la sintaxis ${TABLE}.field_name en el parámetro sql de la dimensión. Luego, haz referencia a la dimensión con la sintaxis ${field_name} o ${view_name.field_name} en otra parte del proyecto. Esto te permite mantener la definición de LookML de la columna de la base de datos en un solo lugar (la dimensión ${TABLE}.field_name original), que es útil si necesitas hacer referencia a ella en varios lugares de tu proyecto.

A modo de ejemplo, puedes usar la sintaxis ${TABLE}.sale_price para definir una dimensión base llamada sale_price en una vista llamada 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."
  }

Cuando definas otros campos que hagan referencia a la dimensión sale_price, puedes usar la sintaxis ${sale_price} en la vista order_items (o bien usar la sintaxis ${order_items.sale_price} para hacer referencia a la dimensión sale_price en otras vistas).


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

En este ejemplo, si cambia el nombre de la columna para la dimensión sale_price, solo deberás actualizar la referencia ${TABLE}.sale_price una vez, en la definición de la dimensión base sale_price. Este cambio se propagará automáticamente a los campos profit, item_gross_margin y total_sale_price, así como a todos los demás campos que hacen referencia a la dimensión sale_price.