Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

[Dúvida] DAX para id's repetidos

Tenho encontrado um desafio para resolver o seguinte caso: tem uma tabela de empregados com as colunas: ID, Cargo, Data_Cargo. Sempre que o funcionário muda de cargo surge um novo registro com o mesmo ID, cargo novo e a data da mudança. Para pegar o cargo atual tenho que olhar os registros de mesmo ID e puxar o cargo que tiver a data mais recente. Não tenho conseguido resolver a questão. Alguém pode me dar uma luz?

2 respostas
solução!

Olá, Éder! Entendo seu desafio, e acredito que posso lhe dar uma direção.

CargoAtual =
MAXX(
    FILTER(
        TabelaEmpregados,
        [Data_Cargo] =
            MAXX(
                FILTER(
                    TabelaEmpregados,
                    [ID] = EARLIER(TabelaEmpregados[ID])
                ),
                [Data_Cargo]
            )
    ),
    [Cargo]
)

Vou explicar cada parte do código em detalhes:

  1. MAXX: Esta é uma função que retorna o valor máximo de uma expressão calculada em um contexto especificado. Neste caso, a função MAXX será usada para encontrar o valor máximo da expressão que é definida dentro dela.

  2. FILTER: A função FILTER é usada para filtrar uma tabela com base em uma condição especificada. Neste caso, ela é usada duas vezes.

    • A primeira ocorrência de FILTER está filtrando a tabela TabelaEmpregados com a condição [Data_Cargo] = MAXX(...). Isso significa que ele está filtrando os registros na tabela TabelaEmpregados onde a data do cargo é igual ao resultado da expressão dentro do MAXX.

    • A segunda ocorrência de FILTER está dentro do primeiro FILTER. Ele está filtrando a tabela TabelaEmpregados novamente, mas desta vez com a condição [ID] = EARLIER(TabelaEmpregados[ID]). Aqui, EARLIER é uma função que permite fazer referência ao valor anterior do contexto. Portanto, estamos filtrando os registros onde o ID é igual ao ID do registro atual.

  3. [Data_Cargo]: Este é um campo na tabela TabelaEmpregados que representa a data em que um empregado assumiu um cargo.

  4. [Cargo]: Este é um campo na tabela TabelaEmpregados que representa o cargo de um empregado.

Em resumo, o código está calculando o cargo atual de cada empregado da tabela TabelaEmpregados da seguinte maneira:

  • Ele filtra os registros da tabela para cada empregado, considerando apenas os registros com o mesmo ID do empregado atual.
  • Em seguida, ele encontra a data mais recente em que o empregado assumiu um cargo usando MAXX.
  • Finalmente, ele retorna o valor do campo [Cargo] para o registro com a data mais recente, que é essencialmente o cargo atual do empregado.

Espero ter ajudado e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!

Igor, muitíssimo obrigado. A solução funciona sim no PBI. Já no looker não funciona por não ter disponível funções como MAXX.

Minha solução foi mexer na tabela de origem dos dados (Google Drive) com ajuda de um código em javascript.

function calcularStatusAtual() {
  var planilha = SpreadsheetApp.getActiveSpreadsheet();
  var aba = planilha.getSheetByName("Página1"); 
  var dados = aba.getDataRange().getValues();
  var statusAtual = [];

  // Percorre os dados da planilha
  for (var i = 1; i < dados.length; i++) { // Começa a partir da segunda linha (assumindo cabeçalho na primeira linha)
    var id = dados[i][1];
    var dataMudanca = dados[i][3];
    var status = dados[i][2];

if (!statusAtual[id] || dataMudanca > statusAtual[id].dataMudanca) {
  statusAtual[id] = {
    dataMudanca: dataMudanca,
    status: status
  };
}
}

  // Escreve o status atual na coluna "Status Atual" 
  for (var i = 1; i < dados.length; i++) {
    var id = dados[i][1];
    var status = statusAtual[id].status;
    aba.getRange("E" + (i + 1)).setValue(status);
  }
}

Mais uma vez, muito obrigado Igor.