Ir para conteúdo
  • 0

Como comparar dados entre tabelas para descobrir quais dados faltam em uma delas


Michel Cerino
Ir para solução Solucionado por Joao Raulino ,

Pergunta

  • Alunos

Fala pessoal!

Espero que estejam todos bem!

Estou com um problema aqui, eu trabalho em uma empresa que presta serviço para os clientes, e toda semana os cliente precisam responder um formulário sobre o andamento do projeto, Esse formulário é preenchido tanto pela empresa quanto pelo cliente.

Existem 3 situações que ocorrem, o formulário foi respondido tanto pelo cliente quanto pela empresa; o formulário foi respondido apenas pela empresa; e o formulário não foi respondido por nenhum dos dois.

Diante desse caso, eu preciso identificar quais clientes deixaram de responder, e quais foram respondidos pela empresa mas não pelo cliente.

Além disso, precisava relacionar as tabelas com uma tabela dimensão calendário (dCalendario) para realizar filtros de forma que, se o cliente já saiu (data de saída) ele não deve mais ser considerado, da mesma forma que, se um cliente ainda não entrou no período filtrado, também não deve ser considerado.

Eu gerei dois arquivos com dados fictícios (chat-gpt), sendo uma tabela de clientes com data de entrada e saída, e a outra tabela com dados das respostas, sendo o nome do cliente, a data que foi respondida e se foi respondido pela empresa ou cliente.
 

Vou anexar a base de dados aqui e um arquivo pbix com a tabela dCalendario.

Se puderem me ajudar com isso ficarei muito agradecido!

Uma ótima semana para todos!

base.pbix teste.xlsx

Link para o comentário
Compartilhar em outros sites

6 respostass a esta questão

Posts Recomendados

  • 0
  • Alunos
  • Solução

Fala @Michel Cerino!

Voce tem toda razao: nao tem como levar o "data da resposta" em conta porque essa informacao foi descartada la no Power Query no momento que foram criadas as colunas "RespondidoEmpresa" e "RespondidoCliente" conforme o pedido do primeiro post:

Citar

Diante desse caso, eu preciso identificar quais clientes deixaram de responder, e quais foram respondidos pela empresa mas não pelo cliente.

As duas medidas DAX resolvem este pedido aqui tambem do primeiro post:

Citar

Além disso, precisava relacionar as tabelas com uma tabela dimensão calendário (dCalendario) para realizar filtros de forma que, se o cliente já saiu (data de saída) ele não deve mais ser considerado, da mesma forma que, se um cliente ainda não entrou no período filtrado, também não deve ser considerado.

Ja para o terceiro pedido que veio no segundo post, precisamos voltar ao Power Query e recuperar as datas de resposta:

Citar

quando eu faço o filtro de data, eu preciso ver as respostas desse determinado período.

Isso pode ser feito adicionando esses passos na consulta [fRespostas]:

Citar

...
    #"Grouped Rows" = Table.Group(#"Filtered Rows", {"Nome do Cliente", "Tipo de Resposta"}, {{"Data de Resposta", each _, type table [Nome do Cliente=nullable text, Tipo de Resposta=nullable text, Data de Resposta=nullable date]}}),
    #"Pivoted Column" = Table.Pivot(#"Grouped Rows", List.Distinct(#"Grouped Rows"[#"Tipo de Resposta"]), "Tipo de Resposta", "Data de Resposta"),
    #"Expanded Cliente" = Table.ExpandTableColumn(#"Pivoted Column", "Cliente", {"Data de Resposta"}, {"Cliente"}),
    #"Expanded Empresa" = Table.ExpandTableColumn(#"Expanded Cliente", "Empresa", {"Data de Resposta"}, {"Empresa"})

Por fim, precisamos criar uma nova medida DAX para dizer se a resposta do cliente foi realizada dentro do periodo filtrado:

Citar
$ ClienteRespondeu =
VAR _DataMinima =  MIN(fRespostas[DataCliente])
VAR _DataMaxima =  MAX(fRespostas[DataCliente])
VAR _Logic =
    SWITCH(
        TRUE(),
        _DataMinima >= MIN(dCalendario[Date]) && _DataMinima <= MAX(dCalendario[Date]), 1,
        _DataMaxima >= MIN(dCalendario[Date]) && _DataMaxima <= MAX(dCalendario[Date]), 1,
        0
    )
