Unlock a world of possibilities! Login now and discover the exclusive benefits awaiting you.
Boa tarde;
Estou iniciando a construção de um Dashboard, e nessa não terei seleção alguma, todos os filtros deverão ser feito via setanalysis.
Tenho um determinado gráfico, que ira comparar as vendas do mês atual com o mês anterior.
Suponhamos que hoje é dia 10/08/2014.
Vendas Mes_Atual - com a expressão ele ira somar de 01/08/2014 a 10/08/2014:
SUM( {<ANO=Year(Today()), MES=Month(Today())>} VENDA_LIQUIDA)
Vendas Mes_Anterior - com a expressão ele ira somar de 01/07/2014 a 31/07/2014:
SUM( {<ANO=Year(Today())-1, MES=Month(Today())-1>} VENDA_LIQUIDA)
Como o Mes_Atual nunca estará "completo", preciso corrigir a expressão Mes_Anterior, para que some apenas o período correspondente, assim terei a comparação correta.
Qual seria a maneira mais simples de fazer isso ?
Bom dia!
Eu tentei exemplificar ao máximo como proceder para achar as datas máximas e mínimas de um período. Abra a aplicação, veja o objeto de texto, faça seleções e vá dando uma olhada para ver se é isso que você precisa. Depois é somente adaptar a sua necessidade real.
Abraço!
Olá Cleber,
Vamos tentar novamente.
Primeiro Crie um campo Flag em seu calendário.
Faça assim:
If(DATA<='$(vHoje)',1,0) AS FlgRealizado
E a variável vHoje é a data de referência
SET vHoje = Today();
Crie as seguintes variáveis através do Menu Configurações > Visão Geral das Variáveis:
vInicioYTDAtual: =YearStart(Max({<FlgRealizado={1}>} DATA)) //Inicio do Maior Ano
vFimYTDAtual: =Max({<FlgRealizado={1}>} DATA) //Hoje
vInicioYTDAnterior: =YearStart(AddYears(Max({<FlgRealizado={1}>} DATA),-1))//Inicio do Ano Anterior
vFimYTDAnterior: =AddYears(Max({<FlgRealizado={1}>} DATA),-1)//Mesma data de Hoje, mas no ano Anterior
vInicioMTDAtual: =MonthStart(Max({<FlgRealizado={1}>} DATA)) //Inicio do Mês Atual
vFimMTDAtual: =Max({<FlgRealizado={1}>} DATA) //Hoje
vInicioMTDAnterior: =MonthStart(AddYears(Max({<FlgRealizado={1}>} DATA),-1))//Inicio do mesmo mês no ano Anterior
vFimMTDAnterior: =AddYears(Max({<FlgRealizado={1}>} DATA),-1)//Mesma data de Hoje, mas no ano Anterior
Você pode fazer assim:
YTD Ano Atual - correspondente de 01/01/2014 a 01/09/2014
Sum({<DATA={">=$(vInicioYTDAtual)<=$(vFimYTDAtual)"}, MES=, ANO=>} VENDA_LIQUIDA)
YTD Ano Anteior - correspondente de 01/01/2013 a 01/09/2013
Sum({<DATA={">=$(vInicioYTDAnterior)<=$(vFimYTDAnterior)"}, MES=, ANO=>} VENDA_LIQUIDA)
MTD Ano Atual - correspondente de 01/09/2014 a 01/09/2014
Sum({<DATA={">=$(vInicioMTDAtual)<=$(vFimMTDAtual)"}, MES=, ANO=>} VENDA_LIQUIDA)
MTD Ano Anteior - correspondente de 01/09/2013 a 01/09/2013
Sum({<DATA={">=$(vInicioMTDAnterior)<=$(vFimMTDAnterior)"}, MES=, ANO=>} VENDA_LIQUIDA)
Qlikfique-se.
Tonial.
Boa tarde!
E ai amigo, conseguiu resolver? Oque a comunidade te enviou ajudou?
Abraço!
Bom dia Srs;
Desculpa a falta de agilidade, infelizmente não trabalho somente com o Qlik, tenho toda a estrutura de TI pra cuidar.
Bem, vamos lá...estou em dúvida em qual solução adotar, gostei desse exemplo de calendário que me passou, bem mais Clean do que o meu, que foi criado pela consultoria que desenvolveu a primeira aplicação aqui, tenho usado ele nas outras aplicações por estar na mesma nuvem de dados.
A solução do Tonial é bem legal também, será que o mais correto seria tentar substituir o meu calendário ajustando o nome dos campos com o que já tenho hoje para não perder as referências, ou aplicar a solução das variáveis, pro meu caso que não tenho muita experiência ?
obrigado pela ajuda
Bom dia!
Bom, se você conseguiu o resultado esperado com os dois modelos que lhe foi passado, acho que vale mais aquele que lhe de menos trabalho, mas claro, também pensando a médio e longo prazo, vale analisar um possível retrabalho caso a escolha não tenha sido a correta. No meu caso, eu sempre opto por aquilo que não me dará retrabalho ou que eu não precise ficar escrevendo tudo sempre de novo, também prefiro a ideia de um script mais "complexo" talvez, para que me atenda o mais próximo possível sem precisar de muitos set analysis e muitas variáveis no layout.
Porem eu não tenho o seu cenário como um todo, talvez valha a pena pedir a opinião do Fernando Tonial, ele tem uma grande experiência.
Em fim que bom que pudemos ajudar você. Qualquer que seja a sua alternativa adotada, não deixe de marcar a resposta correta para que outros que passem pelo mesmo problema, possam utilizar-se da mesma solução.
Estou a disposição, abraço!
Junior;
Meu calendário está lá no começo dos posts, você tinha pedido anteriormente. Como te falei, ele é bem mais longo que o seu, usa variáveis, fica mais confuso, o seu esta bem clean e gostaria de utiliza-lo.
Comentei o meu Calendario todo na minha aplicação e estou tentando ajustar o seu calendário com os meus nomes de campos utilizados na aplicação. Só não estou entendendo algumas coisas, tipo....o campo DATA.
Você usa ele logo no início em:
LOAD Date(num(trim(DATE#(DATA, 'DD/MM/YYYY')))) as CAL_DATA,
porém ele só é criado no LOAD que esta lá embaixo:
LOAD Date(Date#('31/12/' & Year(Today()), 'DD/MM/YYYY')) - RecNo() as DATA
Então, vamos lá!
Esse meu calendário é gerado sempre do primeiro dia do ano de 3 anos atrás até o ultimo dia do ano atual.
Ele não é gerado a partir de uma data de alguma carga sua, como por exemplo carga de Faturamento, que poderia-se usar a data da Nota Fiscal como base para a geração desse calendário.
Para vincular o calendário a sua data, basta fazer o seguinte:
CAL_CALENDARIO:
LOAD *
WHERE CAL_DATA <= TODAY();
LOAD Date(num(trim(DATE#(DATA, 'DD/MM/YYYY')))) as CAL_DATA,
Day(DATA) as CAL_DIA,
Month(DATA) as CAL_MÊS,
Year(DATA) as CAL_ANO,
DayNumberOfQuarter(DATA) as CAL_DIA_TRIMESTRE,
DayNumberOfYear(DATA) as CAL_DIA_ANO,
MonthName(DATA) as CAL_MÊS_ANO,
QuarterName(DATA) as CAL_QUARTER,
Week(DATA) as CAL_SEMANA,
ceil(Month(DATA)/3)&'º Trim' as CAL_TRIMESTRE,
WeekDay(DATA) as CAL_DIA_SEMANA;
LOAD Date(Date#('31/12/' & Year(Today()), 'DD/MM/YYYY')) - RecNo() as DATA
AUTOGENERATE Date(Date#('31/12/' & Year(Today()), 'DD/MM/YYYY')) - Date(Date#('01/01/' & Text(Year(Today())-3), 'DD/MM/YYYY'));
Crie um novo campo data com o nome referente a qual campo você quer ligar, exemplo se você tiver uma tabela "Nota_Fiscal" com o campo "NF_DAT_EMISSÃO" então o calendário ficaria assim:
CAL_CALENDARIO:
LOAD *
WHERE CAL_DATA <= TODAY();
LOAD Date(num(trim(DATE#(DATA, 'DD/MM/YYYY')))) as NF_DAT_EMISSÃO, //chave de ligação com o campo data de emissão de nota
Date(num(trim(DATE#(DATA, 'DD/MM/YYYY')))) as CAL_DATA,
Day(DATA) as CAL_DIA,
Month(DATA) as CAL_MÊS,
Year(DATA) as CAL_ANO,
DayNumberOfQuarter(DATA) as CAL_DIA_TRIMESTRE,
DayNumberOfYear(DATA) as CAL_DIA_ANO,
MonthName(DATA) as CAL_MÊS_ANO,
QuarterName(DATA) as CAL_QUARTER,
Week(DATA) as CAL_SEMANA,
ceil(Month(DATA)/3)&'º Trim' as CAL_TRIMESTRE,
WeekDay(DATA) as CAL_DIA_SEMANA;
LOAD Date(Date#('31/12/' & Year(Today()), 'DD/MM/YYYY')) - RecNo() as DATA
AUTOGENERATE Date(Date#('31/12/' & Year(Today()), 'DD/MM/YYYY')) - Date(Date#('01/01/' & Text(Year(Today())-3), 'DD/MM/YYYY'));
Caso eu não tenha conseguido ser claro, podes me enviar eu calendário com o nome dos campos que devem ser ligados que eu faço um exemplo pra você.
Abraço!
Consegui aqui, ficou assim:
CALENDARIO:
LOAD *
WHERE DATA <= TODAY();
LOAD Date(num(trim(DATE#(DATA_TEMP, 'DD/MM/YYYY')))) as DATA,
Day(DATA_TEMP) as DIA,
Month(DATA_TEMP) as MES,
Year(DATA_TEMP) as ANO,
DayNumberOfQuarter(DATA_TEMP) as DIA_TRIMESTRE,
DayNumberOfYear(DATA_TEMP) as DIA_ANO,
MonthName(DATA_TEMP) as MESANO,
QuarterName(DATA_TEMP) as QUARTER,
Week(DATA_TEMP) as SEMANA,
ceil(Month(DATA_TEMP)/3)&'º Trim' as TRIMESTRE,
WeekDay(DATA_TEMP) as DIA_SEMANA,
WeekName(DATA_TEMP) as SEMANA_ANO;
LOAD Date(Date#('31/12/' & Year(Today()), 'DD/MM/YYYY')) - RecNo() as DATA_TEMP
AUTOGENERATE Date(Date#('31/12/' & Year(Today()), 'DD/MM/YYYY')) - Date(Date#('01/01/' & Text(Year(Today())-3), 'DD/MM/YYYY'));
Conferi aba a aba, planilha a planilha com a anterior, fiz alguns ajustes e esta ok !
Agora vou partir pros finalmente, o problema original do post...ja te falo.
vlw !
Muito agradecido pela ajuda senhores, consegui fazer o que precisava e de quebra estou com um calendário menos confuso.
Maravilha!
Abraço!