Creazione di tabelle derivate native

Una tabella derivata è una query i cui risultati vengono utilizzati come se la tabella derivata fosse una tabella fisica nel database. Una tabella derivata nativa è basata su una query definita mediante i termini LookML. È diversa da una tabella derivata basata su SQL, che si basa su una query definita con termini SQL. Rispetto alle tabelle derivate basate su SQL, le tabelle derivate native sono molto più facili da leggere e comprendere quando modelli i dati. Per ulteriori informazioni, consulta la sezione Tabelle derivate native e tabelle derivate basate su SQL della pagina della documentazione Tabelle derivate in Looker.

Sia le tabelle derivate native che quelle basate su SQL sono definite in LookML utilizzando il parametro derived_table a livello di vista. Tuttavia, con le tabelle derivate native, non è necessario creare una query SQL. Puoi invece utilizzare il parametro explore_source per specificare l'esplorazione su cui basare la tabella derivata, le colonne e altre caratteristiche desiderate.

Puoi anche fare in modo che Looker crei il LookML della tabella derivata da una query SQL Runner, come descritto nella pagina della documentazione Utilizzo di SQL Runner per creare tabelle derivate.

Utilizzo di un'esplorazione per iniziare a definire le tabelle derivate native

Partendo da un'esplorazione, Looker può generare LookML per tutta o per la maggior parte della tua tabella derivata. Devi solo creare un'esplorazione e selezionare tutti i campi che vuoi includere nella tabella derivata. Quindi, per generare il LookML della tabella derivata nativa, segui questi passaggi:

  1. Seleziona il menu a forma di ingranaggio Esplora azioni e seleziona Ottieni LookML.

  2. Fai clic sulla scheda Tabella derivata per visualizzare il LookML per la creazione di una tabella derivata nativa per l'esplorazione.

  3. Copia il codice LookML.

Ora che hai copiato il LookML generato, incollalo in un file di vista:

  1. In modalità di sviluppo, vai ai file di progetto.

  2. Fai clic sul segno + nella parte superiore dell'elenco dei file del progetto nell'IDE di Looker e seleziona Crea visualizzazione. In alternativa, puoi fare clic sul menu di una cartella e selezionare Crea vista per creare il file all'interno della cartella.

  3. Assegna un nome significativo al nome della vista.

  4. Facoltativamente, modifica i nomi delle colonne, specifica le colonne derivate e aggiungi filtri.

Quando utilizzi una misura di type: count in un'esplorazione, la visualizzazione etichetta i valori risultanti con il nome della visualizzazione anziché con la parola Conteggio. Per evitare confusione, pluralizza il nome della vista. Puoi modificare il nome della visualizzazione selezionando Mostra il nome completo del campo in Serie nelle impostazioni di visualizzazione oppure utilizzando il parametro view_label con una versione plurale del nome della visualizzazione.

Definizione di una tabella derivata nativa in LookML

Sia che utilizzi tabelle derivate dichiarate in SQL o in LookML nativo, l'output di una query di derived_table è una tabella con un insieme di colonne. Quando la tabella derivata è espressa in SQL, i nomi delle colonne di output sono impliciti nella query SQL. Ad esempio, la seguente query SQL avrà le colonne di output user_id, lifetime_number_of_orders e lifetime_customer_value:

SELECT
  user_id
  , COUNT(DISTINCT order_id) as lifetime_number_of_orders
  , SUM(sale_price) as lifetime_customer_value
FROM order_items
GROUP BY 1

In Looker, una query si basa su un'esplorazione, include campi di misura e dimensione, aggiunge eventuali filtri applicabili e può anche specificare un ordinamento. Una tabella derivata nativa contiene tutti questi elementi, oltre ai nomi di output per le colonne.

Il seguente semplice esempio produce una tabella derivata con tre colonne: user_id, lifetime_customer_value e lifetime_number_of_orders. Non devi scrivere manualmente la query in SQL. Al contrario, Looker la crea utilizzando l'esplorazione order_items specificata e alcuni dei suoi campi (order_items.user_id, order_items.total_revenue e order_items.order_count).

view: user_order_facts {
  derived_table: {
    explore_source: order_items {
      column: user_id {
        field: order_items.user_id
      }
      column: lifetime_number_of_orders {
        field: order_items.order_count
      }
      column: lifetime_customer_value {
        field: order_items.total_revenue
      }
    }
  }
  # Define the view's fields as desired
  dimension: user_id {
    hidden: yes
  }
  dimension: lifetime_number_of_orders {
    type: number
  }
  dimension: lifetime_customer_value {
    type: number
  }
}

Utilizzo di istruzioni include per attivare i campi di riferimento

Nel file di visualizzazione della tabella derivata nativa, utilizzi il parametro explore_source per puntare a un'esplorazione e per definire le colonne e altre caratteristiche della tabella derivata nativa.

