Usando subconsultas com o Direct Discovery
Se a cardinalidade do campo chave unindo a tabela for alta, ou seja, se contiver um número grande de valores distintos, uma seleção no Qlik Sense poderá gerar um comando SQL muito grande, já que a cláusula WHERE key_field IN poderá conter um número grande de valores. Nesse caso, uma solução possível é deixar o Qlik Sense criar subconsultas.
Para ilustrar isso, usamos um exemplo onde uma tabela de produtos (ProductTable) é vinculada a uma tabela de ordem de vendas (SalesOrderDetail) usando uma ID do produto (ProductID), com ambas as tabelas usadas no modo Direct Discovery.
Criamos um gráfico com OrderMonth como dimensão e Sum(Subtotal) como medida, e uma caixa de filtro para seleção do Size.
Cenário 1: Baixa cardinalidade
Nesse cenário, a tabela do produto contém um baixo número de produtos distintos, 266. Se fizermos uma seleção em Size, o Direct Discovery gerará um comando SQL para retornar os dados, usando uma cláusula WHERE ProductID IN, a qual conterá as IDs do produto, fazendo correspondência com o tamanho selecionado, nesse caso, 19 produtos.
O SQL gerado tem a seguinte aparência:
Cenário 2: Usando subconsultas
Se o mesmo exemplo contiver um número alto de produtos distintos, por exemplo 20.000, a seleção de um filtro de dimensão Size, por exemplo, poderá gerar um comando SQL com uma cláusula WHERE ProductID IN contendo milhares de IDs do produto. O comando resultante pode ser muito grande para ser administrado pela fonte de dados devido a limitações ou problemas de memória ou desempenho.
A solução é deixar o Qlik Sense criar subconsultas, configurando o DirectEnableSubquery como "true". O comando SQL gerado poderá ter a seguinte aparência:
O tamanho da cláusula WHERE ProductID IN não depende mais do número de chaves resultante da seleção.
As seguintes limitações aplicam-se ao uso de subconsultas:
- A sintaxe da subconsulta é invocada somente quando você selecionar dados que envolvam a filtragem de gráficos usando dados de outra tabela.
- A quantidade de dados nas chaves é o fator determinante, não o número de chaves.
- As subconsultas são invocadas somente se todas as tabelas envolvidas estiverem no modo Direct Discovery. Se você filtrar o gráfico usando dados de uma tabela incluída no modo de memória, uma cláusula IN será gerada.