Tutoriel : créer une vue de métrique avec des jointures et une modélisation des données

Dans ce tutoriel, vous créez une vue de métriques Sales Analytics sur le jeu de données TPC-H. À la fin, vous aurez une vue de métrique qui :

  • Relie les commandes et les clients entre plusieurs tables à l’aide d’un schéma en flocon.
  • Définit des champs (également appelés dimensions) pour les attributs de temps, de géographie et de commande.
  • Calcule des mesures simples et complexes, notamment les ratios, les agrégations filtrées et les mesures de fenêtre.
  • Utilise la composabilité pour créer des métriques complexes à partir de mesures plus simples.
  • Définit un paramètre pour appliquer un taux de remise au moment de la requête.
  • Inclut les métadonnées de l’agent pour les tableaux de bord et les outils IA.

Si vous débutez avec les vues de métriques, commencez par créer une vue de métrique pour découvrir les principes de base. Ce tutoriel étend cette base avec une complexité réelle.

Exigences

Pour suivre ce didacticiel, vous avez besoin de :

  • Un espace de travail activé pour le catalogue Unity.
  • Une ressource d'entrepôt SQL ou de calcul exécutant Databricks Runtime 17.3 ou une version ultérieure.

Pour obtenir la liste complète des privilèges requis pour créer une vue de métrique, consultez Conditions préalables.

Note

La création d’une vue métrique est prise en charge sur Databricks Runtime 16.4 et versions ultérieures. Ce didacticiel utilise des fonctionnalités qui nécessitent Databricks Runtime 17.3 ou version ultérieure, et certaines étapes nécessitent un runtime ultérieur. Pour le runtime minimal pour chaque fonctionnalité, consultez la disponibilité des fonctionnalités de vue de métrique.

Modèle de données

Le jeu de données TPC-H modélise une chaîne d’approvisionnement en gros. Ce tutoriel utilise trois tables jointes dans un schéma snowflake :

  • orders jointures à customer on o_custkey = c_custkey
  • customer jointures à nation on c_nationkey = n_nationkey
Table Role Colonnes clés
orders Table de faits (transactions de commande) o_orderkey, , o_custkeyo_totalprice, , o_orderdateo_orderstatus
customer Table de dimensionnement (détails du client) c_custkey, c_name, c_mktsegment, c_nationkey
nation Table de dimension (référence pays ou région) n_nationkey, n_name, n_regionkey

Étape 1 : Créer l’affichage des métriques et ouvrir l’éditeur

Vous pouvez générer cette vue de métrique dans l’interface utilisateur de l’Explorateur de catalogues, la générer avec Genie Code ou écrire directement la définition YAML complète. Les trois méthodes se résolvent en une seule définition YAML qui modélise l’affichage des métriques. Dans chaque étape suivante, sélectionnez l’onglet De l’interface utilisateur de l’Explorateur de catalogues ou de l’éditeur YAML pour suivre votre méthode préférée. Si vous utilisez l’éditeur YAML, l’exemple de code de chaque étape est la partie de la définition YAML qui correspond à ce que vous générez à cette étape.

Note

Les exemples YAML de ce didacticiel utilisent le fields mot clé. Lorsque vous générez une vue de métrique dans l’éditeur de faible code, le YAML qu’il génère utilise plutôt le mot clé équivalent dimensions . Voir Champs.

Si vous n’êtes pas familiarisé avec l’interface utilisateur pour créer des vues de métriques, consultez Créer une vue de métrique.

Pour créer l’affichage des métriques, dans l’Explorateur de catalogues :

  1. Recherchez samples.tpch.orders.
  2. Cliquez sur le nom de la table.
  3. Cliquez sur Créer un>affichage métrique et nommez l’affichage.

Pour connaître les étapes de création détaillées, consultez Créer une vue de métrique. Lorsque l’éditeur s’ouvre, utilisez l’onglet interface utilisateur pour générer de manière interactive ou cliquez sur le <> bouton pour modifier la définition YAML directement.

