Esta página se refere ao parâmetro
sqlque faz parte de um campo.
sqltambém pode ser usado como parte de uma tabela derivada, conforme descrito na página de documentação do parâmetrosql(para tabelas derivadas).
Uso
view: view_name {
dimension: field_name {
sql: ${revenue_in_dollars} - ${inventory_item.cost_in_dollars} ;;
}
}
|
Hierarquia
sql |
Tipos de campo possíveis
Dimensão, grupo de dimensões, filtro, métrica
Aceita
Uma expressão SQL
Regras especiais
Uma expressão SQL que varia de acordo com o type do campo, conforme descrito em detalhes nesta página de documentação.
|
Definição
O parâmetro sql usa vários tipos de expressões SQL que definem uma dimensão, uma métrica ou um filtro. A expressão que você precisa escrever varia de acordo com o tipo de campo que está criando. Mais detalhes sobre tipos de dimensões e filtros podem ser encontrados na página de documentação Tipos de dimensões, filtros e parâmetros, enquanto mais detalhes sobre tipos de métricas podem ser encontrados na página de documentação Tipos de métricas. Consulte também a página de documentação Como incorporar SQL e se referir a objetos LookML.
sql para dimensões
O bloco sql para dimensões geralmente pode usar qualquer SQL válido que entraria em uma única coluna de uma instrução SELECT. Essas instruções geralmente dependem do operador de substituição do Looker, que tem várias formas:
${TABLE}.column_namefaz referência a uma coluna na tabela conectada à visualização em que você está trabalhando.${dimension_name}faz referência a uma dimensão na visualização em que você está trabalhando.${view_name.dimension_name}faz referência a uma dimensão de outra visualização.${view_name.SQL_TABLE_NAME}faz referência a outra visualização ou tabela derivada.SQL_TABLE_NAMEnesta referência é uma string literal. Não é necessário substituir por nada.
Se sql não for especificado, o Looker vai presumir que há uma coluna na tabela subjacente com o mesmo nome do campo. Por exemplo, selecionar um campo chamado city sem um parâmetro sql seria equivalente a especificar sql: ${TABLE}.city.
O parâmetro
sqlde uma dimensão não pode incluir agregações. Isso significa que ele não pode conter agregações SQL ou referências a medidas do LookML. Se você quiser criar um campo comsqlque inclua uma agregação SQL ou faça referência a uma medida da LookML, use um parâmetrosqlem uma medida, não em uma dimensão.
Uma dimensão muito simples que extrai o valor diretamente de uma coluna chamada revenue pode ser assim:
dimension: revenue_in_cents {
sql: ${TABLE}.revenue ;;
type: number
}
Uma dimensão que depende de outra na mesma visualização pode ter esta aparência:
dimension: revenue_in_dollars {
sql: ${revenue_in_cents} / 100 ;;
type: number
}
Uma dimensão que depende de outra em uma visualização diferente pode ter esta aparência:
dimension: profit_in_dollars {
sql: ${revenue_in_dollars} - ${inventory_item.cost_in_dollars} ;;
type: number
}
Uma dimensão que depende de outra em uma tabela derivada pode ter esta aparência:
dimension: average_margin {
sql: (SELECT avg(${gross_margin} FROM ${order_facts.SQL_TABLE_NAME})) ;;
type: number
}
Usuários mais avançados de SQL podem realizar cálculos relativamente avançados, incluindo subconsultas correlacionadas. Observação: nem todos os dialetos de banco de dados são compatíveis com subconsultas correlacionadas.
dimension: user_order_sequence_number {
type: number
sql:
(
SELECT COUNT(*)
FROM orders AS o
WHERE o.id <= ${TABLE}.id
AND o.user_id = ${TABLE}.user_id
) ;;
}
Para mais detalhes, consulte a documentação de um tipo de dimensão específico.
sql para grupos de dimensões
O parâmetro sql de um dimension_group usa qualquer expressão SQL válida que contenha dados em um carimbo de data/hora, data e hora, data, época ou formato aaaammdd.
sql para métricas
O bloco sql para métricas geralmente tem uma destas duas formas:
- O SQL em que uma função de agregação (como
COUNT,SUM,AVG) será executada, usando novamente o operador de substituição do Looker, conforme descrito na seção SQL para dimensões. - Um valor baseado em várias outras medidas
Por exemplo, para calcular a receita total em dólares, podemos usar:
measure: total_revenue_in_dollars {
sql: ${revenue_in_dollars} ;;
type: sum
}
Para calcular o lucro total, podemos usar:
measure: total_revenue_in_dollars {
sql: ${total_revenue_in_dollars} - ${inventory_item.total_cost_in_dollars} ;;
type: number
}
Para mais detalhes, consulte a documentação de um tipo de métrica específico.
Para um tipo de medida count, você pode omitir o parâmetro sql.
Para outros tipos de medidas, se sql não for especificado, o Looker vai presumir que há uma coluna na tabela subjacente com o mesmo nome do campo. Como uma métrica precisa ter um nome que indique que ela é um agregado de um conjunto de valores subjacente, na prática, sempre inclua um parâmetro sql.
Desafios de matemática em SQL
Há dois desafios frequentes que surgem com a divisão no parâmetro sql.
Primeiro, se você estiver usando a divisão no cálculo, proteja-se contra a possibilidade de dividir por zero, o que vai causar um erro de SQL. Para isso, use a função SQL NULLIF. Por exemplo, este exemplo significa "se o denominador for zero, trate-o como NULL":
measure: active_users_percent {
sql: ${active_users} / NULLIF(${users}, 0) ;;
type: number
}
Outro problema é a forma como o SQL processa a matemática de números inteiros. Se você dividir 5 por 2, a maioria das pessoas espera que o resultado seja 2,5. No entanto, muitas linguagens SQL retornam o resultado como apenas 2, porque, ao dividir dois números inteiros, o resultado também é um número inteiro. Para resolver isso, multiplique o numerador por um número decimal para forçar o SQL a retornar um resultado decimal. Exemplo:
measure: active_users_percent {
sql: 100.00 * ${active_users} / NULLIF(${users}, 0) ;;
type: number
}
Variáveis do Liquid com sql
Também é possível usar variáveis Liquid com o parâmetro sql. Com as variáveis Liquid, é possível acessar dados como os valores em um campo, informações sobre o campo e filtros aplicados a ele.
Por exemplo, essa dimensão mascara uma senha de cliente de acordo com um atributo do usuário do Looker:
dimension: customer_password {
sql:
{% if _user_attributes['pw_access'] == 'yes' %}
${password}
{% else %}
"Password Hidden"
{% endif %} ;;
}