Unlock a world of possibilities! Login now and discover the exclusive benefits awaiting you.
Prezados, sou apenas um contador atuante na área de finanças e curioso na área de BI.
Trabalho com banco de dados Oracle e sistema Protheus (TOTVS). Me aventuro em montar algumas consultas em SQL no PL/SQL e depois de prontas faço uma query no Excel montando algumas dinâmicas que dão origem aos meus dashboards.
Recentemente descobri o Qlikview então já peço desculpas se disser alguma besteira aqui.
Minhas consultas SQL funcionam perfeitamente no Qlikview porém no momento minha dificuldade é a seguinte:
Possuo alguns dashboards que necessitam de dados que estão em tabelas totalmente distintas sem nenhuma relação. Como poço utilizar em apenas um projeto vários select ?
Exemplo:
Dashbard A - (Gráfico 1)
SELECT * FROM P11PRD.CT2010
WHERE CT2.D_E_L_E_T_<>'*'
Dashbard A - (Gráfico 2)
SELECT * FROM P11PRD.SE5010
WHERE SE5.D_E_L_E_T_<>'*'
As select, individualmente no Qlikview funcionam perfeitamente mas não consigo fazer as duas.
Procurei este assunto no forum mas não encontrei.
Uso a versão Qlikview 11 Personal (aquela grátis)
Agradeço desde já pela ajuda.
Ricardo,
Seguinte, você pode fazer o Select * from e no load carregar os campos que vai utilizar. Porém uma tabela muito grande pode dar problema de performance.
Geralmente ,quando trabalhamos (No caso eu) nas empresas , trabalho com Extrator e Aplicação.
Extrator - Faz toda a parte de select e gera o QVD, aplicação faz a leitura de QVD e apresenta os dados ao usuário.
Eu sempre procuro usar os campos somente os que vou utilizar. Tanto no load quanto no Select.
Pode colocar cada select em cada aba. Ele executa na sequencia de cima pra baixo da esquerda para direita, ou seja sempre a sequencia em que as abas estão.
Atenciosamente;
Maicon Mello
Ricardo, sim é plenamente possível e comum.
Mas antes você precisa preparar um pouco seus dados. O QlikView por natureza irá fazer ligações entre as tabelas baseado nos nomes dos campos.
Se duas (ou mais) tabelas compartilham colunas com os mesmos nomes o QV irá entender que são a mesma informação e irá fazer uma ligação entre elas. Isso pode ser desejável ou não, depende do seu caso.
Caso você não precise relacionar informações das suas tabelas, coloque o comando QUALIFY * antes do primeiro LOAD, neste caso o QV não irá fazer a ligação, pois cria nomes distintos para as colunas
Olá Ricardo , quero ver se entendi,
Você quer montar um Dash board, ou seja uma tela mostrando os dados de 2 tabelas, correto ?
Você quer utilizar algum filtro em comum ?
Exemplo, datas ...
O que quero entender melhor, você tem duas tabelas distintas , certo ? Mas possui dados que uma depende da outra ?
Pode passar um exemplo para melhor entender ?
Mas é possivel fazer !
Se eu entendi, você vai ter 2 gráficos, onde cada um terá estrutura assim :
Grafico 1 Dimensão da CT2 e expressões de campos da ct2
Grafico 2 Dimensão da SE5 e Expressões de Campo da SE5
Atenciosamente,
Maicon Mello
Olá MaiconMello . Muito obrigado por responder.
É exatamente como você entendeu.
No gráfico 1 vou usar somente dados da CT2 e no gráfico 2 usarei apenas dados da SE5.
Abraços...
Então ricardoazevedo, pode utilizar Qualify realmente para não fazer nenhum vinculo entre as tabelas.
Pode acontecer de as tabelas tenha campos iguais.
Qualify*;
Load * from tabela CT2;
Load * from Tabela SE5;
Qualify, vai qualificar todos os campos.
Exemplo ct2.campo1,ct2.campo2 etc. Com as duas tabelas.
Depois só montar o gráfico com seus respectivos campos.
Atenciosamente,
Maicon Mello
Prezado cleveranjos muito obrigado pela sua resposta.
Desculpe minha ignorância. Onde devo colocar o comando QUALIFY* ?
ODBC CONNECT32 TO [Protheus*****
SELECT SE5010.E5_DATA
FROM P11PRD.SE5010
SELECT CT2010.CT2_DEBITO
FROM P11PRD.CT2010
Abraço
ODBC CONNECT32 TO [Protheus*****
qualify *;
SE5: //Nome que quiser dar a tabela
Load Campo1
Campo2;
SELECT SE5010.E5_DATA
FROM P11PRD.SE5010
CT2: //Nome que quiser
Load Campo1,Campo2 ;
SELECT CT2010.CT2_DEBITO
FROM P11PRD.CT2010
Caso queira carregar alguns campos, coloque o nome dos campos que quer carregar, caso contrario, utilize *.
Lembrando que no Load , os campos tem que ser exatamente igual no banco, CASESENSITVE.
Att,
Maicon Mello
Pessoal,
Gostaria de colocar meu ponto de vista sobre esta questão e acredito que é valido para o desenvolvimento de toda aplicação Qlikview : Planejamento.
Planejar é a primeira etapa dentro de uma metodologia de desenvolvimento de aplicações Qlikview. Ao planejar você determina:
- indicadores você quer analisar no seu dashboard e as regras de cálculo
- definir com eles serão visualizados (tabelas, graficos, relogios)
- Que campos você vai considerar como dimensão nos gráficos e critérios de filtro
entre outros quesitos que vão orientar o seu desenvolvimento
Isso vai te ajudar a definir um modelo de dados que vai permitir a exploração de dados por diferentes perspectivas e de forma integrada.
Você vai filtrar ano e mês, e os 2 indicadores, que vem de tabelas diferentes, estarão sincronizados. Depois você filtra por produto, por cliente, por centro de custo e estes 2 indicadores vão refletir os filtros aplicados.
Colar consultas SQL em um script e trazer isso para dentro do Qlikview é importante num momento inicial do planejamento onde estamos explorando a base de dados para entender os dados existentes, senão você vai criar uma um Frankenstein que terá vida curta !
Qlikview não é somente uma ferramenta de visualização de querys !
Pensem nisso !
Abraço,
Pablo Labbe Ibaceta
ANALITIKA Inteligencia
Qlik Partner - Implementation
pablolabbe agradeço seus conselhos que colocarei em prática e tenho certeza que serão de grande valia pra mim.
No caso dessas querys que me refiro eu já as montei no PL/SQL e testei no Excel já validando os dados.
Neste caso específico estou montando querys com tabelas que realmente não se relacionam nem em datas.
Para as demais penso em relacionar pelo menos as datas para ter comparações em períodos idênticos.
Novamente agradeço as dicas.
Abraço
MaiconMello muito obrigado. Deu certo.
Ficou assim
qualify *;
SE5010: //Financeiro
Load E5_DATA,
E5_FILIAL;
SELECT SE5010.E5_DATA
, SE5010.E5_FILIAL
FROM P11PRD.SE5010;
CT2010: //Contábil
Load CT2_DEBITO,
CT2_FILIAL ;
SELECT
CT2010.CT2_DEBITO
, CT2010.CT2_FILIAL
FROM P11PRD.CT2010
Fiquei com uma dúvida. Neste caso específico, todos os campo que eu colocar abaixo do SELECT devo também colocar abaixo do Load ?
Outra dúvida que tenho é posso colocar cada selec em uma aba do editor de Script ? Como seria ?