Uso
sql_Always_where: ${created_date} >= '2017-01-01' ;;
}
Hierarquia
sql_always_where |
Valor padrão
NenhumaAceita
Uma condição WHERE do SQL que usa nomes das dimensões e/ou nomes das colunas do SQLRegras especiais
Se você referenciar um nome de coluna SQL na sql_always_where que faz parte de uma visualização mesclada em vez de parte de "Explore", é importante usar o parâmetro always_join , ou referenciar um nome de campo.
|
Definição
sql_always_where
permite aplicar uma restrição de consulta que os usuários não podem mudar. A restrição será inserida na cláusula WHERE
do SQL subjacente gerado pelo Looker em todas as consultas no Explorar em que sql_always_where
for usado. Além das consultas feitas por usuários humanos, a restrição se aplica a painéis, aparências programadas e informações incorporadas que dependem desse recurso.
A condição pode ser escrita em SQL puro, usando os nomes reais da coluna e da tabela do banco de dados. Ele também pode usar referências do Looker como:
${view_name.SQL_TABLE_NAME}
, que faz referência a uma visualização diferente do Looker ou a uma tabela derivada. Observe queSQL_TABLE_NAME
nesta referência é uma string literal. Não é necessário substituí-la por nada.${view_name.field_name}
, que faz referência a um campo do Looker. Usar esse método é melhor do que consultar diretamente as colunas do SQL porque o Looker pode incluir automaticamente qualquer mesclagem necessária.
Uma condição sql_always_where
não é exibida para o usuário, a menos que ele consulte o SQL subjacente de qualquer consulta criada por ele.
Examples
Impedir que os usuários vejam os pedidos antes de 1o de janeiro de 2012:
# Using Looker references
explore: order {
sql_always_where: ${created_date} >= '2012-01-01' ;;
}
# Using raw SQL
explore: order {
sql_always_where: DATE(created_time) >= '2012-01-01' ;;
}
Impeça que os usuários vejam as informações dos clientes da Periaptly Corporation:
explore: customer {
sql_always_where: ${name} <> 'Periaptly Corporation' ;;
}
Impedir que os usuários vejam pedidos da Periaptly Corporation:
explore: order {
sql_always_where: ${customer.name} <> 'Periaptly Corporation' ;;
join: customer {
sql_on: ${order.customer_id} = ${customer.id} ;;
}
}
Desafios comuns
Se você usar o SQL bruto, talvez seja necessário usar always_join
.
Se você referenciar um nome de coluna SQL na sql_always_where
que faz parte de uma visualização mesclada, em vez de "Explore", é importante usar o parâmetro always_join
. Veja este exemplo:
explore: order {
sql_always_where: customer.name <> 'Periaptly Corporation' ;;
join: customer {
sql_on: ${order.customer_id} = ${customer.id} ;;
}
}
Nesse caso, o sql_always_where
faz referência a uma coluna da visualização customer
mesclada, em vez de order
. Como sql_always_where
será aplicado a todas as consultas, é importante que o customer
também seja mesclado em todas as consultas.
Quando o Looker gera SQL para uma consulta, ele tenta criar o SQL mais limpo possível e usa apenas as mesclagens necessárias para os campos selecionados pelo usuário. Nesse caso, o Looker só mesclaria customer
se um usuário selecionar um campo do cliente. Usando always_join
, é possível forçar a mesclagem a ocorrer de qualquer forma.
Se em vez de sql_always_where: customer.name <> 'Periaptly Corporation'
você usasse sql_always_where: ${customer.name} <> 'Periaptly Corporation'
, o Looker seria inteligente o suficiente para fazer com que customer
participasse sem que você precisasse usar always_join
. Por isso, recomendamos que você use referências de campo do Looker em vez de referências SQL brutas sempre que possível.
Use apenas um sql_always_where
por exploração
É necessário ter apenas um sql_always_where
em uma definição de explore
. Coloque todo o comportamento desejado em uma única sql_always_where
usando AND
e OR
, conforme necessário.
Informações úteis
Há um parâmetro semelhante para a cláusula SQL HAVING
Há um parâmetro muito semelhante a sql_always_where
, chamado sql_always_having
, que funciona da mesma forma, mas aplica condições à cláusula HAVING
em vez de WHERE
.
Se você quiser filtros que um usuário possa mudar, mas não remover, considere usar always_filter
.
Se você quiser forçar os usuários a usar um conjunto específico de filtros, mas o valor padrão puder ser alterado, use always_filter
.
Se você quiser que os filtros específicos do usuário não possam ser alterados, considere usar o access_filter
.
Se você quiser que uma exploração tenha filtros específicos para cada usuário e não possa ser alterado, use access_filter
.