Unlock a world of possibilities! Login now and discover the exclusive benefits awaiting you.
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
Oi Marcio, infelizmente nao consigo abrir teu codigo. Se puder postar ele eu dou uma olhada pra ti.
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];
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
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
Eduardo,
tudo bem meu amigo.
Entendi o processo.
Assim:
No meu caso vou ter na tela um calendário aonde o cliente vai escolher a data, ou seja, acredito que precise criar uma variavel para pegar essa data e colocar dentro do if, pois vai mudar, conforme ele escolher ano, mes e dia, entao nao sei se seria dentro do script, acredito que tenho que colocar na expressão, o que você acha?
No caso:
'NOVO': comprou dentro dos 30 dias para trás da data escolhida mas não tem nenhum registro de compra no banco de dados, ou seja, foi a primeira compra dele.
'PROSPECT': nunca comprou, existe na tabela de clientes mas nunca comprou, não tem data de pedido faturada
Oi Marcio,
Nesse caso voce tem duas soluções, a primeira é fazer esse processo que eu te passei para todas as datas e na tela tu colocar um filtro com as datas pro cara escolher e outra é usar a solução do Francisco que utiliza Set Analisys, onde o filtro fica na propria tela.
Ok Eduardo, muito obrigado.
Vou testar as 2 maneiras para ver o que fica melhor e ai marco aqui as respostas.
Agradeço a tua ajuda.
Tranquilo, o importante é te ajudar.
O set analisys eu acho mais bacana do ponto de vista de construção, menos codigo. O problema é a manutenção dele, se voce não conhece ficam mais complicadas as alterações.