Unlock a world of possibilities! Login now and discover the exclusive benefits awaiting you.
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.
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?
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 ,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.
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
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
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.