Uma tabela derivada é uma consulta em que os resultados são usados como se a tabela derivada fosse uma tabela física no banco de dados. Uma tabela derivada nativa é baseada em uma consulta definida usando termos do LookML. Isso é diferente de uma tabela derivada com base em SQL, que é baseada em uma consulta definida com termos SQL. Em comparação com as tabelas derivadas baseadas em SQL, as tabelas derivadas nativas são muito mais fáceis de ler e entender ao modelar os dados. Consulte a seção Tabelas derivadas nativas e tabelas derivadas baseadas em SQL da página de documentação Tabelas derivadas no Looker para mais informações.
As tabelas derivadas nativas e baseadas em SQL são definidas no LookML usando o derived_table parâmetro no nível da visualização. No entanto, com as tabelas derivadas nativas, não é necessário criar uma consulta SQL. Em vez disso, use o parâmetro explore_source para especificar a análise em que a tabela derivada será baseada, as colunas desejadas e outras características.
Também é possível fazer com que o Looker crie o LookML da tabela derivada com base em uma consulta do SQL Runner, conforme descrito na página de documentação Como usar o SQL Runner para criar tabelas derivadas.
Usar uma análise para começar a definir as tabelas derivadas nativas
Começando com uma análise, o Looker pode gerar o LookML para toda ou a maior parte da tabela derivada. Basta criar uma análise e selecionar todos os campos que você quer incluir na tabela derivada. Em seguida, para gerar o LookML da tabela derivada nativa, siga estas etapas:
Selecione o menu de engrenagem Ações da análise e selecione Acessar o LookML.

Clique na guia Tabela derivada para conferir o LookML para criar uma tabela derivada nativa para a análise.

