Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Le tecniche avanzate per le visualizzazioni delle metriche consentono di esprimere logica di business complessa e riutilizzare le definizioni nel livello semantico. Questa pagina illustra due tecniche di questo tipo:
- Misure di finestra: per calcoli su serie temporali, ad esempio medie mobili, totali cumulativi e variazioni tra periodi.
- Componibilità: per la creazione di misure complesse facendo riferimento ad altre misure anziché riscrivere la logica.
Questa pagina presuppone la familiarità con i concetti di modellazione della visualizzazione delle metriche di base. Vedere Visualizzazioni delle metriche del modello.
Annotazioni
Gli esempi in questa pagina usano il set di dati di esempio TPC-H, che modella una supply chain all'ingrosso. Per altre informazioni sul set di dati TPC-H, vedere tpch. Per un'esercitazione end-to-end sull'uso di questo set di dati con le visualizzazioni delle metriche, vedere Esercitazione: Creare una visualizzazione delle metriche con join e modellazione dei dati.
Misure della finestra
Le misure finestra consentono di definire misure con aggregazioni finestrate, cumulative o semiadditive nelle visualizzazioni delle metriche. Supportano calcoli come medie mobili, variazioni da un periodo all'altro e totali progressivi.
È possibile aggiungere una misura della finestra nell'editor di Esplora cataloghi o in YAML.
Aggiungere una misura finestra nell'editor
Nella scheda interfaccia utente dell'editor di visualizzazione metriche fare clic su + Finestra durante la modifica di una misura. + Window è disponibile sia in modalità Builder che in modalità personalizzata. Le opzioni della finestra nell'editor corrispondono ai campi YAML descritti in Definire una misura della finestra.
Per altre informazioni sulla creazione e la modifica di misure, vedere Creare una visualizzazione delle metriche.
Definire una misura finestra
Una misura finestra include i campi obbligatori seguenti:
order: campo che determina l'ordinamento della finestra.
range: definisce l'extent della finestra. Tra i valori supportati sono inclusi
current,cumulative,trailing,leadingeall. Un intervallotrailingoleadingutilizza un'unità di tempo con un campo data o timestamporder, cometrailing 7 day, oppure nessuna unità nel caso di una colonna di interi consecutiviorder, cometrailing 3. Per la sintassi completa e le descrizioni, vedere Valori supportatirange. Per i dettagli sui modificatoriinclusiveeexclusivesutrailingeleading, vedere Includere o escludere la riga di ancoraggio.semiadditive: specifica come aggregare la misura quando il campo dell'ordine non è incluso nella
GROUP BYquery. Valori possibili:firstelast.
Una misura finestra supporta anche il campo facoltativo seguente:
-
offset: Sposta il frame della finestra avanti o indietro lungo il campo
orderdi una quantità fissa. Usa un offset basato su data, ad esempio-12 month, in un campo data o timestamporder, per misure da un periodo all'altro come mese su mese o anno su anno. Utilizzare un offset numerico senza unità di misura, ad esempio-1, su una colonna di numeri interi consecutiviorderper confrontare nell'ambito di un periodo aziendale che non è una data di calendario. Per la sintassi, le unità supportate e i vincoli, vedere Misure finestra.
Puoi anche usare un parametro intero come valore di una misura della finestra range o offset, in modo che il chiamante possa passare la dimensione della finestra al momento dell’esecuzione della query. Vedi Passa una dimensione di finestra come parametro.
Come offset sposta la cornice della finestra
Per i requisiti minimi di calcolo e di versione delle specifiche YAML, vedere Disponibilità delle funzionalità di visualizzazione delle metriche .
Il range campo definisce la forma della finestra rispetto alla riga di ancoraggio e offset scorre tale cornice in base all'intervallo specificato lungo order. La tabella seguente mostra il frame per ogni valore range con e senza un offset di k, relativo alla riga di ancoraggio t:
| intervallo | Cornice senza offset | Cornice con 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 |
intera partizione | intera partizione (non modificata) |
offset è indipendente da semiadditive. La scelta first o last continua comunque a controllare il modo in cui la misura si comprime quando order non è presente nel campo GROUP BY della query.
Per ottenere risultati ottimali, abbina offset alla venatura naturale di order. Per i dati mensili, offset: -12 month è preferibile a offset: -365 day poiché l'aritmetica relativa a mesi e anni rispetta la diversa durata dei mesi e gli anni bisestili, mentre l'aritmetica di day non lo fa.
Includere o escludere la riga di ancoraggio
Per i requisiti minimi di calcolo e di versione delle specifiche YAML, vedere Disponibilità delle funzionalità di visualizzazione delle metriche .
Per gli intervalli trailing e leading, la parola chiave facoltativa inclusive o exclusive controlla se il valore della finestra della riga di ancoraggio (ad esempio, oggi) fa parte della finestra mobile:
| Keyword | Meaning | Ancorare la riga nell'intervallo? |
|---|---|---|
inclusive |
n unità che includono la riga di ancoraggio. | Sì |
exclusive (impostazione predefinita) |
n unità che non includono la riga di ancoraggio. | NO |
L'esempio seguente mostra come inclusive e exclusive influiscono sulla finestra mobile per la data di ancoraggio 2025-01-05 con trailing 3 day.
Si supponga che i dati sottostanti dispongano di una riga al giorno con i valori seguenti:
| Date | Valore |
|---|---|
2025-01-02 |
1 |
2025-01-03 |
4 |
2025-01-04 |
2 |
2025-01-05 (ancoraggio) |
5 |
Ogni modificatore seleziona tre giorni di righe relative all'ancoraggio e somma i relativi valori:
| Modificatore | Date nella finestra | Values | Sum |
|---|---|---|---|
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 gli intervalli seguono la stessa logica nella direzione opposta.
Esempio di misura finestra arretrata, mobile o avanzata
Nell'esempio seguente viene calcolato un conteggio mobile su 7 giorni dei clienti che hanno effettuato ordini. Questa metrica tiene traccia delle tendenze di engagement dei clienti nel tempo mostrando il numero di clienti distinti che hanno effettuato acquisti nella settimana fino a ogni data.
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
semiadditive: last
Per questo esempio, si applica la configurazione seguente:
-
order: datespecifica che ildatecampo ordina la finestra. -
range: trailing 7 daydefinisce la finestra come i 7 giorni precedenti a ogni data, escludendo la data stessa. -
semiadditive: lastrestituisce l'ultimo valore nella finestra di 7 giorni quandodatenon è una colonna di raggruppamento.
Creare la visualizzazione delle metriche con SQL
Per creare questa vista della metrica al di fuori di Catalog Explorer, racchiudi il codice YAML in CREATE OR REPLACE VIEW ... WITH METRICS LANGUAGE YAML AS e inserisci la definizione tra i delimitatori $$:
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
semiadditive: last
$$
Le altre definizioni complete in questa pagina seguono lo stesso modello.
Esempio di misura della finestra periodo su periodo
Nell'esempio seguente viene calcolata la crescita delle vendite giornaliere confrontando i ricavi odierni (somma di tutti i prezzi degli ordini) con i ricavi di ieri. Questa metrica identifica le tendenze di vendita giornaliere e mostra la variazione percentuale dei ricavi.
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
semiadditive: last
- name: current_day_sales
expr: SUM(o_totalprice)
window:
- order: date
range: current
semiadditive: last
- name: day_over_day_growth
expr: (MEASURE(current_day_sales) - MEASURE(previous_day_sales)) / MEASURE(previous_day_sales) * 100
Per questo esempio, si applica la configurazione seguente:
- Nell'esempio vengono utilizzate due misure finestra: una per calcolare le vendite totali nel giorno precedente e una per il giorno corrente.
- Una terza misura calcola la variazione percentuale (crescita) tra i giorni correnti e precedenti.
Esempio di misura finestra anno su anno usando offset
Il modificatore offset è l'elemento costitutivo per le misure di confronto tra periodi. Definire una copia spostata di una misura di base, quindi comporre i due per esprimere delta, rapporti o tassi di crescita direttamente nella visualizzazione delle metriche.
Nell'esempio seguente viene calcolata la crescita delle vendite dell'anno oltre l'anno confrontando le vendite di ogni mese con lo stesso mese nell'anno precedente. La misura spostata usa offset: -12 month per guardare indietro di 12 mesi lungo il month campo.
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
semiadditive: last
- name: monthly_sales_py
expr: SUM(sales)
window:
- order: month
range: current
semiadditive: last
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)
Per questo esempio, si applica la configurazione seguente:
-
monthly_salesè la misura di base, sommando le vendite per il mese corrente. -
monthly_sales_pyè la stessa misura spostata indietro di 12 mesi usandooffset: -12 month. Per gennaio 2025, restituisce il valore per gennaio 2024. -
yoy_growtheyoy_growth_pctcomporre le due misure per esprimere la variazione assoluta e percentuale. L'uso diNULLIFevita errori di divisione per zero quando il valore dell'anno precedente è zero.
La finestra misura su una colonna numerica di indice
Richiede Databricks Runtime 19 o superiore e specifica YAML versione 1.1 o superiore.
Un offset basato sulla data, come -12 month, procede lungo una colonna data o timestamp. Una colonna di data non si adatta più quando il tuo asse di confronto è un periodo aziendale che non è una data di calendario. Settimane fiscali, settimane ISO e periodi contabili 4-4-5 sono tutti esempi. Invece, ordina una misura di finestra in base a una colonna di indice intera e applica un valore numerico offset senza unità o range. Uno spostamento numerico esegue operazioni aritmetiche intere sull'indice, quindi offset: -1 indica la posizione precedente nella sequenza e range: trailing 3 indica le ultime tre posizioni della sequenza.
Un offset numerico o un intervallo restituisce il risultato corretto solo quando la order colonna soddisfa tutti i seguenti requisiti. Solo il primo requisito viene convalidato al momento della richiesta. Una colonna che rompe una delle altre due restituisce numeri sbagliati invece di un errore, quindi verificali tu stesso:
-
Integrale: La colonna è un
TINYINT,SMALLINT,INT, oBIGINT.DATE,TIMESTAMP,DECIMAL,DOUBLE, eSTRINGcolonne non sono colonne indice valide. Per eseguire un confronto in base a una data, usa invece unoffsetdatato. Vedere Comeoffsetsposta la cornice della finestra. -
Monotonico e consecutivo (denso): Il valore aumenta esattamente di 1 da ogni periodo reale al successivo, incluso lungo il confine annuale o trimestrale. Un'interruzione o un valore ripetuto fa sì che
offset: -1salti o conteggi due volte un periodo. Un'etichetta grezza, come unafiscal_weekche si resetta a 1 ogni anno, non è un indice valido di per sé. -
Abbinato alla grana di confronto: lo spostamento o i gradini di intervallo nella grana dell'indice. Su un indice mensile,
offset: -1è il mese precedente erange: trailing 3rappresenta gli ultimi tre mesi. Per un confronto più grossolano, come anno su anno, ordina una misura separata su un indice annuale o usa una misura della stessa posizione del ciclo precedente. Non riutilizzare un indice più fine (mensile) e non raggruppare in gruppi più precisi. Vedi Stessa posizione in un ciclo precedente (due specifiche di finestre, senza indice).
Ottieni una colonna indice
Puoi nominare una colonna indice pre-calcolata dalla sorgente, oppure derivarne una nella vista metrica. La ricetta dipende dalla forma del calendario:
| Forma del calendario | Ricetta di indicizzazione |
|---|---|
| Periodi uniformi per genitore (12 mesi all'anno, 4 trimestri all'anno) |
expr: year * 12 + month (mesi) o expr: year * 4 + quarter (quarti). Questo è esatto e non richiede tavolo aggiuntivo. |
| Periodi variabili per genitore (ISO 52- o 53 settimane, 4-4-5 a grano settimanale) | Usa una tabella di ricerca del calendario che corrisponda (year, period) a un intero denso. Una deriva ingenua year * 53 + week su anni di 52 settimane. |
Tasto delle corde ('YYYYPP', 'YYYY-Www') |
Analizza prima la stringa agli interi, poi applica una delle ricette sopra. |
Allinea le dimensioni da cui dipende l'indice
Assegna una range: all specifica di ordinamento a ogni campo della vista metrica da cui viene calcolato l'indice, ad esempio order_year e order_month per month_index = order_year * 12 + order_month. Questo vale sia che l'indice sia derivato nella vista metrica sia precalcolato a monte come colonna nuda. La range: all specifica fa sì che quei campi vengano ignorati durante la costruzione della finestra, come previsto, quando una query li raggruppa o filtra su di essi.
Queste specifiche non sono opzionali. Senza di essi, una query che raggruppa per order_year o order_month partiziona la finestra in base a quei campi, confinando così il frame spostato a un singolo periodo, e la misura di confronto risulta NULL.
Ogni altro campo non ha alcuna range: all specifica. Un campo indipendente dall'indice, come region, viene raggruppato normalmente e la finestra viene partizionata per valore.
Confronto consecutivo o finestra mobile (indice più intervallo numerico)
Usa un indice con un offset numerico o un intervallo quando intendi "adiacente nella sequenza", ad esempio il periodo precedente, gli ultimi N periodi o il periodo da inizio periodo a oggi. Ordina in base all'indice, applica un offset numerico o un intervallo e aggiungi una specifica range: all per ogni colonna del calendario da cui l'indice dipende. Nel seguente esempio, l'indice dipende da order_year e 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
semiadditive: last
- order: order_month # breakdown
range: all
semiadditive: last
- order: month_index # the axis you compare along
range: current
semiadditive: last
- 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
semiadditive: last
- order: order_month
range: all
semiadditive: last
- order: month_index
range: current
offset: -1 # one position back, crosses the year boundary correctly
semiadditive: last
- name: sales_trailing_3mo # rolling 3 months: unitless range on the index
expr: SUM(o_totalprice)
window:
- order: order_year
range: all
semiadditive: last
- order: order_month
range: all
semiadditive: last
- order: month_index
range: trailing 3 # the three index positions before the current month
semiadditive: last
- name: mom_pct_change
expr: (MEASURE(monthly_sales) - MEASURE(monthly_sales_prev))
/ NULLIF(MEASURE(monthly_sales_prev), 0) * 100
Per questo esempio, si applica la configurazione seguente:
-
month_indexè un indice monotono consecutivo che aumenta di 1 ogni mese attraverso i confini annuali. -
monthly_salesordina in base all'indice conrange: currente assegna alle colonne di suddivisioneorder_yeareorder_monthuna specificarange: allin modo che il raggruppamento in base a esse funzioni. -
monthly_sales_prevAggiungeoffset: -1l'indice per guardare indietro di un mese, che attraversa correttamente il confine annuale. -
sales_trailing_3moUtilizza l'intervallotrailing 3senza unità per sommare tre posizioni indicizzate. Poiché l'indice è consecutivo, tre posizioni corrispondono a tre mesi, senza coinvolgere l'aritmetica delle unità di tempo. Questo presuppone che ogni mese nell'intervallo abbia una riga sorgente. Se manca un mese, la finestra non si allinea più in modo netto a tre mesi di calendario, quindi densifica i dati di origine fino a ottenere un insieme completo di periodi quando sono possibili lacune. L'intervallo predefinito èexclusive, quindi copre i tre mesi precedenti a quello attuale. Aggiungiinclusiveper includere il mese corrente invece. -
mom_pct_changecompone le misure base e spostate. L'usoNULLIFevita errori di divisione per zero quando il valore precedente è zero.
Interroga la misura raggruppando in base alle colonne di ripartizione allineate, non all'indice non elaborato:
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
Stessa posizione in un ciclo precedente (due specifiche di finestre, nessun indice)
Un confronto come "lo stesso mese dell'anno scorso" è allineato per posizione, non per distanza assoluta, quindi non ha bisogno di una colonna indice. Usa due specifiche della finestra: una sposta il ciclo padre e l'altra mantiene la posizione interna.
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
semiadditive: last
- order: order_month # hold the month fixed
range: current
semiadditive: last
- name: yoy_pct_change
expr: (MEASURE(monthly_sales) - MEASURE(monthly_sales_py))
/ NULLIF(MEASURE(monthly_sales_py), 0) * 100
Per questo esempio, si applica la configurazione seguente:
-
monthly_sales_pyUsa due specifiche di finestra. Laorder_yearspecifica sposta la coordinata annuale indietro di uno conoffset: -1, e laorder_monthspecifica mantiene il mese fisso conrange: current. - Il confronto si allinea per posizione, quindi non ha bisogno di una colonna indice.
-
yoy_pct_changecompone le due misure per esprimere la variazione percentuale.
Esempio di misura totale cumulativa (in esecuzione)
Nell'esempio seguente vengono calcolati i ricavi cumulativi delle vendite dall'inizio del set di dati fino a ogni data. Questo totale in esecuzione mostra la quantità di ricavi totali generati nel tempo, utile per tenere traccia dello stato di avanzamento verso obiettivi di ricavi annuali o analizzare i modelli di crescita a lungo termine.
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
semiadditive: last
Per questo esempio, si applica la configurazione seguente:
-
order: dateordina cronologicamente la finestra. -
range: cumulativedefinisce la finestra come tutti i dati dall'inizio del dataset fino a ciascuna data inclusa. -
semiadditive: lastrestituisce il valore cumulativo più recente quandodatenon è incluso nell'GROUP BYdella query, anziché sommarlo su tutte le date.
Esempio di misura da inizio periodo a oggi
Nell'esempio seguente vengono calcolati i ricavi delle vendite da inizio anno (YTD). Questa misura mostra i ricavi cumulativi generati dal 1° gennaio di ogni anno fino alla data corrente, reimpostando all'inizio di ogni nuovo anno.
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
semiadditive: last
- order: year
range: current
semiadditive: last
Per questo esempio, si applica la configurazione seguente:
- Nell'esempio vengono utilizzate due specifiche della finestra: una per la somma cumulativa sul
datecampo e un'altra per limitare la somma all'annocurrent. - Il
yearcampo limita la somma cumulativa in modo che venga reimpostata all'inizio di ogni nuovo anno. - I campi
montheyearformano una gerarchia di date sul campo ordinedate: ciascuno è definito nel campodatein base al nome, non sulla colonna sottostanteo_orderdate, in modo che le query possano raggruppare questa misura in base a essi. Vedere Raggruppare per un campo gerarchia di date.
Esempio di misura semiadditiva
L'esempio seguente calcola i saldi del conto, che non devono essere sommati tra le date (non è possibile aggiungere il saldo di lunedì al saldo di martedì per ottenere il saldo totale). Al contrario, quando si aggrega tra più giorni, la misura restituisce il saldo più recente. Tuttavia, la misura può comunque essere sommata tra i clienti per mostrare il saldo totale in tutti i conti in un determinato giorno.
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
Per questo esempio, si applica la configurazione seguente:
-
order: dateordina cronologicamente la finestra. -
range: currentlimita la finestra a un singolo giorno senza aggregazioni tra giorni. -
semiadditive: lastrestituisce il saldo più recente durante l'aggregazione in più giorni.
Annotazioni
Questa misura temporale somma tutti i clienti per ottenere il saldo complessivo giornaliero.
Interrogare una misura della finestra
È possibile eseguire query su una visualizzazione metrica con una misura della finestra come qualsiasi altra visualizzazione metrica. Una misura di finestra viene calcolata in base al campo order, quindi una query che suddivide i risultati nel tempo deve fare riferimento a quel campo, direttamente oppure tramite un campo di gerarchia delle date definito su di esso. Quando la query non fa riferimento al campo order, la semiadditive parola chiave determina il valore restituito, come descritto in Esempio di misura semiadditive.
L'esempio seguente raggruppa una misura di finestra per state e per un'espressione mensile sul campo order date:
SELECT
state,
DATE_TRUNC('month', date),
MEASURE(t7d_customers) as m
FROM my_metric_view
WHERE date >= DATE'2024-06-01'
GROUP BY ALL
Raggruppare in base a un campo della gerarchia di date
Una gerarchia di date raggruppa il campo a livelli di granularità più elevati, ad esempio alla settimana, al mese o all'anno. Definire ogni livello come un campo sul campo di ordinamento per nome, non sulla colonna di origine sottostante:
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)
Il raggruppamento di una misura della finestra in base a un livello di gerarchia restituisce la misura in corrispondenza di tale granularità. Supponendo che l'esempio period-to-date venga creato come ytd_metric_view, come nell'esempio di misura period-to-date, la query seguente restituisce il valore YTD alla data dell'ultimo giorno di ciascun mese:
SELECT month, MEASURE(ytd_sales) AS ytd_sales
FROM ytd_metric_view
GROUP BY month
ORDER BY month;
Avvertimento
La definizione di un livello di gerarchia nella colonna di origine sottostante, ad esempio DATE_TRUNC('MONTH', o_orderdate), interrompe il collegamento al campo datedell'ordine , anche se le espressioni hanno un aspetto equivalente. Il raggruppamento di una misura della finestra in base a un campo di questo tipo restituisce risultati non corretti.
Componibilità
Le visualizzazioni delle metriche sono componibili. È possibile creare nuovi campi e misure che fanno riferimento a quelli esistenti anziché riscrivere la logica da zero. In questo modo si riduce la duplicazione e si semplifica la gestione delle definizioni delle metriche complesse.
La componibilità funziona a due livelli: all'interno di una singola visualizzazione metrica e tra le visualizzazioni delle metriche quando una vista metrica viene usata come origine per un'altra.
La componibilità supporta i modelli di riferimento seguenti:
- Campi precedenti in nuovi campi.
- Campi e misure precedenti nelle nuove misure.
- Campi delle viste metriche utilizzati come origine nei nuovi campi.
- Campi e misure dalle visualizzazioni delle metriche usate come origine nelle nuove misure.
Definire misure con componibilità
measures Nella sezione è possibile fare riferimento a misure dalla vista metrica di origine o dalle misure definite in precedenza nella stessa vista metrica. Questo approccio migliora coerenza, controllabilità e manutenzione del livello semantico.
| Tipo di misura | Description | Example |
|---|---|---|
| Atomica | Aggregazione semplice e diretta in una colonna di origine. Questi formano i blocchi predefiniti. | SUM(o_totalprice) |
| Composto | Espressione che combina matematicamente una o più altre misure usando la MEASURE() funzione . |
MEASURE(total_revenue) / MEASURE(order_count) |
Esempio: Valore dell'ordine medio (AOV)
Nell'esempio seguente viene definito il valore medio dell'ordine (AOV) usando due misure atomico: total_revenue (somma dei prezzi degli ordini) e order_count (numero di ordini). La avg_order_value misura fa riferimento a entrambe le misure atomiche.
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)
Se la total_revenue definizione cambia (ad esempio, per escludere l'imposta), avg_order_value usa automaticamente la definizione aggiornata.
Componibilità con la logica condizionale
È possibile usare la componibilità per creare rapporti complessi, percentuali condizionali e tassi di crescita senza basarsi sulle funzioni finestra per semplici calcoli di periodi nel corso del periodo.
Esempio: Tasso di evasione
Nell'esempio seguente viene calcolato il tasso di evasione: la percentuale di ordini con stato 'F' (evaso). La misura divide gli ordini evasi per gli ordini totali.
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
Procedure consigliate per la componibilità
-
Definire prima le misure atomico: stabilire misure fondamentali (
SUM,COUNT,AVG) prima di definire misure che vi fanno riferimento. -
Usare
MEASURE()per i riferimenti: usare laMEASURE()funzione quando si fa riferimento a un'altra misura in un oggettoexpr. Non ripetere manualmente la logica di aggregazione. Ad esempio, evitareSUM(a) / COUNT(b)se esistono misure per entrambi i valori. -
Classificare in ordine di priorità la leggibilità: comporre misure usando formule matematiche chiare. Ad esempio,
MEASURE(gross_profit) / MEASURE(total_revenue)è più chiaro di una singola espressione SQL complessa. - Aggiungere metadati semantici: usare metadati semantici per formattare misure composte (ad esempio, percentuali o valuta) per gli strumenti downstream. Vedere Metadati dell'agente nelle visualizzazioni delle metriche.