Descobrindo o LOOKUPVALUE no DAX: Seu “PROCV” no Power BI
- #Power BI
A função LOOKUPVALUE é frequentemente utilizada por novos desenvolvedores, especialmente aqueles que, como eu, possuem algum tempo de experiência no Excel.
A função LOOKUPVALUE é utilizada para buscar valores entre tabelas que tenham uma chave em comum, sem necessidade da existência de relacionamento entre essas tabelas, o que torna “confortável” seu uso por iniciantes que ainda não dominem o conceito de relacionamentos no Power BI.
Conhecendo a Sintaxe:
Analisando a sintaxe da função, (disponível na documentação oficial) percebemos a simplicidade, sendo necessários apenas 3 parâmetros obrigatórios:
LOOKUPVALUE (
<result_columnName>,
<search_columnName>,
<search_value>
[, <search2_columnName>, <search2_value>]… //Opcional
[, <alternateResult>] //Opcional
)
Supondo que temos as tabelas tab1 e tab2, e desejamos trazer valores de tab2 para a tab1 devemos considerar nos parâmetros da função:
- result_columnName é o nome da coluna de tab2 onde estão os valores que se deseja obter
- search_columnName é o nome da coluna de tab2 onde será realizada a busca
- search_value é o valor que será procurado em tab2 (search_columnName), no caso, uma coluna de tab1.
Exemplo de Uso I:
Vamos considerar um modelo sem relacionamentos com as tabelas fVendas e dProduto:
fVendas
dProduto
Primeiramente, vamos calcular uma coluna de Receita na tabela fVendas, multiplicando a Quantidade pelo ValorUnitario da tabela dProduto, utilizando a função LOOKUPVALUE para buscar o ValorUnitario. Vamos inserir na tabela fVendas uma coluna com a fórmula abaixo:
Receita =
fVendas[Quantidade] *
LOOKUPVALUE(
dProduto[ValorUnitario],
dProduto[ID_Produto],
fVendas[ID_Produto]
)
Agora iremos utilizar a função LOOKUPVALUE para trazer o nome do produto, a fim de exibir o cálculo do total de receita por produto. Para tanto, vamos inserir mais uma coluna na tabela fVendas com a fórmula abaixo:
Nome Produto =
LOOKUPVALUE(
dProduto[NomeProduto],
dProduto[ID_Produto],
fVendas[ID_Produto]
)
Na exibição de relatório do Power BI podemos inserir um visual de tabela e obter o total por produto a partir das colunas da tabela fVendas:
Exemplo de Uso II:
Neste exemplo vamos inserir os parâmetros opcionais da função LOOKUPVALUE. Acrescentamos à tabela fVendas construída no exemplo anterior, o nome e sobrenome do cliente:
Acrescentamos também tabela dClientes, abaixo. Não há um ID do cliente ou uma coluna única que possibilite relacionar as duas tabelas.
Suponhamos que a empresa deseje oferecer desconto sobre a Receita nas vendas para clientes a partir de determinada idade. Para tanto iremos trazer a idade da tabela dClientes para a fVendas. Começaremos buscando a idade pelo nome do cliente usando a fórmula abaixo:
LOOKUPVALUE(
dClientes[Idade],
dClientes[Nome],
fVendas[NomeCliente]
)
O resultado dessa expressão retorna o erro “Uma tabela de vários valores foi fornecida, sendo que um único valor era esperado.” Isso ocorre pela existência de duplicatas na coluna Nome da tabela dClientes.
Neste momento podemos pensar em 2 cenários: um primeiro cenário onde não temos como gerar uma chave composta (nome + sobrenome) e um segundo cenário em que é possível criar essa chave composta.
Considerando o primeiro cenário, iremos utilizar o parâmetro alternateResult. Através deste parâmetro fornecemos um resultado alternativo aos erros, sinalizando por exemplo que devemos verificar o cadastro deste cliente. Para tanto, é necessário apenas acrescentar uma string como último parâmetro:
IdadeCliente =
LOOKUPVALUE(
dClientes[Idade],
Clientes[Nome],
fVendas[NomeCliente],
"Atualizar Cadastro"
)
Considerando o segundo cenário, faremos a pesquisa por nome e sobrenome acrescentando os parâmetros search2_columnName e search2_value (lembrando que outras colunas ainda poderiam ser adicionadas caso fosse necessário):
IdadeCliente =
LOOKUPVALUE(
dClientes[Idade],
dClientes[Nome],
fVendas[NomeCliente],
dClientes[Sobrenome],
fVendas[SobrenomeCliente]
)
Podemos notar que alguns clientes estão com a idade em branco. Esses clientes não foram encontrados na tabela dClientes, sendo opcional acrescentar um parâmetro com o resultado alternativo ao final da função sinalizando a necessidade de verificar o cadastro desses clientes.
Não efetuarei o cálculo do desconto para determinada faixa etária, pois não é o objetivo deste artigo, mas bastaria incluir uma condicional no cálculo da coluna Receita.
Considerações:
Antes de finalizar, gostaria de resumir algumas considerações quanto ao uso da função LOOKUPVALUE descritas acima:
- Chave Única: Como vimos, a função LOOKUPVALUE espera que o conjunto de critérios de pesquisa resulte em um único valor na tabela de pesquisa. Se houver várias correspondências, a função retornará um erro.
- Desempenho: Embora a função LOOKUPVALUE seja útil, seu uso excessivo em grandes conjuntos de dados pode impactar o desempenho. Avalie a possibilidade de usar relacionamentos de tabelas ou outras técnicas de otimização quando necessário.
- Valores Nulos: Se os critérios de pesquisa não encontrarem nenhuma correspondência, a função retornará um valor em branco, embora possamos sinalizar essa ausência de valor, seja com uma string ou number.
Em resumo, a função LOOKUPVALUE no Power BI é uma ferramenta interessante para realizar buscas de dados em tabelas que não podem ser relacionadas no modelo ou para compor outras medidas mais complexas, possibilitando reunir diversos critérios de busca.
Links:
Capa: https://datascientest.com/es/wp-content/uploads/sites/7/2020/10/power-bi-logo-1-1024x440.jpg
Documentação oficial: https://learn.microsoft.com/pt-br/dax/lookupvalue-function-dax