Na comunidade do Power BI (PBI) surgem várias questões sobre como se pode ter um eixo nos gráficos que seja dinâmico. Esta questão recorrente tem várias versões sendo a mais comum as pessoas quererem ter dois valores diferentes por exemplo Artigo ou Categoria.
Costumam surgir algumas variações desta questão tal como ter uma coluna com o valor outros quando se faz a seleção de um x n.º de artigos ou de códigos. Na passada semana surgiu uma questão deste género mas que pedia um ligeiro twist que era apresentar as vendas por artigo no entanto colocar nomes fictícios caso os artigos não fossem parte da seleção.
A informação era composta por duas tabelas simples:

O objetivo era que quando uma fruta fosse selecionada o seu valor aparecesse com o seu nome quando não fosse selecionada aparecia o seu alias, ou seja, se o utilizador tivesse feito um filtro por Apples e Pears o resultado seria um gráfico com um eixo que apresentava o valor: Apples, Pears, Fruit, Fruit 3 e Fruit4.
A dificuldade aqui era que as duas tabelas estavam relacionadas e segundo o pedido não se poderia remover essa ligação pois todos os restantes gráficos estavam dependentes da relação. De modo a obter esta alteração de texto no nome das frutas temos então que recorrer a uma terceira tabela, tabela essa que servirá de contexto às restantes formulas.
Criamos uma tabela com duas colunas uma com o nome das frutas e outra com os alias e outra com a categorização desses valores:
SELECTED_AXIS =
UNION (
ADDCOLUMNS ( DISTINCT ( Alias[Fruit] ); "Type"; "Fruit" );
ADDCOLUMNS ( DISTINCT ( Alias[Alias] ); "Type"; "Alias" )
)
Estes código gera a seguinte tabela:

De seguida criamos uma fórmula para o cálculo dos totais por fruta:
Total_Axis =
IF (
Total_Axis =
IF (
HASONEVALUE ( SELECTED_AXIS[Fruit] ); -- Validation Fruit Selection on the New Table
SWITCH (
TRUE ();
SELECTEDVALUE ( SELECTED_AXIS[Fruit] ) IN VALUES ( Alias[Fruit] ) -- Check if Fruit selected in slicer (main table) is equal to the fruit selected on new table
&& SELECTEDVALUE ( SELECTED_AXIS[Type] ) = "Fruit"; -- check type of fruit on new table
CALCULATE (
SUM ( 'Values'[Value] );
FILTER (
ALL ( Alias[Fruit] );
Alias[Fruit] = SELECTEDVALUE ( SELECTED_AXIS[Fruit] )
) -- if previous values are true then return the sum for the fruit value
);
NOT ( SELECTEDVALUE ( SELECTED_AXIS[Fruit] ) IN VALUES ( Alias[Alias] ) ) -- Check if alias is not selected in slicer (main table) is equal to the fruit selected on new table
&& SELECTEDVALUE ( SELECTED_AXIS[Type] ) = "Alias"; -- check type of fruit on new table
CALCULATE (
SUM ( 'Values'[Value] );
FILTER (
ALL ( Alias[Alias]; Alias[Fruit] );
Alias[Alias] = SELECTEDVALUE ( SELECTED_AXIS[Fruit] )
) -- if previous values are true then return the sum for the alias value
);
BLANK () -- if does not match returns blank
);
CALCULATE ( SUM ( 'Values'[Value] ); ALL ( 'Alias'[Fruit] ) )
)
Na fórmula acima verificamos se o valor da fruta da tabela SELECTED_AXIS se encontra ou na coluna das frutas ou na coluna dos alias, caso se encontre na das frutas devolve a soma dos valores caso se encontra na dos alias devolve a soma da fruta correspondente. No caso de escolhermos uma fruta que não foi selecionada ou um alias que já teve a sua respetiva fruta correspondente selecionada devolvemos valor em branco.
A última parte da fórmula é utilizada para devolver o total quando colocamos a informação numa tabela pois os totalizadores com a fórmula SWITCH devolveriam em branco pois o contexto tinha todas as frutas de todos os tipos.
Agora apenas temos de montar as visualizações:
Slicer: Fruit da tabela Alias

Gráficos: Eixo Coluna Fruit da tabela SELECTED_AXIS – Valores Medida Total_Axis

Podem verificar o resultado da alteração do valores com a seleção do slicer na imagem abaixo.

Temos assim um eixo dinâmico que poderemos alterar ou ajustar de acordo com as nossas necessidades.