Copie o LookML.
Agora que você copiou o LookML gerado, cole-o em um arquivo de visualização:
No modo de desenvolvimento, acesse os arquivos do projeto.
Clique em + na parte de cima da lista de arquivos do projeto no ambiente de desenvolvimento integrado (IDE, na sigla em inglês) do Looker e selecione Criar visualização. Como alternativa, clique no menu de uma pasta e selecione Criar visualização no menu para criar o arquivo dentro da pasta.
Defina um nome significativo para a visualização.
Opcionalmente, mude os nomes das colunas, especifique colunas derivadas e adicione filtros.
Quando você usa uma medida de
type: countem uma análise, a visualização rotula os valores resultantes com o nome da visualização em vez da palavra Contagem. Para evitar confusão, coloque o nome da visualização no plural. Você pode mudar o nome da visualização selecionando Mostrar nome completo do campo em Série nas configurações de visualização ou usando o parâmetroview_labelcom uma versão pluralizada do nome da visualização.
Definir uma tabela derivada nativa no LookML
Se você usar tabelas derivadas declaradas em SQL ou LookML nativo, a saída da consulta de uma derived_table's será uma tabela com um conjunto de colunas. Quando a tabela derivada é expressa em SQL, os nomes das colunas de saída são implícitos pela consulta SQL. Por exemplo, a consulta SQL a seguir terá as colunas de saída 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
No Looker, uma consulta é baseada em uma análise, inclui campos de medida e dimensão, adiciona todos os filtros aplicáveis e também pode especificar uma ordem de classificação. Uma tabela derivada nativa contém todos esses elementos, além dos nomes de saída das colunas.
O exemplo simples a seguir produz uma tabela derivada com três colunas: user_id, lifetime_customer_value e lifetime_number_of_orders. Não é necessário escrever a consulta manualmente em SQL. Em vez disso, o Looker cria a consulta para você usando a análise especificada order_items e alguns dos campos dessa análise (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
}
}
Usar instruções include para ativar campos de referência
No arquivo de visualização da tabela derivada nativa, use o explore_source parâmetro para apontar para uma análise e definir as colunas e outras características da tabela derivada nativa.
No arquivo de visualização da tabela derivada nativa, não é necessário usar o include parâmetro para apontar para o arquivo que contém a definição da análise. Se você não tiver a instrução include, o ambiente de desenvolvimento integrado do Looker não vai autosuggest nomes de campos nem verificar as referências de campo ao criar a tabela derivada nativa. Em vez disso, use o validador do LookML para verificar os campos a que você está fazendo referência na tabela derivada nativa.
No entanto, se você quiser ativar a sugestão automática e a verificação imediata de campos no ambiente de desenvolvimento integrado do Looker ou se tiver um projeto do LookML complexo com várias análises do mesmo nome ou potencial para referências circulares, use o parâmetro include para apontar para o local da definição da análise.
As Análises geralmente são definidas em um arquivo de modelo, mas, no caso de tabelas derivadas nativas, é mais limpo criar um arquivo separado para a Análise. Os arquivos de análise do LookML têm a extensão de arquivo .explore.lkml, conforme descrito na documentação para criar arquivos de análise. Dessa forma, no arquivo de visualização em tabela derivada nativa, você pode incluir um único arquivo do Explore e não o arquivo modelo inteiro.
Se você quiser criar um arquivo do Explore separado e usar o parâmetro include para apontar para o arquivo do Explore no arquivo de visualização da tabela derivada nativa, verifique se os arquivos LookML atendem aos seguintes requisitos:
- O arquivo de visualização da tabela derivada nativa precisa incluir o arquivo da análise. Por exemplo:
include: "/explores/order_items.explore.lkml"
- O arquivo da análise precisa incluir os arquivos de visualização necessários. Por exemplo:
include: "/views/order_items.view.lkml"include: "/views/users.view.lkml"
- O modelo precisa incluir o arquivo da análise. Por exemplo:
include: "/explores/order_items.explore.lkml"
Definir colunas de tabelas derivadas nativas
Conforme mostrado no exemplo anterior, use column para especificar as colunas de saída da tabela derivada.
Especificar os nomes das colunas
Para a coluna user_id, o nome da coluna corresponde ao nome do campo especificado na análise original.
Com frequência, você vai querer um nome de coluna diferente na tabela de saída do nome dos campos na análise original. O exemplo anterior produziu um cálculo de valor da vida útil por usuário usando a análise order_items. Na tabela de saída, total_revenue é realmente o lifetime_customer_value de um cliente.
A declaração column oferece suporte à declaração de um nome de saída diferente do campo de entrada. Por exemplo, o código a seguir instrui o Looker a "criar uma coluna de saída chamada lifetime_value do campo order_items.total_revenue":
column: lifetime_value {
field: order_items.total_revenue
}
Nomes de colunas implícitos
Se o parâmetro field for deixado de fora de uma declaração de coluna, ele será considerado <explore_name>.<field_name>. Por exemplo, se você tiver especificado explore_source: order_items, então
column: user_id {
field: order_items.user_id
}
é equivalente a
column: user_id {}
Criar colunas derivadas para valores calculados
É possível adicionar parâmetros derived_column para especificar colunas que não existem na análise do parâmetro explore_source. Cada parâmetro derived_column tem um parâmetro sql que especifica como construir o valor.
O cálculo sql pode usar todas as colunas especificadas usando parâmetros column. As colunas derivadas não podem incluir funções agregadas, mas podem incluir cálculos que podem ser realizados em uma única linha da tabela.
O exemplo a seguir produz a mesma tabela derivada do exemplo anterior, exceto que ele adiciona uma coluna average_customer_order calculada, que é calculada nas colunas lifetime_customer_value e lifetime_number_of_orders na tabela derivada 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
}
}
Usar funções de janela SQL
Alguns dialetos de banco de dados oferecem suporte a funções de janela, especialmente para criar números de sequência, chaves primárias, totais em execução e cumulativos e outros cálculos úteis de várias linhas. Depois que a consulta principal é executada, todas as declarações derived_column são executadas em uma passagem separada.
Se o dialeto do banco de dados oferecer suporte a funções de janela, você poderá usá-las na tabela derivada nativa. Crie um parâmetro derived_column com um parâmetro sql que contenha a função de janela desejada. Ao se referir a valores, use o nome da coluna conforme definido na tabela derivada nativa.
O exemplo a seguir cria uma tabela derivada nativa que inclui as colunas user_id, order_id e created_time. Em seguida, usando uma coluna derivada com uma função de janela SQL ROW_NUMBER(), ela calcula uma coluna que contém o número de sequência do pedido de um 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
}
}
Adicionar filtros a uma tabela derivada nativa
Suponha que você queira criar uma tabela derivada do valor de um cliente nos últimos 90 dias. Você quer os mesmos cálculos que realizou no exemplo anterior, mas só quer incluir compras dos últimos 90 dias.
Basta adicionar um filtro à derived_table que filtre as transações nos últimos 90 dias. O parâmetro filters de uma tabela derivada usa a mesma sintaxe usada para criar uma medida filtrada.
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
}
}
Os filtros serão adicionados à cláusula WHERE quando o Looker gravar o SQL para a tabela derivada.
Além disso, é possível usar o dev_filters subparâmetro de explore_source com uma tabela derivada nativa. O parâmetro dev_filters permite especificar filtros que o Looker aplica apenas às versões de desenvolvimento da tabela derivada, o que significa que você pode criar versões menores e filtradas da tabela para iterar e testar sem esperar que a tabela completa seja criada após cada mudança.
O parâmetro dev_filters funciona em conjunto com o parâmetro filters para que todos os filtros sejam aplicados à versão de desenvolvimento da tabela. Se dev_filters e filters especificarem filtros para a mesma coluna, dev_filters terá precedência para a versão de desenvolvimento da tabela.
Consulte Trabalhar mais rápido no modo de desenvolvimento para mais informações.
Usar filtros com modelo
É possível usar bind_filters para incluir filtros com modelo:
bind_filters: {
to_field: users.created_date
from_field: filtered_lookml_dt.filter_date
}
Isso é essencialmente o mesmo que usar o código a seguir em um bloco sql:
{% condition filtered_lookml_dt.filter_date %} users.created_date {% endcondition %}
O to_field é o campo ao qual o filtro é aplicado. O to_field precisa ser um campo do explore_source subjacente.
O from_field especifica o campo de onde o filtro será extraído, se houver um filtro no tempo de execução.
No exemplo bind_filters anterior, o Looker vai usar qualquer filtro aplicado ao campo filtered_lookml_dt.filter_date e aplicar o filtro ao campo users.created_date.
Também é possível usar o bind_all_filters subparâmetro de explore_source para transmitir todos os filtros de tempo de execução de uma análise para uma subconsulta de tabela derivada nativa. Consulte a página de documentação do parâmetro explore_source para mais informações.
Classificar e limitar tabelas derivadas nativas
Também é possível classificar e limitar as tabelas derivadas, se necessário:
sorts: [order_items.count: desc]
limit: 10
Lembre-se de que uma análise pode mostrar as linhas em uma ordem diferente da classificação subjacente.
Converter tabelas derivadas nativas em fusos horários diferentes
É possível especificar o fuso horário da tabela derivada nativa usando o subparâmetro timezone:
timezone: "America/Los_Angeles"
Quando você usa o subparâmetro timezone, todos os dados baseados em tempo na tabela derivada nativa são convertidos para o fuso horário especificado. Consulte a página de documentação de valores timezone para conferir uma lista dos fusos horários com suporte.
Se você não especificar um fuso horário na definição da tabela derivada nativa, ela não vai realizar nenhuma conversão de fuso horário em dados baseados em tempo. Em vez disso, os dados baseados em tempo serão definidos como o fuso horário do banco de dados.
Se a tabela derivada nativa não for persistente, defina o valor do fuso horário como "query_timezone" para usar automaticamente o fuso horário da consulta em execução.