Nel file di visualizzazione della tabella derivata nativa, non è necessario utilizzare il parametro include per puntare al file contenente la definizione dell'esplorazione. Se non hai l'istruzione include, l'IDE di Looker non suggerirà automaticamente i nomi dei campi né verificherà i riferimenti ai campi durante la creazione della tabella derivata nativa. In alternativa, puoi utilizzare lo strumento di convalida LookML per verificare i campi a cui fai riferimento nella tabella derivata nativa.

Tuttavia, se vuoi abilitare il suggerimento automatico e la verifica immediata del campo nell'IDE di Looker o se hai un progetto LookML complesso con più esplorazioni con lo stesso nome o possibili riferimenti circolari, puoi utilizzare il parametro include per puntare alla posizione della definizione dell'esplorazione.

Le esplorazioni vengono spesso definite all'interno di un file del modello, ma, nel caso delle tabelle derivate native, è più pratico creare un file separato per l'esplorazione. I file di esplorazione LookML hanno l'estensione .explore.lkml, come descritto nella documentazione relativa alla creazione di file di esplorazione. In questo modo, nel file nativo della visualizzazione tabella derivata puoi includere un singolo file di esplorazione e non l'intero file del modello.

Se vuoi creare un file Esplora separato e utilizzare il parametro include per puntare al file Esplora nel file di visualizzazione della tabella derivata nativa, assicurati che i file LookML soddisfino i seguenti requisiti:

  • Il file della visualizzazione della tabella derivata nativa deve includere il file dell'esplorazione. Ad esempio:
    • include: "/explores/order_items.explore.lkml"
  • Il file dell'esplorazione deve includere i file di visualizzazione di cui ha bisogno. Ad esempio:
    • include: "/views/order_items.view.lkml"
    • include: "/views/users.view.lkml"
  • Il modello deve includere il file dell'esplorazione. Ad esempio:
    • include: "/explores/order_items.explore.lkml"

Definizione delle colonne delle tabelle derivate native

Come mostrato nell'esempio precedente, utilizzerai column per specificare le colonne di output della tabella derivata.

Specifica dei nomi di colonna

Per la colonna user_id, il nome della colonna corrisponde al nome del campo specificato nell'esplorazione originale.

In genere, potresti volere un nome di colonna diverso nella tabella di output rispetto al nome dei campi nell'esplorazione originale. L'esempio precedente ha prodotto un calcolo del lifetime value per utente utilizzando l'esplorazione order_items. Nella tabella di output, total_revenue è in realtà lifetime_customer_value di un cliente.

La dichiarazione column supporta la dichiarazione di un nome di output diverso dal campo di immissione. Ad esempio, il seguente codice indica a Looker di "creare una colonna di output denominata lifetime_value dal campo order_items.total_revenue":

column: lifetime_value {
  field: order_items.total_revenue
}

Nomi delle colonne impliciti

Se il parametro field viene omesso da una dichiarazione di colonna, si presume che sia <explore_name>.<field_name>. Ad esempio, se hai specificato explore_source: order_items,

column: user_id {
  field: order_items.user_id
}

è equivalente a

column: user_id {}

Creazione di colonne derivate per i valori calcolati

Puoi aggiungere i parametri derived_column per specificare le colonne che non esistono in Esplora del parametro explore_source. Ogni parametro derived_column ha un parametro sql che specifica come creare il valore.

Il calcolo di sql può utilizzare qualsiasi colonna specificata utilizzando i parametri column. Le colonne derivate non possono includere funzioni di aggregazione, ma possono includere calcoli che possono essere eseguiti su una singola riga della tabella.

L'esempio seguente produce la stessa tabella derivata dell'esempio precedente, ad eccezione dell'aggiunta di una colonna average_customer_order calcolata, che viene calcolata dalle colonne lifetime_customer_value e lifetime_number_of_orders nella tabella derivata nativa.

view: user_order_facts {
  derived_table: {
    explore_source: order_items {
      column: user_id {
        field: order_items.user_id
      }
      column: lifetime_number_of_orders {
        field: order_items.order_count
      }
      column: lifetime_customer_value {
        field: order_items.total_revenue
      }
      derived_column: average_customer_order {
        sql:  lifetime_customer_value / lifetime_number_of_orders ;;
      }
    }
  }
  # Define the view's fields as desired
  dimension: user_id {
    hidden: yes
  }
  dimension: lifetime_number_of_orders {
    type: number
  }
  dimension: lifetime_customer_value {
    type: number
  }
  dimension: average_customer_order {
    type: number
  }
}

Utilizzo delle funzioni finestra SQL

Alcuni dialetti di database supportano le funzioni finestra, in particolare per creare numeri di sequenza, chiavi primarie, totali correnti e cumulativi e altri utili calcoli multiriga. Dopo l'esecuzione della query principale, eventuali dichiarazioni derived_column vengono eseguite in un passaggio separato.

Se il dialetto del database supporta le funzioni finestra, puoi utilizzarle nella tabella derivata nativa. Crea un parametro derived_column con un parametro sql contenente la funzione finestra desiderata. Quando fai riferimento ai valori, devi utilizzare il nome della colonna come definito nella tabella derivata nativa.