Étape 2 : Configurer l’affichage des métriques

Définissez une version et une description pour l’affichage des métriques. version détermine la version de la spécification YAML, et comment documente l’objectif de la vue des métriques, qui apparaît dans l’Explorateur de catalogues. Azure Databricks gère la version pour vous.

Interface utilisateur de l’Explorateur de catalogues

La version est définie pour vous. Pour ajouter ou modifier la description après avoir enregistré l’affichage des métriques :

  1. Dans l’Explorateur de catalogues, recherchez l’affichage des métriques et cliquez sur son nom.
  2. Cliquez sur Description, puis entrez une description de l’affichage des métriques. Vous pouvez utiliser l’exemple de description affiché dans l’onglet de l’éditeur YAML .

Ce texte correspond au comment champ de la définition YAML. Pour plus d’informations sur la modification d’une vue de métrique, consultez Modifier une vue de métrique.

Éditeur YAML

version: 1.1

comment: |-
  Sales analytics metric view for order performance analysis.
  Joins orders with customers and geography.
  Owner: Analytics Team
  Last updated: 2025-01-15

Étape 3 : Définir la source et les jointures

Définissez la table source principale et joignez les tables associées :

  • source définit la table de faits (commandes) comme grain.
  • joins apporte des données client à l’aide d’une relation de plusieurs à un.
  • La jointure imbriquée nation illustre un modèle de schéma en flocon, en passant par customer pour accéder aux données géographiques, où la nation est une sous-dimension du client.

Interface utilisateur de l’Explorateur de catalogues

Cet exemple ajoute deux jointures, toutes deux Plusieurs-à-un, pour modéliser le schéma en flocon.

Pour ajouter la customer jonction :

  1. Dans l’éditeur, cliquez sur Joindre dans le coin supérieur droit pour ouvrir la boîte de dialogue Ajouter une jointure .
  2. Recherchez samples.tpch.customer, cliquez sur le nom de la table, puis cliquez sur Ajouter.
  3. Définissez la condition de jointure sur o_custkey = c_custkey.
  4. Sous Jointure cardinalité, sélectionnez Plusieurs-à-un. Pour obtenir des conseils sur le choix d’une cardinalité, consultez La cardinalité de jointure.

Ajoutez ensuite la jointure imbriquée nation. Répétez les étapes de l’étape customer join, en joignant samples.tpch.nation sur c_nationkey = n_nationkey. Imbriquer la jointure sous customer modélise la nation comme sous-dimension du client.

Pour connaître les étapes de la boîte de dialogue de jointure complète, consultez l’étape 2 : Ajouter une jointure.

Éditeur YAML

source: SELECT * FROM samples.tpch.orders

joins:
  - name: customer
    source: samples.tpch.customer
    'on': o_custkey = c_custkey
    joins:
      - name: nation
        source: samples.tpch.nation
        'on': c_nationkey = n_nationkey

Étape 4 : Définir un filtre

Un filter limite les données source et s’applique à toutes les requêtes sur la vue de métriques. Ce didacticiel limite l’affichage des métriques aux données récentes.

Interface utilisateur de l’Explorateur de catalogues

Pour définir le filtre :

  1. Dans l’éditeur, cliquez sur l’icône Filtrer.Filtrez dans le coin supérieur droit.
  2. Utilisez les menus déroulants pour définir la colonne sur o_orderdate, l’opérateur sur >=, et la valeur sur 1995-01-01.

Pour plus d’informations sur les filtres, consultez l’étape 3 : Définir un filtre.

Éditeur YAML

filter: o_orderdate >= '1995-01-01'

Étape 5 : Définir des champs

Les champs sont les attributs que les utilisateurs utilisent pour regrouper et filtrer. Un champ peut être une colonne catégorielle (telle que la région ou l’état) ou une colonne numérique non agrégée (telle que l’âge ou la quantité) que les utilisateurs agrègent au moment de la requête.

