sql (para campos)

Esta página se refere ao parâmetro sql que faz parte de um campo.

sql também pode ser usado como parte de uma tabela derivada, conforme descrito na página de documentação de parâmetro sql (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, medida

Aceita
Uma expressão SQL

Regras especiais
Uma expressão SQL que varia de acordo com o type do campo (veja mais detalhes abaixo)

Definição

O parâmetro sql usa vários tipos de expressões SQL que vão definir uma dimensão, medida ou filtro. A expressão que você precisa escrever varia de acordo com o tipo de campo que está sendo criado. Veja mais detalhes sobre os tipos de filtro e dimensão na página de documentação Tipos de dimensões, filtros e parâmetros e mais detalhes na página de documentação Tipos de métricas. Consulte também a página de documentação Como incorporar o SQL e como se referir a objetos LookML.

sql para dimensões

O bloco sql para dimensões geralmente pode usar qualquer SQL válido que vá para 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_name faz referência a uma coluna na tabela que está 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. Observe que SQL_TABLE_NAME nesta referência é uma string literal, você não precisa substituí-la por nada.

Se sql não for especificado, o Looker entenderá que há uma coluna na tabela 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 sql de uma dimensão não pode incluir agregações. Isso significa que não pode conter agregações de SQL ou referências a medidas LookML. Se você quiser criar um campo com sql que inclua uma agregação de SQL ou que faça referência a uma medida LookML, use um parâmetro sql em uma medida, não em uma dimensão.

Uma dimensão muito simples que usa o valor diretamente de uma coluna chamada revenue pode ter esta aparência:

dimension: revenue_in_cents {
  sql: ${TABLE}.revenue ;;
  type: number
}

Uma dimensão que depende de outra dimensão 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 dimensão 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 dimensão 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 de SQL mais avançados podem realizar cálculos relativamente avançados, incluindo subconsultas correlacionadas. Observação: nem todos os dialetos do 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 específico de dimensão.

sql para grupos de dimensões

O parâmetro sql para um dimension_group usa qualquer expressão SQL válida que contenha dados em formato de carimbo de data/hora, data e hora, data, época ou aaaammdd.

sql para as medidas

O bloco sql para medidas normalmente tem uma destas duas formas:

  • O SQL em que uma função agregada (como COUNT, SUM, AVG) será executada, novamente usando o operador de substituição do Looker, conforme descrito acima.
  • Um valor com base 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 nosso 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 específico de medida.

Para um tipo de medida count, é possível deixar de fora o parâmetro sql.

Para outros tipos de medida, se sql não for especificado, o Looker entenderá que há uma coluna na tabela com o mesmo nome do campo. Como uma medida precisa ter um nome que indique que ela é um conjunto de valores subjacentes, na prática, é necessário sempre incluir um parâmetro sql.

Desafios matemáticos de SQL

Há dois desafios frequentes que surgem com a divisão no parâmetro sql.

Primeiro, se você estiver usando divisão no cálculo, quer evitar a possibilidade de divisão por zero. Isso causa um erro SQL. Para fazer isso, use a função SQL NULLIF. Por exemplo, isto 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 lida com cálculos matemáticos inteiros. Se você dividir 5 por 2, a maioria das pessoas esperará que o resultado seja 2,5. No entanto, muitos dialetos SQL retornam o resultado como apenas dois, porque quando ele divide dois números inteiros, ele também fornece o resultado como um número inteiro. Para resolver isso, você pode multiplicar 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 líquidas com sql

Também é possível usar as variáveis líquidas com o parâmetro sql. As variáveis líquidas permitem acessar dados, como os valores em um campo, dados sobre o campo e filtros aplicados ao campo.

Por exemplo, esta dimensão mascara uma senha do cliente de acordo com um atributo de usuário do Looker:

dimension: customer_password {
  sql:
    {% dynamic if _user_attributes['pw_access'] == 'yes' %}
      ${password}
    {% dynamic else %}
      "Password Hidden"
    {% dynamic endif %} ;;
}