Unlock a world of possibilities! Login now and discover the exclusive benefits awaiting you.
Boa noite,
Observem a tabela a seguir:
1 - Coluna = NF
2 - Coluna = DATA_OCORRE (Data de Ocorrencia)
3 - Coluna = DATA_ENTREGA_TRANSP (Data de entrega na transportadora)
4 - Coluna = MOTIVO
5 - Coluna = PEDIDO NO PRAZO OTD (campo criado no script)
-------------------------------------------------- -------------------------------------------------- ---------------------------------------
Condição atual:
Se a data da Coluna 2 (DATA_OCORRE) for inferior a data da Coluna 3 (DATA_ENTREGA_TRANSP),
então PEDIDO NO PRAZO OTD = S, caso contrário PEDIDO NO PRAZO OTD = N.
Até aí tudo bem. A visão por linhas está OK.
Condição que preciso:
Considere o exemplo acima da NF 624126.
Eu preciso obter a MENOR data da Coluna 2 (DATA_OCORRE) e comparar com a coluna 3 (DATA_ENTREGA_TRANSP).
Se for menor e atender a condição do PEDIDO NO PRAZO OTD (ex:. S), o campo de PEDIDO NO PRAZO OTD deverá mostrar o mesmo status (S ou N) para todos os demais registros dessa mesma NF.
Por exemplo. Na imagem acima, todos os registros deveriam estar com STATUS 'S', pois a menor data (06/10/16) daquela NF já atendeu o critério, sendo assim a regra seria deixar S também para os demais registros dessa mesma NF.
Quem pode ajudar. Eu que agradeço
Segue um exemplo simples:
Mapping_MenorData:
Mapping LOAD DISTINCT
NF,
Date(MIN(DATA_OCORRE), 'DD/MM/YYYY') as MENOR_DATA_OCORRE
FROM [Pasta1.xlsx] (ooxml, embedded labels, table is Plan1)
GROUP BY
NF;
Tab:
LOAD
NF,
DATA_OCORRE,
DATA_ENTREGA_TRANSP,
MOTIVP,
ApplyMap('Mapping_MenorData', NF, Null()) as MENOR_DATA_OCORRE,
IF( ApplyMap('Mapping_MenorData', NF, Null()) <= DATA_ENTREGA_TRANSP, 'S', 'N') as PEDIDO_NO_PRAZO_OTD
FROM [Pasta1.xlsx] (ooxml, embedded labels, table is Plan1);
Rodrigo, creio que a pergunta chave seja: Você precisa do campo "PEDIDO NO PRAZO OTD" para outras métricas? Se sim, o ideal é você criar esse campo em seu script.
A dica é criar uma coluna, em sua tabela, que repita o menor valor da coluna "DATA_OCORRE" para todas as linhas da NF. Tendo essa coluna em sua tabela, basta fazer a comparação com essa nova coluna.
Caso tenha dúvidas de como criar essa coluna, envie um qvw de exemplo para eu demonstrar
Yuri,
Sim e sim. Eu já criei ele no script (com a condição simples, comparando apenas dimensões), mas não consegui pensar na condição lógica para atender a condição completa. E vou usar também em outras métricas sim.
Sobre criar a coluna eu não consigo pois não tem como criar uma expressão em uma tabela, não gráfico. Se eu usar gráfico de tabela simples digamos que o gráfico já dá um "distinct" e não repete a nota.
Preciso que me explique melhor sobre essa coluna, então anexei um qvw em branco. Pode ser?
Download
Obrigado por enquanto
Segue um exemplo simples:
Mapping_MenorData:
Mapping LOAD DISTINCT
NF,
Date(MIN(DATA_OCORRE), 'DD/MM/YYYY') as MENOR_DATA_OCORRE
FROM [Pasta1.xlsx] (ooxml, embedded labels, table is Plan1)
GROUP BY
NF;
Tab:
LOAD
NF,
DATA_OCORRE,
DATA_ENTREGA_TRANSP,
MOTIVP,
ApplyMap('Mapping_MenorData', NF, Null()) as MENOR_DATA_OCORRE,
IF( ApplyMap('Mapping_MenorData', NF, Null()) <= DATA_ENTREGA_TRANSP, 'S', 'N') as PEDIDO_NO_PRAZO_OTD
FROM [Pasta1.xlsx] (ooxml, embedded labels, table is Plan1);
Não consigo te enviar os arquivos, mas basicamente a planilha contém o seu exemplo:
NF | DATA_OCORRE | DATA_ENTREGA_TRANSP | MOTIVP |
1 | 06/10/2016 | 06/10/2016 | 2005 |
1 | 06/10/2016 | 06/10/2016 | 2005 |
1 | 11/10/2016 | 06/10/2016 | 2005 |
1 | 11/10/2016 | 06/10/2016 | 2005 |
1 | 13/10/2016 | 06/10/2016 | 2021 |
1 | 13/10/2016 | 06/10/2016 | 2021 |
2 | 01/10/2016 | 25/09/2016 | 2021 |
2 | 05/10/2016 | 25/09/2016 | 2021 |
2 | 10/10/2016 | 25/09/2016 | 2021 |
Rodrigo,
Não sei se entendi bem sua necessidade.
Mas estou anexando um QVW de exemplo.
Analise a expressão da TABELA COM EXPRESSÃO DEFINIDA e veja se é o que voce preccisa.
Espero ter ajudado.
Yuri,
Fiz aqui e deu certo, não pude responder antes pois estive ocupado. Agora pretendo aplicar essa solução para um outro problema do mesmo projeto, mas com um critério diferente.
A situação é similar a do post original, mas a condição deve atender mais um critério. Agora eu tenho que criar um novo CAMPO, de nome PEDIDO_ATENDIDO. Esse campo deve conter 4 estados:
PEDIDO_ATENDIDO
S = MOTIVO_OCORREN = 2021
N = MOTIVO_OCORREN = 2001
P = MOTIVO_OCORREN = 2003
A = MOTIVO_OCORREN <> DAS OPÇÕES ACIMA
Deve-se pegar a menor data da NF (DATA_OCORREN) comparar com da a DAT_ENTREGA_TRANS, e se for <= o campo PEDIDO_ATENDIDO deve retornar 'S'.
Porém, como existem vários registros para a mesma NF, deve ser considerado também um campo chamado MOTIVO_OCORREN. Se a primeira DATA (DATA_OCORREN) for menor que a DATA de entrega na transportadora (DAT_ENTREGA_TRANS) e o MOTIVO_OCORREN ='2021', portanto PEDIDO_ATENDIDO = 'S'.
Se MOTIVO_OCORREN = '2001' ,PEDIDO_ATENDIDO = 'N'
Se MOTIVO_OCORREN = '2003' ,PEDIDO_ATENDIDO = 'P'
Se MOTIVO_OCORREN <> 2001, 2021, 2003 ,PEDIDO_ATENDIDO = 'A'
(TODAS POSSIBILIDADES ACIMA CONSIDERANDO A MENOR DATA)
COLUNA 1 = NF
COLUNA 2 = DATA_OCORREN
COLUNA 3 = DAT_ENTREGA_TRANS
COLUNA 4 = MOTIVO_OCORREN
...
COLUNA 6 = PEDIDO ATENDIDO
Se há 1 registro dessa NF com STATUS 'S', todos demais registros dessa NF tem que estar 'S'. Então o campo PEDIDO_ATENDIDO deveria estar TODO COM 'S';
Obrigado