Unlock a world of possibilities! Login now and discover the exclusive benefits awaiting you.
Bom dia! Tenho a seguinte situação:
Preciso mostrar em um gráfico de tabela simples, por código de contrato, a quantidade de "clientes" que o mesmo possui.
Mas, o mês base de cada contrato é diferente, que seria o seu mês de "aniversário" (mês da venda).
Algumas regras, para exemplo
a) o contrato 999 tem a data de aniversário em 08/2013:
b) o contrato 777 tem a data de aniversário em 02/2014.
Para o contrato 999:
Considerando que estamos em 04/2015, o mês base para a quantidade de clientes seria 08/2014.
Para o contrato 777:
Considerando que estamos em 04/2015, o mês base para a quantidade de clientes seria 02/2015.
Ou seja, se o Mês de aniversário do contrato for maior ou igual a 04/2015 (atual), o mesmo deve considerar o ano anterior, caso contrato, o ano atual.
Tentei fazer isso com a seguinte Set Analysis, mas, fica com todos os valores zerados.
=Sum({$<KEY.COMPETENCIA={'$(=MakeDate(Max(Year(KEY.COMPETENCIA))-If(Month(CRTANTE.VIGENCIA_CONTRATO)>=Month($(v_MaxCompetencia)),1,0),Month(CRTANTE.VIGENCIA_CONTRATO),01))'}>} RESULT.QTDE_USUARIOS)
Com a Set Analysis que mencionei, funciona apenas se eu selecionar "apenas" um contrato:
Alguém poderia ajudar?
Não Marcelo,
Da uma olhada, alterei o código do seu QVW.
Substitua o código atual pelo abaixo:
Temp:
LOAD
KEY.VIGENCIA
, CRTANTE.VIGENCIA_CONTRATO
, If(CRTANTE.VIGENCIA_CONTRATO >= MakeDate(Year(Today()),Month(Today()))
,MakeDate(Year(Today())-1,Month(Today()))
,MakeDate(Year(Today()),Month(Today()))
) AS Aniversario
;
LOAD
Text(CONTRATO_ID_CONTRATANTE) as KEY.VIGENCIA,
MakeDate(Right(CONTRATO_VIGENCIA_CONTRATO,4),Left(CONTRATO_VIGENCIA_CONTRATO,2)) as CRTANTE.VIGENCIA_CONTRATO // não utilizar Vigência de Contrato da Tabela de CONTRATANTES
FROM
$(v_QVDsFDPR)ExtratorQVD\CONTRATOS_097.qvd
(qvd)
Where IsNull(CONTRATO_DATA_EXCLUSAO_CONTRATO);
OBS: Não tentei o código, pois não tenho as fontes;
Bom dia Marcelo
Até onde entendi, creio que você não precise de Set Analysis, apenas um IF() resolve seu problema. Da uma olhada no código e no print abaixo:
= If([Aniversario] >= MakeDate(Year(Today()),Month(Today()))
,MakeDate(Year(Today())-1,Month(Today()))
,MakeDate(Year(Today()),Month(Today()))
)
Atenciosamente,
Tiago Ferrucio
Obrigado Tiago! Quase isso...
Essas data que foram encontradas, servirão como "mês base" da achar a quantidade de clientes.
Por exemplo: Para o 777, preciso mostrar a quantidade de clientes no mês encontrado, que foi 01/04/2015.
Já tenho uma tabela na nuvem com a quantidade de clientes calculada, por mês e contrato, o desafio, seria fazer a expressão cumprir estas regras, dentro de um "Sum(Calendario={mesEncontrado}>} QtdeClientes)".
Minha dúvida seria como fazer a Set Analysis ou uma expressão simples respeitar a data para cada contrato.
A expressão para procurar a data funciona, o problema é inseri-la dentro de outro cálculo.
Marcelo,
Tente inserir essa função para procurar a data numa variável e na expressão ficará:
sum({< calendario = {'$(Variavel)'} >} qtde)
Lembrando que o formato da data de saída da variável e do campo calendário tem que ser o mesmo.
Se possível poste seu qvw para podermos ajuda-lo melhor.
Att,
Veja:
Marcelo
Add essa coluna "mesEncontrado" na tabela de onde existe o código e a data. (Nível LOAD). E o Set Analysis vai ficar mais ou menos assim: Count({<[Calendario] = {'MesEncontrado'}>} QtdClientes);
Atenciosamente,
Tiago Ferrucio
Você diz adicionar um "calendario" na tabela onde está o aniversário? Por Join?
OBS: É importante que o gráfico fique dinâmico, ou seja, aberto a seleções do usuário.
Não Marcelo,
Da uma olhada, alterei o código do seu QVW.
Substitua o código atual pelo abaixo:
Temp:
LOAD
KEY.VIGENCIA
, CRTANTE.VIGENCIA_CONTRATO
, If(CRTANTE.VIGENCIA_CONTRATO >= MakeDate(Year(Today()),Month(Today()))
,MakeDate(Year(Today())-1,Month(Today()))
,MakeDate(Year(Today()),Month(Today()))
) AS Aniversario
;
LOAD
Text(CONTRATO_ID_CONTRATANTE) as KEY.VIGENCIA,
MakeDate(Right(CONTRATO_VIGENCIA_CONTRATO,4),Left(CONTRATO_VIGENCIA_CONTRATO,2)) as CRTANTE.VIGENCIA_CONTRATO // não utilizar Vigência de Contrato da Tabela de CONTRATANTES
FROM
$(v_QVDsFDPR)ExtratorQVD\CONTRATOS_097.qvd
(qvd)
Where IsNull(CONTRATO_DATA_EXCLUSAO_CONTRATO);
OBS: Não tentei o código, pois não tenho as fontes;