Skip to main content
cancel
Showing results for 
Search instead for 
Did you mean: 
Not applicable

Criando Referencia entre Tabelas

Olá Pessoal.

Estou iniciando no universo de BI com Qlik.

Gostaria de uma ajuda, para um caso que creio ser simples para alguns.

Tenho um banco em Sql Server 2008. Ele é usado para um sistema de varejo, vendas de produtos para restaurante. Nesse banco as tabelas vão se ligando por diversas colunas chaves, obviamente, porém, existe um caso que não esta rolando.

Vou exemplificar com um comanda sql que funciona diretamente na base.

(Aqui ele usa a tabela HEADERVENDAGERAL para pegar a data e a mesa que uma pessoa se sentou em um determinado dia)

SELECT NU_SEQUENCIA,MESA_ID,DT_CONTABIL,NU_PESSOA1 FROM HEADERVENDAGERAL WHERE DT_CONTABIL='21/02/2015' AND MESA_ID=1

(Com base na mesa, ele pega a sequencia, ou seja, o giro da mesa naquele dia, e ve o que foi consulmido de materiais nesta mesa, neste dia)

SELECT (SELECT PRD_NOME FROM MATERIAL WHERE MATERIAL_ID = ITEMVENDAGERAL.MATERIAL_ID) MATERIAL,NU_SEQUENCIA,mesa_dest,mesa_orig FROM ITEMVENDAGERAL WHERE NU_SEQUENCIA=57 AND DT_CONTABIL='21/02/2015'

No Qliviwer esta assim:

SQL SELECT material_id as cod_material,prd_nome as desc_material,grupo_id,vl_precovenda from material;

SQL SELECT grupo_id,nm_descricao from grupomaterial;

SQL SELECT nu_sequencia as sequencia, MATERIAL_ID as cod_material,func_cancela as quem_cancelou,vl_preco,func_lanca as quem_lancou from itemvendageral;

SQL SELECT mesa_id,nu_sequencia as sequencia,Year(dt_contabil) as Ano,dt_contabil as data,Month(dt_contabil) as Mes,Day(dt_contabil) as Dia from headervendageral;

Meu objetivo, é clicar na data, ele pegar as mesas que foram usadas naquela data, clicar na sequencia, e ele me mostrar os materiais que foram consumidos naquela data.

A primeira parte, até a sequencia, ele esta fazendo, só não mostrar os materiais que foram consulmidos quando seleciono a sequencia, e não sei porque...

Só um detalhe, na tabela itemvendageral, existe um campo chamado vl_preco, este campo é o valor consumido pela mesa em um determinado dia, ou seja, se o cara seleciona data, mesa, sequencia, queria que aparecece este valor unico para vizualização, mas também não consegui.

Agradeço se alguém puder me orientar.

Abraço.

Maciel

Labels (2)
1 Solution

Accepted Solutions
jonas_rezende
Specialist
Specialist

Maciel.

Para somar os materiais você pode utilizar uma função de agregação, experimente pô-la em um objeto de texto. Ex.: Sum(vl_preco). Depois organize sua apresentação em um objeto gráfico. Ex.: gráfico de barras, tabela simples, tabela dinâmica entre outras opções oferecidas.

Quanto ao left join, o link exibido no post das 17:05 de 14/07/2015 poderá ajudá-lo.

Atenciosamente,

Jonas Melo.

View solution in original post

9 Replies
nicolett_yuri

Maciel, você esta com dúvida de como montar a sua modelagem, correto?

Ficaria um pouco mais fácil de entender se você disponibilizar suas tabelas com dados de exemplo, pode ser em uma planilha excel.

Not applicable
Author

Claro Yuri.

Esta um pouco grande.

Vai o anexo do xls

FLUXO.jpg

jonas_rezende
Specialist
Specialist

Oi, Maciel.

As suas tabelas assemelham-se ao modelo que foi montado para as notas fiscais de vendas em um projeto.

Modelo no projeto

Obviamente, o banco de dados relacional de uma lado tem a tabela de cabeçalho e do outro os itens das vendas. Portanto, quando estas tabelas foram levadas para o DW, transformou-se em uma única – a tabela fato - nota fiscal de saída. Como?

Alguns campos em comum às tabelas possibilitaram essa junção com um simples left join (sendo a tabela de cabeçalho a da esquerda), tais como: código da loja, nota fiscal, série e data geração da nota. Os demais campos da tabela de itens (valores, sequência, quantidade) foram "carregados". Quanto as demais tabelas, a saber, de dimensão, como família de produto e produto, conectaram-se por meio da associação.

O seu modelo

A sua tabela de itens de vendas não teria o campo mesa_id?  Se sim, teria entre as tabelas os campos em comum: loja, mesa, data contábil ou de geração para um simples left join, ficando o modelo como imagem mesa_id_nas_duas tabelas_.jpg. Ou o campo sequencia seria esse objeto forte de ligação? Caso afirmativo, o mesa_id estaria apenas na tabela de cabeçalho como imagem sequencia_como_campo_forte_nas_duas_tabelas.jpg. Notarás que o modelo não mudará a sua forma, mas sim a essência, dentro do script. Entretanto, para ambos precisará da data nas duas tabelas, com ou sem o mesa_id.

P.S.: foi acrescentado um modelo de como ficaria o script.

Espero que isso ajude!

Not applicable
Author

Jonas, primeiro obrigado por perder seu tempo com um iniciante.

Eu entendi um pouco, porém, no caso da tabela itemvendageral,não tem o mesa_id, apenas a tabela headervendageral.

Por isso, preciso do campo sequencia_id, que uni essas duas tabelas.

O campo data é comum nas duas tabelas.

Sinceramente, fiquei um pouco perdido.

Muito obrigado.

Maciel

Not applicable
Author

Se alguém tiver uma dica para me ajudar a compreender agradecia muito.

Maciel

jonas_rezende
Specialist
Specialist

Maciel.

Dica: divida as tarefas. Faça uma parte, depois, une-as criando um único modelo.

1. Concentre-se na construção da tabela fato - transforme heardevendageral e itemvendageral em uma única com left join. Em seguida, valide o resultado dessa junção, por exemplo: mesa, data, sequencia e valor. Caso tenha dúvida como usar o comando, verifique http://www.youtube.com/watch?v=FFwS-28Xmao

2. Concluído o item anterior, carregue a tabela material. Valide o resultado;

3. Por fim, carregue a tabela grupo material.

Dessa forma, os campos se ligarão como exemplificado no arquivo qvs em post anterior.

Espero que isso ajude!

Not applicable
Author

Jonas, deu certo.

Usando sua lógica consegue checar no resultado. A questão é que não entendi o que o Left Join poderia fazer. Demais.

Pra matar, o campo vl_preco é o valor de cada material, teria como após selecionar os campos ele somasse o valor dos materiais que apareceram no resultado?

dash.jpg

jonas_rezende
Specialist
Specialist

Maciel.

Para somar os materiais você pode utilizar uma função de agregação, experimente pô-la em um objeto de texto. Ex.: Sum(vl_preco). Depois organize sua apresentação em um objeto gráfico. Ex.: gráfico de barras, tabela simples, tabela dinâmica entre outras opções oferecidas.

Quanto ao left join, o link exibido no post das 17:05 de 14/07/2015 poderá ajudá-lo.

Atenciosamente,

Jonas Melo.

Not applicable
Author

Obrigado Jonas.

Isso eu tinha tentado, mas ele não agrupa os valores.

Achei o que precisava usando o objeto de pasta , caixa de estatística, usei a opção soma e deu certinho.

Muito obrigado pela ajuda.