L'esempio seguente crea una tabella derivata nativa che include le colonne user_id, order_id e created_time. Quindi, utilizzando una colonna derivata con una funzione finestra SQL ROW_NUMBER(), viene calcolata una colonna contenente il numero di sequenza dell'ordine di un cliente.

view: user_order_sequences {
  derived_table: {
    explore_source: order_items {
      column: user_id {
        field: order_items.user_id
      }
      column: order_id {
        field: order_items.order_id
      }
      column: created_time {
        field: order_items.created_time
      }
      derived_column: user_sequence {
        sql: ROW_NUMBER() OVER (PARTITION BY user_id ORDER BY created_time) ;;
      }
    }
  }
  dimension: order_id {
    hidden: yes
  }
  dimension: user_sequence {
    type: number
  }
}

Aggiunta di filtri a una tabella derivata nativa

Supponiamo che tu voglia creare una tabella derivata del valore di un cliente negli ultimi 90 giorni. Vuoi eseguire gli stessi calcoli effettuati nell'esempio precedente, ma vuoi includere solo gli acquisti effettuati negli ultimi 90 giorni.

Devi solo aggiungere un filtro a derived_table che filtri le transazioni negli ultimi 90 giorni. Il parametro filters per una tabella derivata utilizza la stessa sintassi che utilizzi per creare una misura filtrata.

view: user_90_day_facts {
  derived_table: {
    explore_source: order_items {
      column: user_id {
        field: order_items.user_id
      }
      column: number_of_orders_90_day {
        field: order_items.order_count
      }
      column: customer_value_90_day {
        field: order_items.total_revenue
      }
      filters: [order_items.created_date: "90 days"]
    }
  }
  # Add define view's fields as desired
  dimension: user_id {
    hidden: yes
  }
  dimension: number_of_orders_90_day {
    type: number
  }
  dimension: customer_value_90_day {
    type: number
  }
}

I filtri verranno aggiunti alla clausola WHERE quando Looker scrive l'SQL per la tabella derivata.

Inoltre, puoi utilizzare il sottoparametro dev_filters di explore_source con una tabella derivata nativa. Il parametro dev_filters consente di specificare i filtri che Looker applica solo alle versioni di sviluppo della tabella derivata, il che significa che puoi creare versioni più piccole e filtrate della tabella per l'iterazione e il test senza attendere la creazione della tabella completa dopo ogni modifica.

Il parametro dev_filters agisce in combinazione con il parametro filters affinché tutti i filtri vengano applicati alla versione di sviluppo della tabella. Se sia dev_filters sia filters specificano i filtri per la stessa colonna, dev_filters ha la precedenza per la versione di sviluppo della tabella.

Per ulteriori informazioni, vedi Lavorare più rapidamente in modalità Sviluppo.

Utilizzo dei filtri basati su modelli

Puoi utilizzare bind_filters per includere filtri basati su modelli:

bind_filters: {
  to_field: users.created_date
  from_field: filtered_lookml_dt.filter_date
}

Essenzialmente, è la stessa cosa che utilizzare il seguente codice in un blocco sql:

{% condition filtered_lookml_dt.filter_date %} users.created_date {% endcondition %}

to_field è il campo a cui viene applicato il filtro. to_field deve essere un campo di explore_source sottostante.

L'istruzione from_field specifica il campo da cui ottenere il filtro, se è presente un filtro in fase di esecuzione.

Nell'esempio precedente di bind_filters, Looker prende qualsiasi filtro applicato al campo filtered_lookml_dt.filter_date e lo applica al campo users.created_date.

Puoi anche utilizzare il parametro secondario bind_all_filters di explore_source per passare tutti i filtri di runtime da un'esplorazione a una sottoquery della tabella derivata nativa. Per saperne di più, consulta la pagina della documentazione relativa al parametro explore_source.

Ordinamento e limitazione delle tabelle derivate native

Puoi anche ordinare e limitare le tabelle derivate, se vuoi:

sorts: [order_items.count: desc]
limit: 10

Tieni presente che un'esplorazione potrebbe mostrare le righe in un ordine diverso rispetto a quello della riga sottostante.

Conversione di tabelle derivate native in fusi orari diversi

Puoi specificare il fuso orario per la tua tabella derivata nativa utilizzando il sottoparametro timezone:

timezone: "America/Los_Angeles"

Quando utilizzi il sottoparametro timezone, tutti i dati basati sul tempo nella tabella derivata nativa vengono convertiti nel fuso orario specificato. Per un elenco dei fusi orari supportati, consulta la pagina della documentazione relativa ai valori timezone.

Se non specifichi un fuso orario nella definizione della tabella derivata nativa, la tabella derivata nativa non eseguirà alcuna conversione del fuso orario sui dati basati sul tempo, che per impostazione predefinita utilizzeranno il fuso orario del database.

Se la tabella derivata nativa non è persistente, puoi impostare il valore del fuso orario su "query_timezone" per utilizzare automaticamente il fuso orario della query in esecuzione.