Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Zaawansowane techniki widoków metryk umożliwiają wyrażanie złożonej logiki biznesowej i ponowne używanie definicji w warstwie semantycznej. Na tej stronie opisano dwie takie techniki:
- Miary okna: do obliczeń szeregów czasowych, takich jak średnie ruchome, sumy bieżące i zmiany międzyokresowe.
- Kompilowanie: tworzenie złożonych miar przez odwoływanie się do innych miar zamiast ponownego pisania ich logiki.
Na tej stronie przyjęto założenie, że masz znajomość podstawowych zasad modelowania widoku metryki. Zobacz Widoki metryk modelu.
Note
Przykłady na tej stronie używają przykładowego zestawu danych TPC-H, który modeluje hurtowy łańcuch dostaw. Aby uzyskać więcej informacji na temat zestawu danych TPC-H, zobacz tpch. Aby zapoznać się z kompleksowego samouczka korzystającego z tego zestawu danych z widokami metryk, zobacz Samouczek: tworzenie widoku metryk z sprzężeniami i modelowaniem danych.
Miary okien
Miary okienne umożliwiają definiowanie miar za pomocą agregacji okiennych, kumulacyjnych lub częściowoaddytywnych w widokach metryk. Obsługują obliczenia, takie jak średnie ruchome, zmiany okresu w okresie i sumy bieżące.
Miarę okna można dodać w edytorze Eksploratora wykazu lub w języku YAML.
Dodawanie miary okna w edytorze
Na karcie UI w edytorze widoku metryki kliknij + Okno podczas edycji miary. + Okno jest dostępne zarówno w trybie Builder, jak i Custom. Opcje okna w edytorze odpowiadają polam YAML opisanym w sekcji Definiowanie miary okna.
Aby uzyskać więcej informacji na temat tworzenia i edytowania miar, zobacz Tworzenie widoku metryki.
Definiowanie miary okna
Miara okna zawiera następujące wymagane pola:
order: pole określające kolejność okna.
zakres: definiuje zakres okna. Obsługiwane wartości obejmują
current, ,cumulative,trailingleading, iall. Zakrestrailinglubleadingprzyjmuje jednostkę czasu w polu daty lub znacznika czasuorder, na przykładtrailing 7 day, albo nie przyjmuje żadnej jednostki w kolumnie kolejnych liczb całkowitychorder, na przykładtrailing 3. Aby uzyskać pełną składnię i opisy, zobacz Obsługiwanerangewartości. Szczegółowe informacje na temat modyfikatorówinclusiveiexclusivedlatrailingileadingmożna znaleźć w sekcji Uwzględnianie lub wykluczanie wiersza kotwicy.
Miara okna czasowego obsługuje także następujące opcjonalne pola:
semiadditive: określa sposób agregowania miary, gdy pole zamówienia nie jest uwzględnione w kwerendzie
GROUP BY. Możliwe wartości:firstilast. Wartość domyślna tolast.offset: Przesuwa ramę okna do tyłu lub do przodu wzdłuż
orderpola o stałą wartość. Na polu daty lub znacznika czasuorderużyj przesunięcia daty, takiego jak-12 month, dla miar porównujących kolejne okresy, takich jak miesiąc do miesiąca lub rok do roku. Użyj numerycznego przesunięcia bez jednostki, na przykład-1, w kolejnej kolumnie liczb całkowitychorder, aby porównywać w obrębie okresu biznesowego, który nie jest datą kalendarzową. Aby uzyskać informacje o składni, obsługiwanych jednostkach i ograniczeniach, zobacz Miary okien.
Możesz także odwołać się do parametru całkowitoliczbowego jako wartości range lub offset miary okna, dzięki czemu element wywołujący może przekazać rozmiar okna w momencie wykonywania zapytania. Zobacz Przekazywanie rozmiaru okna jako parametru.
Jak offset przesuwa ramkę okna
Zobacz Dostępność funkcji widoku danych metryk, aby sprawdzić minimalne wymagania dotyczące zasobów obliczeniowych i wersji specyfikacji YAML.
Pole range określa kształt okna względem wiersza kotwicy, a offset przesuwa tę ramkę o określony interwał wzdłuż order. Poniższa tabela przedstawia przedział dla każdej wartości range z i bez wartości offset równej k, względem wiersza zakotwiczenia t:
| zakres | Ramka bez przesunięcia | Ramka z offset: k |
|---|---|---|
current |
[t, t] |
[t + k, t + k] |
cumulative |
(-infinity, t] |
(-infinity, t + k] |
trailing N |
[t - N, t) |
[t + k - N, t + k) |
leading N |
(t, t + N] |
(t + k, t + k + N] |
all |
cała partycja | cała partycja (bez zmian) |
offset jest niezależny od semiadditive. Opcja first lub last nadal kontroluje sposób zwijania miary, gdy order nie znajduje się w zapytaniu GROUP BY.
Aby uzyskać najlepsze wyniki, dopasuj offset do naturalnego orderziarna . W przypadku danych miesięcznych preferowane jest offset: -12 month zamiast offset: -365 day, ponieważ arytmetyka miesięcy i lat uwzględnia miesiące o różnej długości oraz lata przestępne, podczas gdy arytmetyka day tego nie uwzględnia.
Uwzględnianie lub wykluczanie wiersza zakotwiczenia
Zobacz Dostępność funkcji widoku danych metryk, aby sprawdzić minimalne wymagania dotyczące zasobów obliczeniowych i wersji specyfikacji YAML.
W przypadku zakresów trailing i leading opcjonalne słowo kluczowe inclusive lub exclusive określa, czy wartość okna dla wiersza zakotwiczenia (na przykład dzisiaj) jest częścią okna kroczącego:
| Keyword | Meaning | Zakotwiczenie wiersza w zakresie? |
|---|---|---|
inclusive |
n jednostek w tym wiersz kotwicy. | Yes |
exclusive (ustawienie domyślne) |
n jednostek z wyłączeniem wiersza zakotwiczenia. | No |
Poniższy przykład pokazuje, jak inclusive i exclusive wpływają na okno kroczące dla daty odniesienia 2025-01-05 z użyciem trailing 3 day.
Załóżmy, że dane bazowe mają jeden wiersz dziennie z następującymi wartościami:
| Data | Wartość |
|---|---|
2025-01-02 |
1 |
2025-01-03 |
4 |
2025-01-04 |
2 |
2025-01-05 (kotwica) |
5 |
Każdy modyfikator wybiera wiersze z trzech dni względem punktu odniesienia i sumuje ich wartości:
| Modyfikator | Daty w oknie | Values | Suma |
|---|---|---|---|
trailing 3 day inclusive |
01-03, 01-04, 01-05 |
4 + 2 + 5 |
11 |
trailing 3 day exclusive |
01-02, 01-03, 01-04 |
1 + 4 + 2 |
7 |
leading zakresy działają według tej samej logiki, ale w przeciwnym kierunku.
Przykład miary okna końcowego, ruchomego lub przesuwnego
W poniższym przykładzie obliczana jest 7-dniowa liczba klientów, którzy składali zamówienia. Ta metryka śledzi trendy zaangażowania klientów w czasie, pokazując, ile różnych klientów dokonało zakupów w tygodniu poprzedzającym każdą datę.
version: 1.1
source: samples.tpch.orders
filter: o_orderdate > DATE'1998-01-01'
fields:
- name: date
expr: o_orderdate
measures:
- name: t7d_customers
expr: COUNT(DISTINCT o_custkey)
window:
- order: date
range: trailing 7 day
W tym przykładzie stosowana jest następująca konfiguracja:
-
order: dateokreśla, żedatepole porządkuje okno. -
range: trailing 7 daydefiniuje okno jako 7 dni przed każdą datą, z wyłączeniem samej daty. - Miara pomija
semiadditive, więc używa domyślnejlastwartości i zwraca ostatnią wartość w 7-dniowym oknie, gdydatenie jest kolumną grupującą.
Tworzenie widoku metryk przy użyciu języka SQL
Aby utworzyć ten widok metryki poza narzędziem Catalog Explorer, zawiń kod YAML w CREATE OR REPLACE VIEW ... WITH METRICS LANGUAGE YAML AS i umieść definicję między ogranicznikami $$:
CREATE OR REPLACE VIEW catalog.schema.rolling_customers WITH METRICS LANGUAGE YAML AS
$$
version: 1.1
source: samples.tpch.orders
filter: o_orderdate > DATE'1998-01-01'
fields:
- name: date
expr: o_orderdate
measures:
- name: t7d_customers
expr: COUNT(DISTINCT o_custkey)
window:
- order: date
range: trailing 7 day
$$
Pozostałe pełne definicje na tej stronie są zgodne z tym samym wzorcem.
Przykład miary okna okresowego
Poniższy przykład oblicza wzrost sprzedaży w ciągu dnia, porównując dzisiejszy przychód (sumę wszystkich cen zamówień) do wczorajszego przychodu. Ta metryka identyfikuje dzienne trendy sprzedaży i pokazuje procentową zmianę przychodu.
version: 1.1
source: samples.tpch.orders
filter: o_orderdate > DATE'1998-01-01'
fields:
- name: date
expr: o_orderdate
measures:
- name: previous_day_sales
expr: SUM(o_totalprice)
window:
- order: date
range: trailing 1 day
- name: current_day_sales
expr: SUM(o_totalprice)
window:
- order: date
range: current
- name: day_over_day_growth
expr: (MEASURE(current_day_sales) - MEASURE(previous_day_sales)) / MEASURE(previous_day_sales) * 100
W tym przykładzie stosowana jest następująca konfiguracja:
- W przykładzie użyto dwóch miar okiennych: jednej do obliczania łącznej sprzedaży z poprzedniego dnia i jednej dla bieżącego dnia.
- Trzecia miara oblicza zmianę procentową (wzrost) między bieżącymi i poprzednimi dniami.
Przykład miary okna rok do roku przy użyciu offset
Modyfikator offset jest blokiem konstrukcyjnym miar okresowych. Zdefiniuj przesuniętą kopię miary podstawowej, a następnie połącz te dwie miary, aby bezpośrednio w widoku metryki wyrazić różnice, współczynniki lub wskaźniki wzrostu.
Poniższy przykład oblicza wzrost sprzedaży rok do roku, porównując sprzedaż każdego miesiąca z tym samym miesiącem w poprzednim roku. Przesunięta miara używa funkcji offset: -12 month, aby cofnąć się o 12 miesięcy w polu month.
version: 1.1
source: main.default.monthly_sales
fields:
- name: month
expr: month
- name: category
expr: category
measures:
- name: monthly_sales
expr: SUM(sales)
window:
- order: month
range: current
- name: monthly_sales_py
expr: SUM(sales)
window:
- order: month
range: current
offset: -12 month
- name: yoy_growth
expr: MEASURE(monthly_sales) - MEASURE(monthly_sales_py)
- name: yoy_growth_pct
expr: (MEASURE(monthly_sales) - MEASURE(monthly_sales_py))
/ NULLIF(MEASURE(monthly_sales_py), 0)
W tym przykładzie stosowana jest następująca konfiguracja:
-
monthly_salesto miara podstawowa, sumując sprzedaż w bieżącym miesiącu. -
monthly_sales_pyjest tą samą miarą przesuniętą do tyłu o 12 miesięcy za pomocą funkcjioffset: -12 month. W styczniu 2025 r. zwraca wartość dla stycznia 2024 r. -
yoy_growthiyoy_growth_pctstanowią dwie wartości służące do wyrażenia zmiany bezwzględnej i zmiany procentowej. UżycieNULLIFmetody pozwala uniknąć błędów dzielenia przez zero, gdy wartość poprzedniego roku jest równa zero.
Miary okienkowe na kolumnie indeksu numerycznego
Wymaga Databricks Runtime 19 lub wyższego oraz specyfikacji YAML w wersji 1.1 lub wyższej.
Element opatrzony datą offset, taki jak -12 month kroki w kolumnie daty lub znacznika czasu. Kolumna daty już nie pasuje, gdy oś porównawcza to okres biznesowy, który nie jest datą kalendarzową. Tygodnie fiskalne, tygodnie ISO oraz okresy rozliczeniowe 4-4-5 to przykłady. Zamiast tego uporządkuj miarę okna według kolumny indeksu całkowitego i zastosuj wartość liczbową bez jednostki offset lub range. Przesunięcie numeryczne wykonuje arytmetykę całkowitą na indeksie, czyli offset: -1 oznacza poprzednią pozycję w sekwencji, a range: trailing 3 oznacza trzy ostatnie pozycje.
Numeryczne przesunięcie lub zakres zwraca poprawny wynik tylko wtedy, gdy kolumna order spełnia wszystkie następujące wymagania. Tylko pierwsze wymaganie jest weryfikowane w czasie zapytania. Kolumna, która łamie którąkolwiek z pozostałych dwóch, zwraca błędne liczby, a nie błąd, więc zwerfikuj je samodzielnie:
-
Całkowita: Kolumna to
TINYINT,SMALLINT,INTlubBIGINT.DATE,TIMESTAMP,DECIMAL,DOUBLE, , orazSTRINGkolumny nie są prawidłowymi kolumnami indeksowymi. Aby porównać według daty, użyj zamiast tego wersji z datąoffset. Zobacz Jakoffsetprzesuwa ramkę okna. -
Monotoniczna i ciągła (gęsta): Wartość zwiększa się dokładnie o 1 z jednego rzeczywistego okresu na następny, również na granicy roku lub kwartału. Przerwa lub powtarzająca się wartość powoduje, że
offset: -1pomija okres lub zlicza go podwójnie. Surowa etykieta, taka jak takafiscal_week, która resetuje się do 1 każdego roku, sama w sobie nie jest ważnym indeksem. -
Dopasowane do poziomu porównania: Przesunięcie lub kroki zakresu są zgodne z poziomem indeksu. Na indeksie
offset: -1miesięcznym to poprzedni miesiąc, arange: trailing 3to ostatnie trzy miesiące. Dla bardziej grubszego porównania, takiego jak rok do roku, należy zamówić osobną miarę na indeksie rocznym lub użyć miary o tej samej pozycji w poprzednim cyklu. Nie używaj ponownie bardziej szczegółowego indeksu (miesięcznego) i nie grupuj. Zobacz Ta sama pozycja w poprzednim cyklu (dwie specyfikacje okna, bez indeksu).
Pobierz kolumnę indeksu
Możesz nazwać wstępnie obliczoną kolumnę indeksu ze źródła lub wyprowadzić ją w widoku metryki. Przepis zależy od kształtu kalendarza:
| Kształt kalendarza | Receptura indeksu |
|---|---|
| Jednolite okresy dla każdego rodzica (12 miesięcy w roku, 4 kwartały rocznie) |
expr: year * 12 + month (miesiące) lub expr: year * 4 + quarter (kwartały). To jest dokładne i nie wymaga dodatkowej tabeli. |
| Zmienne okresy dla rodzica (ISO 52- lub 53-tygodniowe, 4-4-5 przy ziarnie tygodniowym) | Użyj tabeli odnośników kalendarza, która odwzorowuje (year, period) na zwartą liczbę całkowitą. Naiwny year * 53 + week rozjeżdża się przy latach 52-tygodniowych. |
Klucz stringowy ('YYYYPP', 'YYYY-Www') |
Najpierw przeanalizuj ciąg do liczb całkowitych, a następnie zastosuj jeden z powyższych przepisów. |
Wyrównaj wymiary, od których zależy indeks
Nadaj range: all specyfikację kolejności każdemu polu widoku metryki, na podstawie którego obliczany jest indeks, na przykład order_year oraz order_month dla month_index = order_year * 12 + order_month. Dotyczy to niezależnie od tego, czy indeks jest wyprowadzany w widoku metrycznym, czy jest wstępnie obliczany jako goła kolumna. Specyfikacja range: all powoduje, że pola te są ignorowane podczas tworzenia okien, zgodnie z zamierzeniem, gdy zapytanie grupuje według tych pól lub je filtruje.
Te specyfikacje nie są opcjonalne. Bez nich zapytanie, które grupuje według order_year lub order_month, dzieli okno według tych pól, co ogranicza przesuniętą ramkę do jednego okresu, a miara porównawcza zwraca NULL.
Każde inne pole nie ma specyfikacji range: all. Pole niezależne od indeksu, takie jak region, jest grupowane normalnie, a okno jest partycjonowane według wartości.
Kolejne porównanie lub okno przesuwające (indeks plus zakres liczbowy)
Użyj indeksu z przesunięciem liczbowym lub zakresem, gdy masz na myśli „sąsiadujący w sekwencji”, na przykład poprzedni okres, ruchome N okresów lub okres od początku do dziś. Uporządkuj indeks, zastosuj przesunięcie numeryczne lub zakres i dodaj specyfikację range: all dla każdej kolumny kalendarzowej, od której indeks zależy. W poniższym przykładzie indeks zależy od order_year i order_month:
version: 1.1
source: samples.tpch.orders
fields:
- name: order_year
expr: YEAR(o_orderdate) # INT breakdown column
- name: order_month
expr: MONTH(o_orderdate) # INT breakdown column
- name: month_index # consecutive monotonic index across years
expr: order_year * 12 + order_month
measures:
- name: monthly_sales
expr: SUM(o_totalprice)
window:
- order: order_year # breakdown, so range: all keeps GROUP BY order_year working
range: all
- order: order_month # breakdown
range: all
- order: month_index # the axis you compare along
range: current
- name: monthly_sales_prev # previous month: same specs plus a unitless offset of -1 on the index
expr: SUM(o_totalprice)
window:
- order: order_year
range: all
- order: order_month
range: all
- order: month_index
range: current
offset: -1 # one position back, crosses the year boundary correctly
- name: sales_trailing_3mo # rolling 3 months: unitless range on the index
expr: SUM(o_totalprice)
window:
- order: order_year
range: all
- order: order_month
range: all
- order: month_index
range: trailing 3 # the three index positions before the current month
- name: mom_pct_change
expr: (MEASURE(monthly_sales) - MEASURE(monthly_sales_prev))
/ NULLIF(MEASURE(monthly_sales_prev), 0) * 100
W tym przykładzie stosowana jest następująca konfiguracja:
-
month_indexjest kolejnym wskaźnikiem monotonicznym, który wzrasta o 1 każdego miesiąca w granicach roku. -
monthly_salesporządkuje w indeksie za pomocąrange: currenti nadaje kolumnomorder_yearorazorder_monthpodziału specyfikacjęrange: all, tak aby grupowanie według nich działało. -
monthly_sales_prevdodajeoffset: -1do indeksu, aby cofnąć się o jeden miesiąc, prawidłowo uwzględniając przekroczenie granicy roku. -
sales_trailing_3moużywa zakresutrailing 3bezjednostkowego do sumowania trzech pozycji indeksowych. Ponieważ indeks jest kolejny, trzy pozycje to trzy miesiące, bez uwzględnienia arytmetyki jednostki czasu. Zakłada to, że każdy miesiąc w danym zakresie ma wiersz źródłowy. Jeśli brakuje miesiąca, okno nie daje się już jednoznacznie przyporządkować do trzech miesięcy kalendarzowych, więc zagęść dane źródłowe do pełnego zestawu okresów, jeśli mogą występować luki. Domyślnie zakres toexclusive, więc obejmuje trzy miesiące przed bieżącym miesiącem. Dodajinclusive, aby zamiast tego uwzględnić bieżący miesiąc. -
mom_pct_changetworzy miarę bazową i miary przesunięte. UżycieNULLIFunika błędów dzielenia przez zero, gdy wartość poprzednia wynosi zero.
Wykonaj zapytanie względem miary, grupując według dopasowanych kolumn podziału, a nie według surowego indeksu:
SELECT
order_year,
order_month,
MEASURE(monthly_sales),
MEASURE(monthly_sales_prev),
MEASURE(sales_trailing_3mo),
MEASURE(mom_pct_change)
FROM catalog.schema.monthly_sales_mv
GROUP BY ALL
Ta sama pozycja w poprzednim cyklu (dwie specyfikacje okien, brak indeksu)
Porównanie takie jak "ten sam miesiąc w zeszłym roku" jest wyrównane według pozycji, a nie odległości absolutnej, więc nie wymaga kolumny indeksu. Użyj dwóch specyfikacji okien: jedna przesuwa cykl nadrzędny, a druga utrzymuje pozycję wewnętrzną.
version: 1.1
source: samples.tpch.orders
fields:
- name: order_year
expr: YEAR(o_orderdate)
- name: order_month
expr: MONTH(o_orderdate)
measures:
- name: monthly_sales
expr: SUM(o_totalprice)
- name: monthly_sales_py # same month, prior year
expr: SUM(o_totalprice)
window:
- order: order_year # shift the year coordinate
range: current
offset: -1
- order: order_month # hold the month fixed
range: current
- name: yoy_pct_change
expr: (MEASURE(monthly_sales) - MEASURE(monthly_sales_py))
/ NULLIF(MEASURE(monthly_sales_py), 0) * 100
W tym przykładzie stosowana jest następująca konfiguracja:
-
monthly_sales_pyużywa dwóch specyfikacji okien. Parametrorder_yearcofa wartość roku o jeden za pomocąoffset: -1, a parametrorder_monthutrzymuje miesiąc na stałym poziomie za pomocąrange: current. - Porównanie jest dopasowywane według pozycji, więc nie wymaga kolumny indeksowej.
-
yoy_pct_changeskłada dwie miary wyrażające procentową zmianę.
Przykład skumulowanej (bieżącej) miary
Poniższy przykład oblicza skumulowany przychód ze sprzedaży od początku zestawu danych do każdej daty. Ta suma bieżąca pokazuje, ile całkowitego przychodu zostało wygenerowane w czasie, co jest przydatne do śledzenia postępów w kierunku rocznych celów przychodów lub analizowania długoterminowych wzorców wzrostu.
version: 1.1
source: samples.tpch.orders
filter: o_orderdate > DATE'1998-01-01'
fields:
- name: date
expr: o_orderdate
- name: customer
expr: o_custkey
measures:
- name: running_total_sales
expr: SUM(o_totalprice)
window:
- order: date
range: cumulative
W tym przykładzie stosowana jest następująca konfiguracja:
-
order: dateporządkuje okno chronologicznie. -
range: cumulativeDefiniuje okno jako wszystkie dane od początku zestawu danych do i włącznie z każdą datą. - Miara pomija
semiadditive, więc używa domyślnej wartościlast. Miara zwraca najnowszą wartość skumulowaną, gdydatenie jest uwzględniona w zapytaniuGROUP BY, zamiast sumować dla wszystkich dat.
Przykład miary okres-data
W poniższym przykładzie oblicza się przychód ze sprzedaży od początku roku (YTD). Ta miara pokazuje skumulowany przychód wygenerowany od 1 stycznia każdego roku do bieżącej daty, resetując na początku każdego nowego roku.
version: 1.1
source: samples.tpch.orders
filter: o_orderdate > DATE'1997-01-01'
fields:
- name: date
expr: o_orderdate
- name: month
expr: DATE_TRUNC('MONTH', date)
- name: year
expr: DATE_TRUNC('year', date)
measures:
- name: ytd_sales
expr: SUM(o_totalprice)
window:
- order: date
range: cumulative
- order: year
range: current
W tym przykładzie stosowana jest następująca konfiguracja:
- W przykładzie użyto dwóch specyfikacji okna: jednej dla sumy skumulowanej dla pola
date, a drugiej, aby ograniczyć sumę do rokucurrent. - Pole
yearogranicza sumę skumulowaną tak, aby była resetowane na początku każdego nowego roku. - Pola
monthiyeartworzą hierarchię dat w polu zamówienia: każda z nich jest definiowana wdatepoludatewedług nazwy, a nie w kolumnie bazowejo_orderdate, dzięki czemu zapytania mogą grupować tę miarę według nich. Zobacz Grupowanie według pola hierarchii dat.
Przykład miary semiaddytywnej
W poniższym przykładzie obliczane są salda kont, które nie mogą być sumowane między datami (nie można dodać salda poniedziałkowego do wtorkowego salda w celu uzyskania łącznego salda). Zamiast tego, podczas agregowania danych z wielu dni, metryka zwraca najnowsze saldo. Jednak wskaźnik może być nadal sumowany dla klientów, aby pokazać łączne saldo wszystkich kont w danym dniu.
version: 1.1
fields:
- name: date
expr: date
- name: customer
expr: customer_id
measures:
- name: semiadditive_balance
expr: SUM(balance)
window:
- order: date
range: current
semiadditive: last
W tym przykładzie stosowana jest następująca konfiguracja:
-
order: dateporządkuje okno chronologicznie. -
range: currentogranicza okno do jednego dnia, bez agregacji między dniami. -
semiadditive: lastZwraca najnowsze saldo w przypadku agregowania w ciągu wielu dni.lastjest wartością domyślną, więc możesz pominąć tę linię. Użyjsemiadditive: first, aby wrócić do najwcześniejszego salda.
Note
Ta miara okna nadal sumuje się dla wszystkich klientów, aby uzyskać ogólne saldo dziennie.
Zapytanie miary okna
Możesz wykonać zapytanie o widok metryk z miarą okna tak jak o każdy inny widok metryk. Miara okna jest obliczana wzdłuż pola order , więc zapytanie, które dzieli wyniki w czasie, musi odwoływać się do tego pola bezpośrednio lub za pośrednictwem zdefiniowanego pola hierarchii dat. Gdy zapytanie nie odwołuje się do pola order, słowo kluczowe semiadditive określa zwracaną wartość, jak opisano w przykładzie miary semiaddytywnej.
Poniższy przykład grupuje miarę okna według state i według wyrażenia miesiąca w polu datezamówienia:
SELECT
state,
DATE_TRUNC('month', date),
MEASURE(t7d_customers) as m
FROM my_metric_view
WHERE date >= DATE'2024-06-01'
GROUP BY ALL
Grupuj według pola hierarchii dat
Hierarchia dat agreguje pole kolejności do mniej szczegółowych poziomów, takich jak tydzień, miesiąc lub rok. Zdefiniuj każdy poziom jako pole w polu zamówienia według nazwy, a nie w bazowej kolumnie źródłowej:
fields:
- name: date
expr: o_orderdate
# Date hierarchy: each level is defined on the order field `date`,
# not on the underlying o_orderdate column.
- name: month
expr: DATE_TRUNC('MONTH', date)
- name: year
expr: DATE_TRUNC('year', date)
Grupowanie miary okna analitycznego według poziomu hierarchii zwraca miarę na tym poziomie szczegółowości. Przy założeniu, że przykład „okres do daty” został utworzony jako ytd_metric_view, tak jak w przykładzie miary „Okres do daty”, następujące zapytanie zwraca wartość YTD na ostatnią datę w każdym miesiącu:
SELECT month, MEASURE(ytd_sales) AS ytd_sales
FROM ytd_metric_view
GROUP BY month
ORDER BY month;
Warning
Definiowanie poziomu hierarchii w bazowej kolumnie źródłowej, takiej jak DATE_TRUNC('MONTH', o_orderdate), powoduje przerwanie linku do pola datezamówienia, mimo że wyrażenia wyglądają równoważne. Grupowanie miary okna według takiego pola zwraca nieprawidłowe wyniki.
Składalność
Widoki metryk są komponowalne. Możesz tworzyć nowe pola i miary odwołujące się do istniejących, a nie zapisywać logiki od podstaw. Zmniejsza to duplikację i ułatwia utrzymanie złożonych definicji metryk.
Kompozycyjność działa na dwóch poziomach: w obrębie pojedynczego widoku metryki oraz między widokami metryk, gdy jeden widok metryki jest używany jako źródło dla innego widoku.
Komposability obsługuje następujące wzorce referencyjne:
- Poprzednie pola w nowych polach.
- Pola i wcześniejsze miary w nowych miarach.
- Pola z widoków metryk używane jako źródło w nowych polach.
- Pola i miary z widoków metrycznych używane jako źródło w nowych miarach.
Definiowanie miar z komponowalnością
measures W sekcji można odwoływać się do miar z widoku metryki źródłowej lub miar zdefiniowanych wcześniej w tym samym widoku metryki. Takie podejście zwiększa spójność, inspekcję i konserwację warstwy semantycznej.
| Typ miary | Description | Example |
|---|---|---|
| Atomowej | Prosta, bezpośrednia agregacja w kolumnie źródłowej. Tworzą one bloki konstrukcyjne. | SUM(o_totalprice) |
| Składający się | Wyrażenie, które matematycznie łączy jedną lub więcej innych miar przy użyciu MEASURE() funkcji . |
MEASURE(total_revenue) / MEASURE(order_count) |
Przykład: Średnia wartość zamówienia (AOV)
W poniższym przykładzie zdefiniowano średnią wartość zamówienia (AOV) przy użyciu dwóch miar niepodzielnych: total_revenue (suma cen zamówień) i order_count (liczba zamówień). Miara avg_order_value odwołuje się do obu miar atomowych.
version: 1.1
source: samples.tpch.orders
measures:
# Total Revenue
- name: total_revenue
expr: SUM(o_totalprice)
# Order Count
- name: order_count
expr: COUNT(1)
# Composed Measure: Average Order Value (AOV)
- name: avg_order_value
# Defines AOV as Total Revenue divided by Order Count
expr: MEASURE(total_revenue) / MEASURE(order_count)
total_revenue Jeśli definicja zmieni się (na przykład w celu wykluczenia podatku), avg_order_value automatycznie użyje zaktualizowanej definicji.
Kompozycyjność z logiką warunkową
Komponowanie umożliwia tworzenie złożonych współczynników, wartości procentowych warunkowych i współczynników wzrostu bez polegania na funkcjach okienkowych do prostych obliczeń z okresu na okres.
Przykład: wskaźnik realizacji
W poniższym przykładzie obliczana jest stopa realizacji: procent zamówień ze stanem 'F' (spełniony). Miara dzieli zamówienia spełnione przez łączną liczbę zamówień.
version: 1.1
source: samples.tpch.orders
measures:
# Total Orders (denominator)
- name: total_orders
expr: COUNT(1)
# Fulfilled Orders (numerator)
- name: fulfilled_orders
expr: COUNT(1) FILTER (WHERE o_orderstatus = 'F')
# Composed Measure: Fulfillment Rate (Ratio)
- name: fulfillment_rate
expr: MEASURE(fulfilled_orders) / MEASURE(total_orders)
format:
type: percentage
Najlepsze rozwiązania dotyczące komponowania
-
Najpierw zdefiniuj miary niepodzielne: ustanów podstawowe miary (
SUM,COUNT,AVG) przed zdefiniowaniem miar odwołujących się do nich. -
Użyj funkcji dla odwołań: użyj
MEASURE()MEASURE()funkcji podczas odwoływania się do innej miary w elemencieexpr. Nie powtarzaj logiki agregacji ręcznie. Na przykład należy unikaćSUM(a) / COUNT(b), jeśli miary dla obu wartości już istnieją. -
Określanie priorytetów czytelności: Tworzenie miar przy użyciu przejrzystych formuł matematycznych. Na przykład
MEASURE(gross_profit) / MEASURE(total_revenue)jest jaśniejsze niż pojedyncze złożone wyrażenie SQL. - Dodawanie metadanych semantycznych: użyj metadanych semantycznych do formatowania miar złożonych (na przykład wartości procentowych lub waluty) dla narzędzi podrzędnych. Zobacz Metadane agenta w widokach metryk.
Dodatkowe zasoby
- Widoki metryk modelu
- Metadane agenta w widokach metryk
- Materializacja widoków metryk
- Dokumentacja składni YAML dla widoku metryk