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 saperne di più, consulta la sezione Tabelle derivate native e 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 gran 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à sviluppo, vai ai file del progetto.

  2. Fai clic sul segno + in cima all'elenco dei file di progetto nell'IDE di Looker e seleziona Crea vista. In alternativa, puoi fare clic sul menu di una cartella e selezionare Crea vista dal menu 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 la misura 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 vista selezionando Mostra nome completo del campo in Serie nelle impostazioni di visualizzazione oppure utilizzando il parametro view_label con una versione plurale del nome della vista.

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 dalla 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 è basata su un'esplorazione, include i campi di misura e dimensione, aggiunge eventuali filtri applicabili e può anche specificare un ordinamento. Una tabella derivata nativa contiene tutti questi elementi più i nomi di output delle 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: Looker crea la query per te utilizzando l'esplorazione order_items specificata e alcuni dei campi dell'esplorazione (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 delle istruzioni include per abilitare 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 disponi dell'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 sono spesso definite all'interno di un file del modello, ma nel caso di tabelle derivate native, è più semplice creare un file separato per l'esplorazione. I file di esplorazione LookML hanno l'estensione del file .explore.lkml, come descritto nella documentazione relativa alla creazione di file di esplorazione. In questo modo, nel file di visualizzazione tabella derivata nativo puoi includere un singolo file di esplorazione e non l'intero file del modello.

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

  • Il file di visualizzazione della tabella derivata nativa deve includere il file di Esplora. Ad esempio:
    • include: "/explores/order_items.explore.lkml"
  • Il file dell'esplorazione deve includere i file delle viste 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 i nomi delle colonne

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 generava un calcolo del lifetime value per utente utilizzando l'esplorazione order_items. Nella tabella di output, total_revenue è davvero il 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
}

equivale 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 nell'esplorazione del parametro explore_source. Ogni parametro derived_column ha un parametro sql che specifica come creare il valore.

Nel calcolo del sql può essere utilizzato 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, ma aggiunge una colonna average_customer_order calcolata, che viene calcolata dalle colonne lifetime_customer_value e lifetime_number_of_orders della 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, tutte le 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 di voler creare una tabella derivata del valore di un cliente negli ultimi 90 giorni. Vuoi gli stessi calcoli che hai utilizzato nell'esempio precedente, ma vuoi includere solo gli acquisti degli ultimi 90 giorni.

Devi solo aggiungere a derived_table un filtro per filtrare le transazioni degli 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 con 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 del valore explore_source sottostante.

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

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

Puoi anche utilizzare il sottoparametro bind_all_filters di explore_source per passare tutti i filtri di runtime da un'esplorazione a una sottoquery di 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

Ricorda che un'esplorazione potrebbe visualizzare le righe in un ordine diverso rispetto all'ordinamento 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 di 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 e i dati basati sul tempo verranno impostati sul fuso orario del database per impostazione predefinita.

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 attualmente in esecuzione.