8 Replies Latest reply: Sep 29, 2017 8:51 AM by Eduardo DImperio RSS

    Expressão  subtração dias de uma data conforme data selecionada

    marcio teixeira

      Pessoal,

       

      Não estou conseguindo fazer na expressão do status do cliente um IF aplicando  umas regras de dias conforme data escolhida no filtro calendario.

       

      Conforme for a data escolhida preciso aplicar as seguintes regras:

       

       

      1) Data escolhida - 30 dias e pode ter comprado em outras datas inferiores = 'ATIVO' 


      ( exemplo: data escolhida: 28/09/2017: tem que verificar desde o dia 27/09/2017 ate 29/08/2017, se existir uma nota emitida   o status = 'ATIVO' , e assim segue para as demais regras abaixo


      2) - 30 dias e não pode nunca ter comprado = 'NOVO'

      3) > = 91 dias  = 'INATIVO'

      4) > = 31 and  < = 90 = 'PRÉ-INATIVO'

      5) >=  30 = 'REATIVADO'

      6) nunca comprou = 'PROSPECT'

      7) - 30 and > = 91 =  'REATIVADO'




      Agradeço a ajuda



        • Re: Expressão  subtração dias de uma data conforme data selecionada
          Eduardo DImperio

          Oi Marcio, infelizmente nao consigo abrir teu codigo. Se puder postar ele eu dou uma olhada pra ti.

            • Re: Expressão  subtração dias de uma data conforme data selecionada
              marcio teixeira

              Tudo bem Eduardo, muito obrigado meu amigo pela ajuda.

               

              segue script:

               

               

              [Status_Compra_clientes]:

              load

                 

                 

                  date(PED_DTFATU,'dd/MM/yyyy hh:mm:ss') as [Data Emissão Pedidos_SCC],

                  date(PED_DTFATU,'dd/MM/yyyy') as [Data Emissão Pedidos s/ Hora_SCC],

                  time(PED_DTFATU,'hh:mm:ss') as [Data Emissão Pedidos Hora_SCC],

                  CLI_CODIGO as CLI_CODIGO_SCC,

                CLI_NOMECL as CLI_NOMECL_SCC,

                MER_DESCRI as MER_DESCRI_SCC,

                SEG_DESCRI as SEG_DESCRI_SCC,

                VEN_CODIGO as VEN_CODIGO_SCC,

                VEN_NOME as VEN_NOME_SCC,

                CLI_ESTADO as CLI_ESTADO_SCC;

               

                SELECT  DISTINCT  PED_DTFATU,

                p.CLI_CODIGO,

                c.CLI_NOMECL,

                MER_DESCRI,

                SEG_DESCRI,

                c.VEN_CODIGO,

                v.VEN_NOME,

                c.CLI_ESTADO

               

               

              FROM CRM_PEDIDO  p

              inner join  CRM_CLIENTE c

              on c.CLI_CODIGO = p.CLI_CODIGO

              FULL OUTER  JOIN  CRM_MERCADO M

              on M.MER_CODIGO = c.MER_CODIGO

              FULL OUTER  JOIN CRM_SEGMENTO S

              on S.SEG_CODIGO = c.SEG_CODIGO

              FULL OUTER  JOIN CRM_VENDEDOR v

              on v.VEN_CODIGO = c.VEN_CODIGO

               

               

               

               

               

               

              where EXTRACT(YEAR FROM PED_DTFATU) > 2014

              and PST_STATUS in (2,4,0,1)

              and  ped_tipo = 'VENDA'

              and PED_DTFATU is not null;

               

               

               

              [Calendario_Status_Compra_clientes]:

              load distinct

              date([Data Emissão Pedidos_SCC],'dd/MM/yyyy hh:mm:ss') as [Data Emissão Pedidos_SCC],

                  date([Data Emissão Pedidos_SCC],'MM/yyyy') as [MesAno_SCC],

                  year([Data Emissão Pedidos_SCC]) as [Ano Pedidos_SCC],

              month([Data Emissão Pedidos_SCC]) as [Mês Pedidos_SCC],

              day([Data Emissão Pedidos_SCC]) as [Dia Pedidos_SCC]

              resident [Status_Compra_clientes] order by [Data Emissão Pedidos_SCC];

            • Re: Expressão  subtração dias de uma data conforme data selecionada
              Eduardo DImperio

              Bacana, entao pelo que eu entendi voce vai ter duas tabelas resultantes:

               

               

              [Status_Compra_clientes]:

              load

                

                

                  [Data Emissão Pedidos_SCC],

                  [Data Emissão Pedidos s/ Hora_SCC],

                  [Data Emissão Pedidos Hora_SCC],

                  CLI_CODIGO_SCC,

                 CLI_NOMECL_SCC,

                 MER_DESCRI_SCC,

                SEG_DESCRI_SCC,

                 VEN_CODIGO_SCC,

                VEN_NOME_SCC,

                 CLI_ESTADO_SCC;

               

              LEFT JOIN ([Status_Compra_clientes])

                

              [Calendario_Status_Compra_clientes]:

              load distinct

              [Data Emissão Pedidos_SCC],

                 [MesAno_SCC],

                [Ano Pedidos_SCC],

              [Mês Pedidos_SCC],

              [Dia Pedidos_SCC]

              [Data Emissão Pedidos_SCC];

               

               

              INTERVALO:

              LOAD

              *,

              INTERVAL(Today()- [Data Emissão Pedidos_SCC],'D') AS TEMPO_DA_COMPRA


              RESIDENT [Status_Compra_clientes]:

               

              FINAL:

              LOAD

              *,

              IF(TEMPO_DA_COMPRA<30,'ATIVO',

              IF(TEMPO_DA_COMPRA> = 91, 'INATIVO',

              IF(TEMPO_DA_COMPRA> = 31 and  TEMPO_DA_COMPRA< = 90 , 'PRÉ-INATIVO',

              IF(TEMPO_DA_COMPRA>=  30 ,'REATIVADO',

              )

              )

              )

              )

              RESIDENT INTERVALO

               

               

              Quanto ao estado Novo e Prospect, precisa validar junto se existe uma ultima data de compra com a atual.

               

              Veja se isso te atende

               

               


              • Re: Expressão  subtração dias de uma data conforme data selecionada
                FRANCISCO ROGERIO ALMEIDA DOS SANTOS

                Marcio,

                Tenta usar a combinação de IF com Set analisy, pode ser algo parecido com isso.

                 

                if(

                Sum({$<[Ano Pedidos_SCC]=, [Mês Pedidos_SCC]=,

                [Data Emissão Pedidos s/ Hora_SCC] =

                {">=$(=max([Data Emissão Pedidos s/ Hora_SCC])-30) <=$(=max([Data Emissão Pedidos s/ Hora_SCC]))"}>}' CAMPO VALOR')

                > 0,'ATIVO','INATIVO')

                 

                Pensei em fazer no script mais não sei se atenderia a sua demanda.

                 

                Aproveitando segue o calendário como faço, pode ser que ajude mais na frente, pois fazer calendário com a tabela FATO se não tiver FATO em algum dia ele não gera DATA.

                 

                DATA:

                LOAD

                DATE(today()+365-recno()+1) as DATA

                autogenerate((today()+1095)- '2005-01-01');

                 

                 

                Periodo:

                LOAD

                  YEAR(DATA)&MONTH(DATA)&Day(DATA) AS Chave_Periodo,

                  Year(DATA)&Month(DATA) as Ch_Ano_Mês,

                  YEAR(DATA) AS Ano,

                  MONTH(DATA)&'/'&YEAR(DATA) AS [Mês/Ano],

                  year(DATA)&'/'&num(MONTH(DATA),'00') as [Ano/Mês],

                  MONTH(DATA) AS Mês,

                  DAY(DATA) AS Dia,

                  WEEK(DATA)&'-'&YEAR(DATA) AS [Semana Ano],

                  WEEK(DATA) AS [Semana],

                  WEEKDAY(DATA) AS [Dia Semana],

                  'S'& CEIL(MONTH(DATA)/6) AS [Semestre],

                  'T'& CEIL(MONTH(DATA)/3) AS [Trimestre],

                  'B'& CEIL(MONTH(DATA)/2) AS [Bimestre],

                  date#(DATA, 'DD/MM/YYYY')  as Data

                RESIDENT DATA

                 

                 

                WHERE DATA >='2005-01-01'

                AND DATA <= DATE(Today(),'YYYY-MM-DD')

                 

                 

                DROP TABLE DATA;

                 

                 

                Espero ter ajudado