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

tratamento de dimensão para uma tabela

Pessoal, bom dia!

Tenho a seguinte situação:

1) Tenho uma tabela de pedido, onde tenho as datas dos pedidos e clientes.

2) Criei uma tabela de calendario e vinculei a data do pedido a esta tabela de calendário.

3) Fiz uma tabela para demonstrar a carteira de pedidos mensalmente por cliente e se houve faturamento para o mesmo naquele mes.


Quando eu não seleciono nenhum cliente especifíco ele me mostra todos os meses do ano (de janeiro a dezembro) e coloca os valores no mes em que o cliente teve pedido.

Caso não tenha acontecido faturamento naquele mes, para dar baixa naquele valor de pedido, eu jogo este valor para o próximo mes como carteira de pedidos.

Porém quando seleciono algum cliente, ele me mostra somente o mes em que o cliente teve o pedido, e caso não tenha acontecido faturamento, ele teria que jogar o valor para o próximo mes. Selecionando um cliente não consegui fazer isto.

Alguem tem alguma dica de como poderia tratar esta questão?

Segue print no anexo.

5 Replies
cesaraccardi
Specialist
Specialist

Olá Juliana, uma pergunta... essa sua tabela de calendário você gerou com todas as datas possíveis em um intervalo de data ou somente nas datas que tem lançamentos?

Not applicable
Author

Olá Cesar, boa tarde!
A tabela calendario eu gerei da seguinte maneira:

CALENDARIO:
LOAD DT_CALENDARIO                        AS DT_CALENDARIO,
     Year(DT_CALENDARIO)                  AS DT_ANO_CALENDARIO,
     Month(DT_CALENDARIO)                 AS DT_MES_CALENDARIO,
     Day(DT_CALENDARIO)                   AS DT_DIA_CALENDARIO,
     Month(DT_CALENDARIO)  & '/' &
     NUM(Year(DT_CALENDARIO))             AS DT_MESANO_CALENDARIO,
     WeekDay(DT_CALENDARIO)               AS DT_DIA_SEMANA_CALENDARIO,
     NUM(Year(DT_CALENDARIO))             AS NR_ANO_CALENDARIO,
     NUM(Month(DT_CALENDARIO))            AS NR_MES_CALENDARIO,
     NUM(Day(DT_CALENDARIO))              AS NR_DIA_CALENDARIO,
     NUM(Week(DT_CALENDARIO))             AS NR_SEM_CALENDARIO,
     CEIL(NUM(Month(DT_CALENDARIO)) / 6)  AS NR_SEMESTRE_CALENDARIO,
     CEIL(NUM(Month(DT_CALENDARIO)) / 3)  AS NR_TRIMESTRE_CALENDARIO,
     CEIL(NUM(Month(DT_CALENDARIO)) / 4)  AS NR_QUATRIMESTRE_CALENDARIO,
     CEIL(NUM(Month(DT_CALENDARIO)) / 2)  AS NR_BIMESTRE_CALENDARIO    ;


LOAD Date(MakeDate(Year(Today(0)) - 2, 1, 1) + (RecNo() - 1)) AS DT_CALENDARIO
AutoGenerate(YearEnd(Today(0)) - YearStart(AddYears(Today(0), -2)) + 1);

STORE CALENDARIO into $(QVDPath)\CALENDARIO.qvd (qvd);
DROP Table CALENDARIO;

Na consulta então li esta tabela calendario, mas amarrei a data da minha tabela de pedidos, da seguinte maneira:

CALENDARIO:

LOAD DT_CALENDARIO AS CAL_DT_CALENDARIO ,
DT_CALENDARIO AS PROJECAO_DT_EMISSAO ,
DT_CALENDARIO AS PED_EXPORTACAO_DT_REFERENCIA,
DT_ANO_CALENDARIO AS CAL_DT_ANO_CALENDARIO ,
DT_MES_CALENDARIO AS CAL_DT_MES_CALENDARIO ,
DT_DIA_CALENDARIO AS CAL_DT_DIA_CALENDARIO ,
DT_MESANO_CALENDARIO AS CAL_DT_MESANO_CALENDARIO ,
DT_DIA_SEMANA_CALENDARIO AS CAL_DT_DIA_SEMANA_CALENDARIO ,
NR_ANO_CALENDARIO AS CAL_NR_ANO_CALENDARIO ,
NR_MES_CALENDARIO AS CAL_NR_MES_CALENDARIO ,
NR_DIA_CALENDARIO AS CAL_NR_DIA_CALENDARIO ,
NR_SEM_CALENDARIO AS CAL_NR_SEM_CALENDARIO ,
NR_SEMESTRE_CALENDARIO AS CAL_NR_SEMESTRE_CALENDARIO ,
NR_TRIMESTRE_CALENDARIO AS CAL_NR_TRIMESTRE_CALENDARIO ,
NR_QUATRIMESTRE_CALENDARIO AS CAL_NR_QUATRIMESTRE_CALENDARIO ,
NR_BIMESTRE_CALENDARIO AS CAL_NR_BIMESTRE_CALENDARIO
FROM C:\Qlikview\Producao\QVD\CALENDARIO.qvd (qvd);

Aí que eu acho que está o problema, mas não consigo imaginar uma maneira de amarrar de outra forma.
Creio que teria que fazer um script específico lendo as datas da tabela calendario e depois lendo a tabela de pedido e colocando os valores para cada mes/ano.

Terias alguma dica?


Desde já agradeço
Abs,

Juliana.

Anonymous
Not applicable
Author

Olá Juliana,

acredito que a mesma dica que o Cesar me deu em um outro post, possa resolver seu problema.

Utilize ilha de datas (deixe o calendario solto, sem ligação no script, e utilize o inmonth() para unir as datas na expressão ) , veja o exemplo que o Cesar anexou nesse post

http://community.qlik.com/message/200182#200182

Att

Rodrigo Silvestre

Not applicable
Author

Olá Rodrigo,
Estou verificando o exemplo que você me passou, mas fiquei em dúvida no seguinte:

Digamos que temos como exemplo a expressão :

sum(InMonth(AnoMês,Vencimento,0)*-1).

E o que eu preciso é o seguinte,

Somar : (PROJECAO_QT_PRODUTO * PROJECAO_PESO_LIQUIDO)/ 1000

quando a CAL_DT_CALENDARIO   = PROJECAO_DT_EMISSAO.
Isso levando em conta o mês ano somente.

Como eu faço a empressão usando o Inmonth? Estou tentando várias maneiras, mas até o momento não encontrei uma maneira.

Desde já agradeço a ajuda.

Abs, Juliana

cesaraccardi
Specialist
Specialist

Olá Juliana!

Neste exemplo que o Rodrigo comentou a fórmula sum(InMonth(AnoMês,Vencimento,0)*-1) foi usada para contabilizar os títulos onde a data de vencimento esteja no mesmo mês selecionado em AnoMês. No seu caso eu acredito que ficaria algo assim: sum((InMonth(CAL_DT_CALENDARIO,PROJECAO_DT_EMISSAO)*(PROJECAO_QT_PRODUTO * PROJECAO_PESO_LIQUIDO)/ 1000)*-1). Se não estiver retornando corretamente verifique se os formatos das datas são compatíveis, é recomendado que você teste a expressão InMonth(CAL_DT_CALENDARIO,PROJECAO_DT_EMISSAO) isoladamente em um objeto de texto para certificar-se que a função retorna 0 ou -1 (boolean).

Abraços.