Unlock a world of possibilities! Login now and discover the exclusive benefits awaiting you.
Pessoal boa tarde!
Gostaria de uma sugestão de vocês!
Tenho uma tabela em Excel, que, para cada documento e para cada mês, tenho alguns registros de tarefas (separadas por <br>).
Existem por exemplo, várias tarefas para o mesmo mês em um determinado documento.
Qual seria a melhor maneira de modelar esses dados? Crio uma tabela para mês com a chave do documento e outra para tarefas? Uma de Documentos e tarefas apenas para se relacionar com o mês?
Preciso passar isso para um QlikView porém fiquei meio perdido nisso... Segue exemplo:
Amigo, segue:
Temp_Tabela:
CrossTable(Documento,Registros)
LOAD *
FROM docs_month.xlsx (ooxml, embedded labels, table is Planilha1)
;
Tabela:
Load
Mês,
Documento,
SubField(Registros,'<br>',IterNo()) As 'Tarefa'
While IterNo() <= [Qtd Reg.]
;
Load
F1 As 'Mês',
Documento,
Registros,
SubStringCount(Registros,'<br>') As 'Qtd Reg.'
Resident Temp_Tabela
Where Len(Registros)>0 And Not Match(Registros,'Content') ;
Drop Table Temp_Tabela;
Paulo
Se entendi bem, minha sugestão:
1 tabela com os documentos/meses
1 tabela com as tarefas, ligadas ao documento/mês
Bom dia Marcio, obrigado pela resposta!
Mas por exemplo, meus dados estão em forma de matriz, como posso trazer isso para o QlikView?
Um motivo por eu ter essa dúvida é: cada documento tem uma relação com cada um dos meses, e tenho muitos documentos, não seria viável uma única tabela com os meses para após a leitura no qlikview relacionar com a de documentos?
Bom dia Paulo;
Pode compartilhar um exemplo da planilha?
Utilizaria umas fórmulas como Corsstable, TextBetween, While/IterNo()... Para estruturar estes dados.
Para entendimento:
O que significa a linha 1 da planilha?
Célula B14 está somente relacionada a célula B1?
Bom dia Mário, posso sim... Segue anexo!
Então, a linha 1 seria os documentos, por exemplo:
Cada célula um registro, Paper4501001, Paper4501001,5, Paper4501002.
Para cada determinado documento, em uma linha do tempo de mês, existem tarefas, alguns documentos mais outros menos, peguemos um exemplo:
Para o documento Paper4501001, ele não terá tarefas nos meses 1 a 11, porém no mês 12 ele terá várias tarefas, separadas por <br> pois é uma extração HTML.
Eu preciso quebrar essas tarefas em vários registros para que elas se relacionem no QlikView, por isso a minha duvida quanto à modelagem.
As 3 dimensões que eu tenho são documento, tarefa e mês.
Sendo que para o documento 4501001 no mês 12 ele executará as tarefas 12MO, 26-24-00-001, 24-36-01-002, etc...
Haverá outras planilhas no mesmo formato, com outros documentos e outras tarefas, mas o mês será sempre de 1 até 240, a ideia seria criar uma linha do tempo, e ao selecionar por exemplo a tarefa, eu soubesse que documentos executarão a mesma e em que mês.
Tentei explicar a ideia, ficou claro?
Se tiver alguma dúvida mencione que eu tento explicar melhor...
Esqueci de responder algo:
A célula B14 não está relacionada somente a B1, a célula B14 são as tarefas que o Documento 4501001 (célula B1) executará no mês 12 (célula A14)
Amigo, segue:
Temp_Tabela:
CrossTable(Documento,Registros)
LOAD *
FROM docs_month.xlsx (ooxml, embedded labels, table is Planilha1)
;
Tabela:
Load
Mês,
Documento,
SubField(Registros,'<br>',IterNo()) As 'Tarefa'
While IterNo() <= [Qtd Reg.]
;
Load
F1 As 'Mês',
Documento,
Registros,
SubStringCount(Registros,'<br>') As 'Qtd Reg.'
Resident Temp_Tabela
Where Len(Registros)>0 And Not Match(Registros,'Content') ;
Drop Table Temp_Tabela;
Mario, sensacional!! É exatamente esse o resultado que eu buscava..
Deixe-me te incomodar mais um pouco, pode me dar uma explicação bem breve do que está sendo feito no script?
Tenho de fazer esse procedimento para mais algumas planilhas de documentos no mesmo formato, e seria legal entender a estrutura das tabelas pra garantir que eu não esteja fazendo bobagem...
Devo reforçar que ficou muito bom, muitíssimo obrigado!!
Um abraço!
Percebi que depois da carga, no campo de mês só ficaram os registros que contém tarefas, seria possível incluir os meses mesmo que não hajam tarefas atribuidas?
Só ajustar:
Where Len(Registros)>0 And Not Match(Registros,'Content') ;
Para:
Where Not Match(Registros,'Content') ;