RETURN
    _Logic

image.png.8bf1e0ab62e05803cd4b288be7abb00a.png

Agora sim deve estar mais proximo do que voce queria fazer 😉 

Abs!

base_Michel Cerino.pbix

Link para o comentário
Compartilhar em outros sites

  • 0
  • Alunos

Suave @Michel Cerino?

Ja tentou fazer uma mesclagem de colunas no Power Query?

https://support.microsoft.com/pt-br/office/colunas-de-mesclagem-consulta-do-power-80ec9e1e-1eb6-4048-b500-d5d42d9f0a8d

O resultado seria mais ou menos assim:

image.png.d2d06beeb38bc9d38d866f16d480471f.png

E para controlar os valores que são mostrados dependendo dos filtros selecionados você pode usar uma medida DAX no filtro do visual:

Citar
$ ClienteJaEntrou =
VAR _Logic =
    IF(
        MAX(dCalendario[Date]) >= MAX(fRespostas[Data de Entrada]),
        1,
        0
    )
RETURN
    _Logic
Citar
$ ClienteJaSaiu =
VAR _Logic =
    SWITCH(
        TRUE(),
        ISBLANK(MAX(fRespostas[Data de Saída])), 0,
        MAX(dCalendario[Date]) <= MAX(fRespostas[Data de Saída]), 0,
        1
    )
RETURN
    _Logic

O resultado é esse:

image.png.3b4c60f4d6c6e7c5a2d5e4899c0db8dd.png

Note que aqui as tabelas precisam estar desconectadas:

image.png.99067e8983daa389d23c11a03c559c49.png

Se essa resposta te ajudou, não esquece de marcar como melhor solução 😉

Abs!

 

base_Michel Cerino.pbix

  • Like 1
Link para o comentário
Compartilhar em outros sites

  • 0
  • Alunos

Fala @Joao Raulino, muito obrigado pela sua resposta!

Acredito que esteja bem próximo do que eu preciso, porém, quando eu faço o filtro de data, eu preciso ver as respostas desse determinado período.

Vamos supor que eu queira ver os formulários respondidos neste ano, de 01/01/2024 - 04/03/2024, eu precisaria mostrar quais clientes responderam nesse período, desconsiderando aqueles que já saíram e aqueles que ainda não entraram.

Porém, usando o pbix que você mandou, filtrando por essa data, eu tenho apenas um cliente image.png.5b3f48a0d79de8c7b32e9be15c61d731.png

 

Sendo que pela base de dados, eu tenho esses clientes que responderam nesse período
image.png.318bdaa1f15e552befc3cd993db90ce0.png

 

Link para o comentário
Compartilhar em outros sites

  • 0
  • Alunos

Boa @Michel Cerino!

A logica esta correta, repara que voce esta filtrando 2023 e nao 2024 no slicer:

image.png.60b0e804c0be8458ee181008db678041.png

Se voce quer que o Daniel e a Aline aparecam na lista igual na imagem acima, mesmo eles tendo saido durante o periodo, modifica a segunda medida para:

Citar
$ ClienteJaSaiu =
VAR _Logic =
    SWITCH(
        TRUE(),
        ISBLANK(MAX(fRespostas[Data de Saída])), 0,
        MIN(dCalendario[Date]) <= MAX(fRespostas[Data de Saída]), 0,
        1
    )
RETURN
    _Logic

Ve se da certo agora 😉

Abs!

Editado por Joao Raulino
Link para o comentário
Compartilhar em outros sites

  • 0
  • Alunos

@Joao Raulino putz, que vacilo cara! 🤦‍♂️

Peço desculpas pela falta de atenção, porém o erro persiste, note que no seu print, o qual filtrou corretamente o ano de 2024, mostra alguns clientes que não responderam nesse período mas estão marcando como respondido:
- Pedro Oliveira, Carlos Pereira, Juliana Fernandes, Fernanda Almeida, Camila Rodrigues.

Link para o comentário
Compartilhar em outros sites

Faça login para comentar

Você vai ser capaz de deixar um comentário após fazer o login



Entrar Agora
×
×
  • Criar Novo...