Métadonnées de l’agent

Chaque champ et mesure de ce didacticiel inclut des propriétés de métadonnées d’agent qui améliorent le fonctionnement de votre vue de métrique avec les tableaux de bord et les outils IA :

  • display_name: étiquette lisible qui apparaît dans les visualisations au lieu du nom de colonne technique.
  • synonyms: Autres noms qui aident les outils d’IA tels que Genie à découvrir des champs et des mesures grâce à des requêtes en langage naturel.
  • format: comment les valeurs s’affichent dans des surfaces en aval telles que des tableaux de bord, des notebooks et des résultats de requête SQL, par exemple en tant que devise, nombre ou pourcentage.

Ces propriétés sont facultatives mais recommandées. Les définitions des champs et des mesures figurant dans les étapes suivantes les incluent directement dans le texte.

Définitions des champs

Ce tutoriel ajoute :

  • Champs de temps :order_date, order_monthet order_year à plusieurs granularités pour prendre en charge différents besoins d’analyse.
  • Champs transformés :order_status et order_priority, qui utilisent CASE et SPLIT pour convertir des codes sources en étiquettes lisibles.
  • Champs joints :customer_name, market_segmentet customer_nation, qui référencent des tables jointes à l’aide du nom de jointure. Les colonnes de jointure imbriquées utilisent la notation à points enchaînés, par exemple customer.nation.n_name, pour parcourir le schéma en flocon.

Interface utilisateur de l’Explorateur de catalogues

L’éditeur ajoute automatiquement toutes les colonnes sources à l’onglet Champs . Modifiez, renommez, supprimez et ajoutez des champs afin que l’affichage des métriques définisse exactement ce qui suit. Pour chaque champ, cliquez sur son nom pour le modifier ou cliquez sur Ajouter ou ajouter une icôneAjouter pour le créer, puis définissez l’expression en mode Générateur ou Personnalisé . Définissez le nom complet et les synonymes pour chaque champ, comme indiqué.

  1. order_date : en mode Générateur , sélectionnez la o_orderdate colonne. Définissez le nom d’affichage sur Order Date.

  2. order_month : en mode personnalisé , entrez DATE_TRUNC('MONTH', order_date). Définissez le nom d’affichage sur Order Month.

  3. order_year : en mode personnalisé , entrez YEAR(order_date). Définissez le nom d’affichage sur Order Year.

  4. order_status : en mode personnalisé , entrez l’expression suivante. Définissez le nom d’affichage sur Order Status et les synonymes sur status, fulfillment status.

    CASE o_orderstatus
      WHEN 'O' THEN 'Open'
      WHEN 'P' THEN 'Processing'
      WHEN 'F' THEN 'Fulfilled'
    END
    
  5. order_priority : en mode personnalisé , entrez SPLIT(o_orderpriority, '-')[0]. Définissez le nom d’affichage sur Priority.

  6. customer_name : en mode Générateur , sélectionnez la c_name colonne dans la table jointe customer . Définissez le nom d’affichage sur Customer Name.

  7. market_segment : en mode Générateur , sélectionnez la c_mktsegment colonne dans la table jointe customer . Définissez le nom d’affichage sur Market Segment et les synonymes sur segment, industry.

  8. customer_nation : en mode personnalisé, entrez customer.nation.n_name pour faire référence à la jointure imbriquée nation. Définissez le nom d’affichage sur Country et les synonymes sur nation, country.

Pour connaître les étapes complètes du champ, consultez l’étape 4 : Ajouter des champs.

Éditeur YAML

fields:
  - name: order_date
    expr: o_orderdate
    display_name: Order Date

  - name: order_month
    expr: "DATE_TRUNC('MONTH', order_date)"
    display_name: Order Month

  - name: order_year
    expr: YEAR(order_date)
    display_name: Order Year

  - name: order_status
    expr: |-
      CASE o_orderstatus
        WHEN 'O' THEN 'Open'
        WHEN 'P' THEN 'Processing'
        WHEN 'F' THEN 'Fulfilled'
      END
    display_name: Order Status
    synonyms:
      - status
      - fulfillment status

  - name: order_priority
    expr: "SPLIT(o_orderpriority, '-')[0]"
    display_name: Priority

  - name: customer_name
    expr: customer.c_name
    display_name: Customer Name

  - name: market_segment
    expr: customer.c_mktsegment
    display_name: Market Segment
    synonyms:
      - segment
      - industry

  - name: customer_nation
    expr: customer.nation.n_name
    display_name: Country
    synonyms:
      - nation
      - country

Étape 6 : Définir des paramètres

Les paramètres vous permettent de passer des valeurs dans la vue de métrique lorsque vous l’interrogez, afin qu’une définition unique puisse servir de nombreuses variantes de requête. Ce tutoriel ajoute un discount paramètre qu’une mesure ultérieure utilise pour calculer les revenus réduits. Le paramètre a une valeur par défaut 0, de sorte que les requêtes qui ne passent pas de valeur retournent des revenus non comptabilisés. Pour plus d’informations sur les paramètres, consultez Utiliser des paramètres avec des vues de métriques.

Interface utilisateur de l’Explorateur de catalogues

Dans le titre de l’éditeur, cliquez sur Ajouter un paramètre. Entrez discount comme nom, puis entrez une valeur par défaut de 0 et sélectionnez le type de données double.

Éditeur YAML

parameters:
  - name: discount
    data_type: double
    default: 0

Étape 7 : Définir des mesures

Les mesures sont les calculs que les utilisateurs souhaitent analyser. Définissez d’abord les mesures atomiques, puis utilisez la composabilité pour créer des métriques complexes qui référencent des mesures définies précédemment avec la MEASURE() fonction. Définissez le display_name, formatet synonyms pour chaque mesure, comme décrit dans les métadonnées de l’Agent. Ce tutoriel ajoute :

  • Mesures atomiques :order_count, total_revenueet unique_customers, les agrégations simples qui forment les blocs de construction.
  • Mesures composées :avg_order_value et revenue_per_customer, qui font référence à des mesures définies précédemment au MEASURE() lieu de dupliquer la logique d’agrégation. Si total_revenue des modifications sont apportées, ces mesures utilisent automatiquement la définition mise à jour. Consultez Composabilité.
  • Mesures filtrées :open_order_revenue et fulfilled_order_revenue, qui permettent FILTER (WHERE ...) de créer des métriques conditionnelles sans champs distincts.
  • Mesure paramétrable :discounted_revenue, qui fait référence au discount paramètre pour appliquer un taux de remise. Voir Utiliser des paramètres avec des vues métriques.
  • Mesure de fenêtre :t7d_customers, qui calcule un nombre continu de 7 jours de clients uniques. Consultez les mesures de fenêtre pour plus de modèles de mesures de fenêtre.

Interface utilisateur de l’Explorateur de catalogues

L’éditeur ajoute automatiquement une mesure d’exemple COUNT(*). Modifiez ou supprimez-le et ajoutez des mesures afin que l’affichage des métriques définit exactement les éléments suivants. Pour chaque mesure, cliquez sur Ajouter ou ajouter une icône Ajouter, puis définissez l’expression en mode Générateur ou Personnalisé. Définissez le nom d’affichage, le format et les synonymes comme indiqué. Utilisez 2 décimales pour les formats monétaires et 0 décimales pour les formats numériques.

  1. order_count : en mode Créateur, sélectionnez l’agrégation Nombre de valeurs distinctes sur o_orderkey. Définissez le nom d’affichage sur Order Count, le format sur Nombre.
  2. total_revenue : dans le mode Builder, sélectionnez l’agrégation Somme sur o_totalprice. Définissez le nom d’affichage sur Total Revenue, le format sur Devise (USD), les synonymes sur revenue, sales.
  3. discounted_revenue : en mode personnalisé , entrez SUM(o_totalprice * (1 - discount)). Définissez le nom d’affichage sur Discounted Revenue, le format sur Devise (USD).
  4. unique_customers : en mode Générateur, sélectionnez l’agrégation Nombre de valeurs distinctes sur o_custkey. Définissez le nom d’affichage sur Unique Customers, le format sur Nombre.
  5. avg_order_value : en mode personnalisé , entrez MEASURE(total_revenue) / MEASURE(order_count). Définissez le nom d’affichage sur Avg Order Value, le format sur Devise (USD), les synonymes sur AOV.
  6. revenue_per_customer : en mode personnalisé , entrez MEASURE(total_revenue) / MEASURE(unique_customers). Définissez le nom d’affichage sur Revenue per Customer, le format sur Devise (USD).
  7. open_order_revenue: En mode Personnalisé, saisissez SUM(o_totalprice) FILTER (WHERE o_orderstatus = 'O'). Définissez le nom d’affichage sur Open Order Revenue, le format sur Devise (USD) et les synonymes sur backlog.
  8. fulfilled_order_revenue : en mode personnalisé , entrez SUM(o_totalprice) FILTER (WHERE o_orderstatus = 'F'). Définissez le nom d’affichage sur Fulfilled Revenue, le format sur Monétaire (USD).
  9. t7d_customers : en mode personnalisé , entrez COUNT(DISTINCT o_custkey). Cliquez ensuite sur + Fenêtre et configurez une fenêtre ordonnée par order_date, avec une plage trailing 7 day et une agrégation semi-additive last. Définissez le nom d’affichage sur 7-Day Rolling Customers, le format sur Nombre.

Pour connaître les étapes de mesure complètes, consultez l’étape 5 : Ajouter des mesures.

Éditeur YAML

measures:
  - name: order_count
    expr: COUNT(DISTINCT o_orderkey)
    display_name: Order Count
    format:
      type: number
      decimal_places:
        type: exact
        places: 0
      abbreviation: compact

  - name: total_revenue
    expr: SUM(o_totalprice)
    display_name: Total Revenue
    format:
      type: currency
      currency_code: USD
      decimal_places:
        type: exact
        places: 2
      abbreviation: compact
    synonyms:
      - revenue
      - sales

  - name: discounted_revenue
    expr: SUM(o_totalprice * (1 - discount))
    display_name: Discounted Revenue
    format:
      type: currency
      currency_code: USD
      decimal_places:
        type: exact
        places: 2
      abbreviation: compact

  - name: unique_customers
    expr: COUNT(DISTINCT o_custkey)
    display_name: Unique Customers
    format:
      type: number
      decimal_places:
        type: exact
        places: 0
      abbreviation: compact

  - name: avg_order_value
    expr: MEASURE(total_revenue) / MEASURE(order_count)
    display_name: Avg Order Value
    format:
      type: currency
      currency_code: USD
      decimal_places:
        type: exact
        places: 2
      abbreviation: compact
    synonyms:
      - AOV

  - name: revenue_per_customer
    expr: MEASURE(total_revenue) / MEASURE(unique_customers)
    display_name: Revenue per Customer
    format:
      type: currency
      currency_code: USD
      decimal_places:
        type: exact
        places: 2
      abbreviation: compact

  - name: open_order_revenue
    expr: SUM(o_totalprice) FILTER (WHERE o_orderstatus = 'O')
    display_name: Open Order Revenue
    format:
      type: currency
      currency_code: USD
      decimal_places:
        type: exact
        places: 2
      abbreviation: compact
    synonyms:
      - backlog

  - name: fulfilled_order_revenue
    expr: SUM(o_totalprice) FILTER (WHERE o_orderstatus = 'F')
    display_name: Fulfilled Revenue
    format:
      type: currency
      currency_code: USD
      decimal_places:
        type: exact
        places: 2
      abbreviation: compact

  - name: t7d_customers
    expr: COUNT(DISTINCT o_custkey)
    window:
      - order: order_date
        semiadditive: last
        range: trailing 7 day
    display_name: 7-Day Rolling Customers
    format:
      type: number
      decimal_places:
        type: exact
        places: 0

Passer en revue la définition complète

Une fois les étapes ci-dessus terminées, votre vue de métrique a la définition complète suivante :

Afficher la définition YAML complète
version: 1.1

parameters:
  - name: discount
    data_type: double
    default: 0

source: SELECT * FROM samples.tpch.orders

joins:
  - name: customer
    source: samples.tpch.customer
    'on': o_custkey = c_custkey
    joins:
      - name: nation
        source: samples.tpch.nation
        'on': c_nationkey = n_nationkey

filter: o_orderdate >= '1995-01-01'

comment: |-
  Sales analytics metric view for order performance analysis.
  Joins orders with customers and geography.
  Owner: Analytics Team
  Last updated: 2025-01-15

fields:
  - name: order_date
    expr: o_orderdate
    display_name: Order Date
  - name: order_month
    expr: "DATE_TRUNC('MONTH', order_date)"
    display_name: Order Month
  - name: order_year
    expr: YEAR(order_date)
    display_name: Order Year
  - name: order_status
    expr: |-
      CASE o_orderstatus
        WHEN 'O' THEN 'Open'
        WHEN 'P' THEN 'Processing'
        WHEN 'F' THEN 'Fulfilled'
      END
    display_name: Order Status
    synonyms:
      - status
      - fulfillment status
  - name: order_priority
    expr: "SPLIT(o_orderpriority, '-')[0]"
    display_name: Priority
  - name: customer_name
    expr: customer.c_name
    display_name: Customer Name
  - name: market_segment
    expr: customer.c_mktsegment
    display_name: Market Segment
    synonyms:
      - segment
      - industry
  - name: customer_nation
    expr: customer.nation.n_name
    display_name: Country
    synonyms:
      - nation
      - country

measures:
  - name: order_count
    expr: COUNT(DISTINCT o_orderkey)
    display_name: Order Count
    format:
      type: number
      decimal_places:
        type: exact
        places: 0
      abbreviation: compact
  - name: total_revenue
    expr: SUM(o_totalprice)
    display_name: Total Revenue
    format:
      type: currency
      currency_code: USD
      decimal_places:
        type: exact
        places: 2
      abbreviation: compact
    synonyms:
      - revenue
      - sales
  - name: discounted_revenue
    expr: SUM(o_totalprice * (1 - discount))
    display_name: Discounted Revenue
    format:
      type: currency
      currency_code: USD
      decimal_places:
        type: exact
        places: 2
      abbreviation: compact
  - name: unique_customers
    expr: COUNT(DISTINCT o_custkey)
    display_name: Unique Customers
    format:
      type: number
      decimal_places:
        type: exact
        places: 0
      abbreviation: compact
  - name: avg_order_value
    expr: MEASURE(total_revenue) / MEASURE(order_count)
    display_name: Avg Order Value
    format:
      type: currency
      currency_code: USD
      decimal_places:
        type: exact
        places: 2
      abbreviation: compact
    synonyms:
      - AOV
  - name: revenue_per_customer
    expr: MEASURE(total_revenue) / MEASURE(unique_customers)
    display_name: Revenue per Customer
    format:
      type: currency
      currency_code: USD
      decimal_places:
        type: exact
        places: 2
      abbreviation: compact
  - name: open_order_revenue
    expr: SUM(o_totalprice) FILTER (WHERE o_orderstatus = 'O')
    display_name: Open Order Revenue
    format:
      type: currency
      currency_code: USD
      decimal_places:
        type: exact
        places: 2
      abbreviation: compact
    synonyms:
      - backlog
  - name: fulfilled_order_revenue
    expr: SUM(o_totalprice) FILTER (WHERE o_orderstatus = 'F')
    display_name: Fulfilled Revenue
    format:
      type: currency
      currency_code: USD
      decimal_places:
        type: exact
        places: 2
      abbreviation: compact
  - name: t7d_customers
    expr: COUNT(DISTINCT o_custkey)
    window:
      - order: order_date
        semiadditive: last
        range: trailing 7 day
    display_name: 7-Day Rolling Customers
    format:
      type: number
      decimal_places:
        type: exact
        places: 0
Créer la vue métrique à l’aide de SQL

Si vous créez cette définition en dehors de l’Explorateur de catalogues, exécutez le code SQL suivant pour créer l’affichage des métriques :

CREATE OR REPLACE VIEW catalog.schema.tpch_sales_analytics
WITH METRICS
LANGUAGE YAML
AS $$
version: 1.1

parameters:
  - name: discount
    data_type: double
    default: 0

source: SELECT * FROM samples.tpch.orders

joins:
  - name: customer
    source: samples.tpch.customer
    'on': o_custkey = c_custkey
    joins:
      - name: nation
        source: samples.tpch.nation
        'on': c_nationkey = n_nationkey

filter: o_orderdate >= '1995-01-01'

comment: |-
  Sales analytics metric view for order performance analysis.
  Joins orders with customers and geography.
  Owner: Analytics Team
  Last updated: 2025-01-15

fields:
  - name: order_date
    expr: o_orderdate
    display_name: Order Date
  - name: order_month
    expr: "DATE_TRUNC('MONTH', order_date)"
    display_name: Order Month
  - name: order_year
    expr: YEAR(order_date)
    display_name: Order Year
  - name: order_status
    expr: |-
      CASE o_orderstatus
        WHEN 'O' THEN 'Open'
        WHEN 'P' THEN 'Processing'
        WHEN 'F' THEN 'Fulfilled'
      END
    display_name: Order Status
    synonyms:
      - status
      - fulfillment status
  - name: order_priority
    expr: "SPLIT(o_orderpriority, '-')[0]"
    display_name: Priority
  - name: customer_name
    expr: customer.c_name
    display_name: Customer Name
  - name: market_segment
    expr: customer.c_mktsegment
    display_name: Market Segment
    synonyms:
      - segment
      - industry
  - name: customer_nation
    expr: customer.nation.n_name
    display_name: Country
    synonyms:
      - nation
      - country

measures:
  - name: order_count
    expr: COUNT(DISTINCT o_orderkey)
    display_name: Order Count
    format:
      type: number
      decimal_places:
        type: exact
        places: 0
      abbreviation: compact
  - name: total_revenue
    expr: SUM(o_totalprice)
    display_name: Total Revenue
    format:
      type: currency
      currency_code: USD
      decimal_places:
        type: exact
        places: 2
      abbreviation: compact
    synonyms:
      - revenue
      - sales
  - name: discounted_revenue
    expr: SUM(o_totalprice * (1 - discount))
    display_name: Discounted Revenue
    format:
      type: currency
      currency_code: USD
      decimal_places:
        type: exact
        places: 2
      abbreviation: compact
  - name: unique_customers
    expr: COUNT(DISTINCT o_custkey)
    display_name: Unique Customers
    format:
      type: number
      decimal_places:
        type: exact
        places: 0
      abbreviation: compact
  - name: avg_order_value
    expr: MEASURE(total_revenue) / MEASURE(order_count)
    display_name: Avg Order Value
    format:
      type: currency
      currency_code: USD
      decimal_places:
        type: exact
        places: 2
      abbreviation: compact
    synonyms:
      - AOV
  - name: revenue_per_customer
    expr: MEASURE(total_revenue) / MEASURE(unique_customers)
    display_name: Revenue per Customer
    format:
      type: currency
      currency_code: USD
      decimal_places:
        type: exact
        places: 2
      abbreviation: compact
  - name: open_order_revenue
    expr: SUM(o_totalprice) FILTER (WHERE o_orderstatus = 'O')
    display_name: Open Order Revenue
    format:
      type: currency
      currency_code: USD
      decimal_places:
        type: exact
        places: 2
      abbreviation: compact
    synonyms:
      - backlog
  - name: fulfilled_order_revenue
    expr: SUM(o_totalprice) FILTER (WHERE o_orderstatus = 'F')
    display_name: Fulfilled Revenue
    format:
      type: currency
      currency_code: USD
      decimal_places:
        type: exact
        places: 2
      abbreviation: compact
  - name: t7d_customers
    expr: COUNT(DISTINCT o_custkey)
    window:
      - order: order_date
        semiadditive: last
        range: trailing 7 day
    display_name: 7-Day Rolling Customers
    format:
      type: number
      decimal_places:
        type: exact
        places: 0
$$;

Pour d’autres façons de créer une vue de métrique, consultez Créer une vue de métrique.

Étape 8 : Interroger votre vue des métriques

Interrogez la vue des métriques à l’aide de la syntaxe conviviale pour l’entreprise. La MEASURE() fonction agrège une mesure au niveau du grain des champs que vous sélectionnez.

Agréger des mesures par dimension

Cet exemple agrège les mesures sur plusieurs champs. Elle retourne le chiffre d’affaires total, le nombre de commandes et la valeur moyenne des commandes par nation client et segment de marché, classés en premier par chiffre d’affaires le plus élevé :

SELECT
  customer_nation,
  market_segment,
  MEASURE(total_revenue) AS total_revenue,
  MEASURE(order_count) AS order_count,
  MEASURE(avg_order_value) AS avg_order_value
FROM catalog.schema.tpch_sales_analytics
GROUP BY customer_nation, market_segment
ORDER BY total_revenue DESC;

Analyser une tendance mensuelle

Cet exemple combine un champ de temps avec des mesures pour suivre une tendance. Elle retourne le chiffre d’affaires total et le chiffre d’affaires des commandes ouvertes (backlog) par mois et l’état de commande :

SELECT
  order_month,
  order_status,
  MEASURE(total_revenue) AS total_revenue,
  MEASURE(open_order_revenue) AS open_order_revenue
FROM catalog.schema.tpch_sales_analytics
GROUP BY order_month, order_status
ORDER BY order_month;

Passer une valeur de paramètre

Étant donné que la vue de métrique définit un paramètre, vous pouvez l’appeler en tant que fonction table et passer une valeur au moment de la requête. La requête suivante applique une remise de 10%. Étant donné qu’elle discount a une valeur par défaut 0, les requêtes qui omettent l’argument retournent des revenus non comptabilisés :

SELECT
  customer_nation,
  MEASURE(total_revenue) AS total_revenue,
  MEASURE(discounted_revenue) AS discounted_revenue
FROM catalog.schema.tpch_sales_analytics(discount => 0.1)
GROUP BY customer_nation
ORDER BY discounted_revenue DESC;

Ce que vous avez appris

Vous avez créé une vue de métrique qui illustre :

Fonctionnalité Example
Jointures de schéma Snowflake Commandes des clients par nation (jointures de plusieurs-à-un imbriquées)
Champs d’heure Date, mois, granularité annuelle
Champs transformés CASE instructions, SPLIT fonctions
Mesures simples COUNT, SUM
Composabilité avg_order_value et revenue_per_customer référencer des mesures définies précédemment à l’aide de MEASURE()
Mesures filtrées FILTER (WHERE ...) pour les agrégations conditionnelles
Mesures de fenêtre Nombre de clients sur 7 jours glissants à l’aide de trailing 7 day
Paramètres discount paramètre appliqué dans la discounted_revenue mesure
Métadonnées de l’agent display_name, format sur synonyms les champs et les mesures

Ressources supplémentaires