Skip to main content
Announcements
Have questions about Qlik Connect? Join us live on April 10th, at 11 AM ET: SIGN UP NOW
cancel
Showing results for 
Search instead for 
Did you mean: 
fonmarcelo
Contributor III
Contributor III

Ajuda com Set Analysis - Apresentar Qtde de Clientes com base em data diferentes para cada contrato

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)


Sem título.png


Com a Set Analysis que mencionei, funciona apenas se eu selecionar "apenas" um contrato:


Sem título.png


Alguém poderia ajudar?

Labels (3)
1 Solution

Accepted Solutions
Anonymous
Not applicable

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;

View solution in original post

8 Replies
Anonymous
Not applicable

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()))

  )

ExQlik.png

Atenciosamente,

Tiago Ferrucio

fonmarcelo
Contributor III
Contributor III
Author

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.

fonmarcelo
Contributor III
Contributor III
Author

A expressão para procurar a data funciona, o problema é inseri-la dentro de outro cálculo.

Sem título.png

thiago_mlg
Creator II
Creator II

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,

fonmarcelo
Contributor III
Contributor III
Author

Veja:

Anonymous
Not applicable

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

fonmarcelo
Contributor III
Contributor III
Author

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.

Anonymous
Not applicable

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;