Qual a solução?

Na comunidade muitas vezes surgem questões, mas os utilizadores não especificam qual o tipo de resultado que pretendem. Esta indefinição faz com que dependendo da nossa abordagem ao problema possam surgir opções de cálculos em DAX ou Power Query? Medidas ou colunas?

Claro que a escolha da melhor opção é também ela muito ambígua e pode ser influenciada por diversos fatores, tipo de modelo, dimensão dos dados, entre outras.

No entanto penso que um dos fatores que mais influencia a opção final é o próprio utilizador questões como o grau de experiência, conhecimento da ferramenta, urgência na resolução da questão, podem muitas vezes sobrepor-se a questões de desempenho ou de melhores praticas.

Nesta publicação demonstro como uma simples pergunta me levou a dar duas opções de modo que o utilizador conseguisse optar pela que mais se adequasse às suas necessidades.

A informação era composta por duas tabelas:

Product Product Rate 
ABC1000
DEF2000
XYZ3000
Order Product Total 
100001ABC10
100002DEF11
100003XYZ12
100004ABC13
100005DEF14
100006XYZ15

A ideia era calcular a divisão do Total pelo Product Rate e multiplicar esse valor por 10.

Sendo que o resultado esperado seria o seguinte:

Order Product Total Rate (which is derived as
( total /Product rate) *10
Calculation 
100001ABC100.1(10/1000) * 10
100002DEF110.055(11/2000) * 10
100003XYZ120.04(12/3000) * 10
100004ABC130.13(13/1000) * 10
100005DEF140.07(14/2000) * 10
100006XYZ150.05(15/3000) * 10

Assim podemos neste caso podemos ter duas opções uma abordagem no Power Query ou uma abordagem DAX.

Power Query

Em Power Query teremos que criar uma nova coluna com a seguinte formula:

([Total]/

(let Product = [Product] in Table.SelectRows(Rates, each [Product] = Product)){0}[Product Rate])

 * 10

Na fórmula acima com a utilização do Table.SelectRows conseguimos obter uma tabela com as linhas que correspondem aos critérios de seleção, neste caso o Product, depois devolvemos o primeiro resultado da Product Rate dessa tabela assim conseguimos calcular o valor necessário.

MFelix_1-1637002044267.png

DAX (coluna calculada)

Tendo em atenção que a tabela das rates apenas tem um único valor por Product se criarmos uma relação entre as duas tabelas podemos então adicionar a seguinte coluna:

Rate = DIVIDE(Orders[Total ], RELATED(Rates[Product Rate ])) * 10

A utilização do RELATED devolve um valor singular que está relacionado com a linha atual, neste caso como as tabelas estão relacionadas por Product podemos devolver o valor do Product Rate.

Assim podemos ter duas opções que nos dão o resultado esperado, no entanto que numa quer noutra os conhecimentos do utilizador podem ser preponderantes na escolha da opção.

As questões de desempenho e modelação são importantes, no entanto, a decisão final vai sempre depender da nossa opinião sobre essas soluções e temos tendência a não implementar as que nos parecem, seja por que motivo for, mais complexas.

Deixe uma Resposta

Preencha os seus detalhes abaixo ou clique num ícone para iniciar sessão:

Logótipo da WordPress.com

Está a comentar usando a sua conta WordPress.com Terminar Sessão /  Alterar )

Facebook photo

Está a comentar usando a sua conta Facebook Terminar Sessão /  Alterar )

Connecting to %s

%d bloggers gostam disto: