Руководство по созданию представления метрик с помощью соединений и моделирования данных

В этом руководстве вы создадите представление метрик аналитики продаж в наборе данных TPC-H. В конечном итоге вы получите представление метрик, которое:

  • Объединяет заказы и клиентов из нескольких таблиц с помощью схемы «снежинка».
  • Определяет поля (также называемые измерениями) для времени, географии и порядка атрибутов.
  • Вычисляет простые и сложные показатели, включая коэффициенты, агрегации с фильтрацией и оконные показатели.
  • Использует компонуемость для построения сложных метрик из более простых показателей.
  • Определяет параметр, который будет применять скидку во время запроса.
  • Включает метаданные агента для панелей мониторинга и средств искусственного интеллекта.

Если вы не знакомы с представлениями метрик, начните с создания представления метрик , чтобы узнать основы. Это руководство расширяет основу с реальной сложностью.

Требования

Для работы с этим руководством требуется:

  • Рабочая область с поддержкой Unity Catalog.
  • Хранилище SQL или вычислительный ресурс под управлением Databricks Runtime 17.3 или более поздней версии.

Полный список привилегий, необходимых для создания представления метрик, см. в разделе "Предварительные требования".

Note

Создание представления метрик поддерживается в Databricks Runtime 16.4 и выше. В этом руководстве используются функции, требующие Databricks Runtime 17.3 или более поздней версии, а для некоторых шагов требуется более поздняя среда выполнения. Сведения о минимальной версии среды выполнения для каждой функции см. в разделе Доступность функций представления метрик.

Модель данных

Набор данных TPC-H моделирует оптовую цепочку поставок. В этом руководстве используются три таблицы, присоединенные к схеме snowflake:

  • orders присоединяется к customer на o_custkey = c_custkey
  • customer присоединяется к nation на c_nationkey = n_nationkey
Таблица Role Ключевые столбцы
orders Таблица фактов (транзакции заказа) o_orderkey, , o_custkeyo_totalprice, o_orderdateo_orderstatus
customer Таблица измерений (сведения о клиенте) c_custkey, , c_namec_mktsegmentc_nationkey
nation Таблица измерений (справочник по странам или регионам) n_nationkey, , n_namen_regionkey

Шаг 1. Создание представления метрик и открытие редактора

Вы можете создать это представление метрик в пользовательском интерфейсе обозревателя каталогов, создать его с помощью кода Genie или записать полное определение YAML напрямую. Все три метода сводятся к единому определению YAML, которое описывает представление метрик. На каждом шаге, следующем, выберите пользовательский интерфейс обозревателя каталогов или вкладку редактора YAML , чтобы следовать вашему предпочтительному методу. Если вы используете редактор YAML, то пример кода на каждом этапе представляет собой ту часть определения YAML, которая соответствует тому, что вы создаёте на этом этапе.

Note

Примеры YAML в этом руководстве используют ключевое fields слово. Когда вы создаёте представление метрик в low-code-редакторе, создаваемый им YAML использует вместо этого эквивалентное ключевое слово dimensions. См. поля.

Если вы не знакомы с пользовательским интерфейсом для создания представлений метрик, см. статью "Создание представления метрик".

Чтобы создать представление метрик, в обозревателе каталогов выполните следующие действия.

  1. Найдите samples.tpch.orders.
  2. Щелкните по имени таблицы.
  3. Нажмите кнопку "Создать>представление метрик " и назовите представление.

Подробные инструкции по созданию см. в разделе "Создание представления метрик". Когда откроется редактор, используйте вкладку пользовательского интерфейса для интерактивной сборки или нажмите <> кнопку, чтобы изменить определение YAML напрямую.

Шаг 2. Настройка представления метрик

Задайте версию и описание представления метрик. version определяет версию спецификации YAML, а comment описывает назначение представления метрик, которое отображается в Catalog Explorer. Azure Databricks управляет версией за вас.

Пользовательский интерфейс обозревателя каталогов

Версия определена для вас. Чтобы добавить или изменить описание после сохранения представления метрик:

  1. В обозревателе каталогов найдите представление метрик и щелкните его имя.
  2. Нажмите кнопку "Описание", а затем введите описание представления метрик. Вы можете использовать пример описания, показанного на вкладке редактора YAML .

Этот текст соответствует полю comment в определении YAML. Дополнительные способы редактирования представления метрик см. в разделе "Изменение представления метрик".

Редактор 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

Шаг 3. Определение источника и соединения

Определите основную исходную таблицу и присоединийте связанные таблицы:

  • source задает таблицу фактов (заказы) в качестве зерна.
  • joins приносит данные клиента с помощью связи "много ко одному".
  • Вложенный nation демонстрирует схему типа «снежинка», выполняя соединение через customer, чтобы получить доступ к географическим данным, где страна является подизмерением клиента.

Пользовательский интерфейс обозревателя каталогов

В этом примере добавляется два соединения( оба типа "многие к одному", чтобы моделировать схему снежинки.

Чтобы добавить соединение, выполните следующие действия customer .

  1. В редакторе нажмите кнопку "Присоединиться " в правом верхнем углу, чтобы открыть диалоговое окно "Добавить соединение ".
  2. Найдите samples.tpch.customer, щелкните имя таблицы, а затем нажмите Добавить.
  3. Задайте условие соединения: o_custkey = c_custkey.
  4. В поле Кратность соединения выберите Многие к одному. Рекомендации по выбору кратности см. в разделе "Кратность соединения".

Затем добавьте вложенное nation соединение. Повторите шаги для соединения customer, присоединив samples.tpch.nation по c_nationkey = n_nationkey. Вложение соединения в customer моделирует страну как подизмерение клиента.

Инструкции по полному диалогу соединения см. в шаге 2. Добавление соединения.

Редактор 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

Шаг 4. Определение фильтра

filter ограничивает исходные данные и применяется ко всем запросам в представлении метрики. В этом руководстве представление метрик ограничивается последними данными.

Пользовательский интерфейс обозревателя каталогов

Чтобы определить фильтр, выполните следующие действия.

  1. В редакторе щелкните значок фильтра.Фильтруйте в правом верхнем углу.
  2. Используйте раскрывающиеся меню, чтобы установить для «Столбец» значение o_orderdate, для «Оператор»>=, а для «Значение»1995-01-01.

Дополнительные сведения о фильтрах см. на шаге 3. Определение фильтра.

Редактор YAML

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

Шаг 5. Определение полей

Поля — это атрибуты, по которым пользователи группируются и фильтруются. Поле может быть категориальным столбцом (например, регионом или состоянием) или нерегрегированным числовым столбцом (например, возрастом или количеством), которые пользователи агрегируют во время запроса.

Метаданные агента

Каждое поле и мера в этом руководстве включают свойства метаданных агента , которые улучшают работу представления метрик с панелями мониторинга и инструментами искусственного интеллекта:

  • display_name: читаемая метка, которая отображается в визуализациях вместо имени технического столбца.
  • synonyms: альтернативные имена, которые помогают инструментам ИИ, таким как Genie, обнаруживать поля и меры с помощью запросов естественного языка.
  • format: как значения отображаются на подчиненных поверхностях, таких как панели мониторинга, записные книжки и результаты SQL-запросов, например валюта, число или процент.

Эти свойства являются необязательными, но рекомендуемыми. В следующих шагах определения полей и показателей приведены непосредственно в тексте.

Определения полей

В этом руководстве добавляется следующее:

  • Поля времени:order_date, order_month и order_year с несколькими уровнями детализации для различных задач анализа.
  • Преобразованные поля:order_status и order_priority, которые используют CASE и SPLIT преобразуют исходные коды в доступные для чтения метки.
  • Присоединенные поля:customer_name, market_segmentи customer_nation, которые ссылаются на присоединенные таблицы с использованием имени соединения. Вложенные столбцы объединения используют цепочечную точечную нотацию, например customer.nation.n_name, для обхода схемы типа «снежинка».

Пользовательский интерфейс обозревателя каталогов

Редактор автоматически добавляет все исходные столбцы на вкладку "Поля ". Измените, переименуйте, удалите и добавьте поля, чтобы представление метрик определяло именно следующее. Для каждого поля щелкните его имя, чтобы изменить его или щелкните значок ", чтобы создать его, а затем задайте выражение в построителе или пользовательском режиме. Задайте отображаемое имя и синонимы для каждого поля, как показано ниже.

  1. order_date: В режиме Builder выберите столбец o_orderdate. Установите отображаемое имя на Order Date.

  2. order_month. В пользовательском режиме введите DATE_TRUNC('MONTH', order_date). Установите отображаемое имя на Order Month.

  3. order_year. В пользовательском режиме введите YEAR(order_date). Установите отображаемое имя на Order Year.

  4. order_status. В пользовательском режиме введите следующее выражение. Установите отображаемое имя: Order Status, а синонимы: status, fulfillment status.

    CASE o_orderstatus
      WHEN 'O' THEN 'Open'
      WHEN 'P' THEN 'Processing'
      WHEN 'F' THEN 'Fulfilled'
    END
    
  5. order_priority. В пользовательском режиме введите SPLIT(o_orderpriority, '-')[0]. Установите отображаемое имя на Priority.

  6. customer_name. В режиме построителя выберите c_name столбец из присоединенной customer таблицы. Установите отображаемое имя на Customer Name.

  7. market_segment: В режиме Builder выберите столбец c_mktsegment из объединённой таблицы customer. Установите отображаемое имя: Market Segment, а синонимы: segment, industry.

  8. customer_nation: В режиме пользовательском введите customer.nation.n_name, чтобы сослаться на вложенное соединение nation. Установите отображаемое имя: Country, а синонимы: nation, country.

Полные действия по полю см. в шаге 4. Добавление полей.

Редактор 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

Шаг 6. Определение параметров

Параметры позволяют передавать значения в представление метрик при запросе, поэтому одно определение может обслуживать множество вариантов запросов. В этом руководстве добавляется параметр discount, который затем используется другой мерой для вычисления выручки с учётом скидки. Параметр имеет значение по умолчанию 0, поэтому запросы, которые не передают значение, возвращают нерасчетный доход. Дополнительные сведения о параметрах см. в разделе "Использование параметров с представлениями метрик".

Пользовательский интерфейс обозревателя каталогов

В заголовке редактора нажмите кнопку "Добавить параметр". Введите discount в качестве имени, затем введите значение по умолчанию 0 и выберите тип данных double.

Редактор YAML

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

Шаг 7. Определение мер

Меры — это вычисления, которые пользователи хотят проанализировать. Сначала определите атомарные измерения, а затем используйте компонуемость для создания сложных метрик, ссылающихся на ранее определенные измерения с помощью функции MEASURE(). Задайте display_name, format и synonyms для каждого показателя, как описано в метаданных агента. В этом руководстве добавляется следующее:

  • Атомарные показатели:order_count, total_revenue, и unique_customers — простые агрегирования, которые служат базовыми элементами.
  • Составные меры:avg_order_value и revenue_per_customer, которые ссылаются на ранее определённые меры с помощью MEASURE() вместо дублирования логики агрегирования. При total_revenue изменении эти меры автоматически используют обновленное определение. См. статью "Компонуемость".
  • Отфильтрованные меры:open_order_revenue и fulfilled_order_revenue, которые используются FILTER (WHERE ...) для создания условных метрик без отдельных полей.
  • Параметризованная мера:discounted_revenue, которая ссылается на discount параметр, чтобы применить скидку. См. раздел "Использование параметров с представлениями метрик".
  • Оконная мера:t7d_customers, которая вычисляет скользящее 7-дневное количество уникальных клиентов. Дополнительные шаблоны мер окна см. в разделе "Меры окна ".

Пользовательский интерфейс обозревателя каталогов

Редактор автоматически добавляет образец меры COUNT(*). Измените или удалите его и добавьте меры, чтобы представление метрик точно определило следующее. Для каждой меры нажмите кнопку ", а затем задайте выражение в построителе или пользовательском режиме. Задайте отображаемое имя, формат и синонимы , как показано ниже. Используйте 2 десятичных разряда для форматов валют и 0 десятичных разрядов для числовых форматов.

  1. order_count: В режиме конструктора выберите агрегацию Подсчет уникальных значений для o_orderkey. Задайте отображаемое имя Order Countв формате Number.
  2. total_revenue: В режиме Builder выберите агрегирование Sum для o_totalprice. Установите отображаемое имя: Total Revenue, формат: Валюта (USD), синонимы: revenue, sales.
  3. discounted_revenue. В пользовательском режиме введите SUM(o_totalprice * (1 - discount)). Установите отображаемое имя на Discounted Revenue, а формат — на Currency (USD).
  4. unique_customers: В режиме Конструктор выберите агрегирование Подсчет различных для o_custkey. Задайте отображаемое имя Unique Customersв формате Number.
  5. avg_order_value. В пользовательском режиме введите MEASURE(total_revenue) / MEASURE(order_count). Установите отображаемое имя на Avg Order Value, формат — на Валюта (USD), синонимы — на AOV.
  6. revenue_per_customer. В пользовательском режиме введите MEASURE(total_revenue) / MEASURE(unique_customers). Установите отображаемое имя на Revenue per Customer, а формат — на Currency (USD).
  7. open_order_revenue. В пользовательском режиме введите SUM(o_totalprice) FILTER (WHERE o_orderstatus = 'O'). Установите отображаемое имя на Open Order Revenue, формат — на Валюта (USD), синонимы — на backlog.
  8. fulfilled_order_revenue. В пользовательском режиме введите SUM(o_totalprice) FILTER (WHERE o_orderstatus = 'F'). Установите отображаемое имя на Fulfilled Revenue, а формат — на Currency (USD).
  9. t7d_customers. В пользовательском режиме введите COUNT(DISTINCT o_custkey). Затем нажмите + Window и настройте окно, упорядоченное по order_date, с диапазоном trailing 7 day и полуаддитивной агрегацией last. Задайте отображаемое имя 7-Day Rolling Customersв формате Number.

Полные шаги меры см. в шаге 5. Добавление мер.

Редактор 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

Проверка полного определения

После выполнения описанных выше действий представление метрик имеет следующее полное определение:

Просмотр полного определения YAML
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
Создание представления метрик с помощью SQL

Если вы создаете это определение за пределами обозревателя каталогов, выполните следующий SQL, чтобы создать представление метрик:

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

Другие способы создания представления метрик см. в разделе "Создание представления метрик".

Шаг 8. Запрос представления метрик

Выполняйте запросы к представлению метрик, используя понятный бизнес-пользователям синтаксис. Функция MEASURE() агрегирует показатель на уровне детализации выбранных полей.

Агрегированные показатели по измерению

В этом примере агрегируются меры в нескольких полях. Он возвращает общий доход, количество заказов и среднее значение заказа по стране клиента и сегменту рынка, ранжированное по самым высоким доходам в первую очередь:

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;

Анализ ежемесячной тенденции

В этом примере используется поле времени с мерами для отслеживания тренда. Возвращает общую выручку и выручку по открытым заказам (портфель невыполненных заказов) по месяцам и статусам заказов:

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;

Передача значения параметра

Так как представление метрик определяет параметр, его можно вызвать как табличную функцию и передать значение во время запроса. Следующий запрос применяет скидку на 10%. Так как discount имеет значение по умолчанию 0, запросы, которые опустили аргумент, возвращают нерасчетный доход:

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;

Что вы узнали

Вы создали представление метрик, демонстрирующее:

Функция Example
Соединения схемы Snowflake Заказы, связывающие клиента и нацию (вложенные соединения "много к одному")
Поля времени Гранулярность по дате, месяцу, году
Преобразованные поля CASE операторы, SPLIT функции
Простые меры COUNT, SUM
Композиционность avg_order_value и revenue_per_customer ссылаются на ранее определённые меры с помощью MEASURE()
Отфильтрованные меры FILTER (WHERE ...) для условных агрегаций
Меры окна Скользящий 7-дневный подсчет количества клиентов с помощью trailing 7 day
Параметры discountпараметр, применяемый в мере discounted_revenue
Метаданные агента display_name, format, synonyms в полях и показателях

Дополнительные ресурсы