Looker est l outil BI le plus technique du marché. Sa valeur vient du LookML, le langage de modélisation sémantique. En entretien, on évalue la capacité à architecturer un modèle LookML maintenable.
Pourquoi le modèle sémantique LookML est-il la principale valeur de Looker ?
# view : définit les champs disponibles
view: orders {
sql_table_name: analytics.fct_orders ;;
dimension: order_id {
type: string
primary_key: yes
sql: ${TABLE}.order_id ;;
}
dimension_group: order_date {
type: time
timeframes: [date, week, month, quarter, year]
sql: ${TABLE}.order_date ;;
}
measure: total_revenue {
type: sum
sql: ${TABLE}.amount ;;
value_format_name: eur
description: 'Revenu total HT'
}
measure: avg_basket {
type: average
sql: ${TABLE}.amount ;;
}
}Comment organisez-vous vos explores pour qu ils restent performants ?
# model : assemble les explores
explore: orders {
label: 'Commandes et revenus'
description: 'Analyse des commandes, clients et produits'
join: customers {
type: left_outer
sql_on: ${orders.customer_id} = ${customers.customer_id} ;;
relationship: many_to_one
}
join: products {
type: left_outer
sql_on: ${orders.product_id} = ${products.product_id} ;;
relationship: many_to_one
}
# Restriction d accès selon le rôle
access_filter: {
field: customers.region
user_attribute: user_region
}
}Qu est-ce qu une PDT ? Dans quel cas l utilisez-vous ?
# PDT : table précalculée stockée dans le warehouse
view: revenue_by_cohort {
derived_table: {
sql:
SELECT
DATE_TRUNC('month', first_order_date) AS cohort_month,
DATE_TRUNC('month', order_date) AS activity_month,
COUNT(DISTINCT user_id) AS active_users
FROM ${orders.SQL_TABLE_NAME}
GROUP BY 1, 2 ;;
# Rebuild chaque nuit à 3h
persist_for: '24 hours'
# Ou via datagroup (déclenché par Airflow)
# datagroup_trigger: nightly_refresh
}
}Comment implémentez-vous une métrique de rétention à 30 jours dans LookML ?
view: orders {
# Dimension de période relative
dimension: days_since_last_order {
type: number
sql: DATE_DIFF(CURRENT_DATE, ${last_order_date}, DAY) ;;
}
# Mesure conditionnelle : clients actifs dans les 30 derniers jours
measure: active_customers_30d {
type: count_distinct
sql: CASE WHEN ${days_since_last_order} <= 30
THEN ${customer_id} END ;;
drill_fields: [customer_id, last_order_date]
}
# Mesure de ratio
measure: retention_rate_30d {
type: number
sql: ${active_customers_30d} * 1.0 / NULLIF(${total_customers}, 0) ;;
value_format_name: percent_2
}
}Comment gérez-vous le cycle de vie d un projet LookML en équipe ?
Comment optimisez-vous les performances d un explore Looker lent ?
| Niveau | Maitrise | Signal GO | NO-GO |
|---|---|---|---|
| Confirmé | LookML basics, views/explores/models, dimensions/mesures | A créé un explore avec jointures, sait la différence dimension/mesure | N a fait que cliquer dans l UI Looker sans toucher au LookML |
| Senior | PDTs, aggregate awareness, Git workflow, access filters | A créé des PDTs, gère le cache avec datagroups, travaille en branches Git | Ne sait pas ce qu est une PDT, n a jamais utilisé Git dans Looker |
Premier entretien gratuit. Rapport GO/NO-GO sous 48h.