Expressões DAX de tabela

Concluído

Na maioria das vezes, no Power BI, cria tabelas ao importar dados para o seu modelo a partir de uma origem de dados externa. Em vez disso, com as funções de tabela, adiciona novas tabelas com base nos dados que já carregou no modelo.

Descrição Geral

As funções de tabela permitem que os utilizadores do Power BI criem uma tabela intermédia, que é vista no modelo de dados e pode ser utilizada noutras expressões DAX. As funções de tabela são tabelas temporárias que pode utilizar, mas não são visíveis porque não são exportadas.

FILTER, VALUES e ALL são algumas tabelas intermédias comuns frequentemente utilizadas nas medidas DAX.

Aplicar a função FILTER

A função FILTER define o filtro para uma tabela específica e, em seguida, utiliza uma versão condensada de uma tabela num cálculo. Por outras palavras, devolve uma tabela que representa um subconjunto de outra tabela ou expressão.

Por exemplo, digamos que tem a seguinte tabela de dados:

Tabela de dados que será referenciada no exemplo de função FILTER.

Na tabela anterior, tem algumas linhas que realçam as vendas de Seattle. O total de vendas de Seattle em 2018 é de 30,13 (20,46 + 9,67). Para obter este resultado com a função FILTER:

2018 Sales = SUMX(
  FILTER(
    Sales,
    YEAR( Sales[SalesDate] ) = 2018
  ),
  [Price]*[Quantity]
)

Dica

CORRELACIONAR COM TABLEAU: para criar o mesmo cálculo no Tableau, utilizaria a sintaxe SE/ENTÃO: 2018 Sales = IF YEAR([SalesDate]) = 2018 THEN SUM([Price]*[Quantity]) END

No fragmento de código anterior, obteve primeiro os dados para o contexto de filtro, que é a tabela de factos Vendas:

Pré-visualização de dados da tabela de factos Vendas.

Em seguida, filtrou os dados de Vendas para incluir apenas as vendas de 2018.

Pré-visualização de dados da tabela de factos Vendas a realçar as vendas de 2018.

Por fim, avaliou a expressão, mas apenas para os registos na tabela temporária.

Pré-visualização de dados da tabela de factos Vendas filtrada para mostrar as vendas de 2018.

Aplicar a função VALUES

VALUES devolve uma tabela de uma coluna que contém os valores distintos da tabela ou coluna especificada; os valores duplicados são removidos e só são devolvidos valores exclusivos.

Por exemplo, acabaste de receber uma tarefa em que precisas de mostrar que jogador numa equipa desportiva tem o último saldo fino pendente que precisa de ser pago.

Segue-se a tabela de dados (denominada Detalhes Detalhados da Equipa) que irá utilizar:

Tabela de dados que será referenciada no exemplo da função VALORES.

O que terá de fazer é testar se só resta um jogador para pagar a multa. Se for o caso, mostre o nome. Caso contrário, apresente a mensagem "mais do que um leitor".

Pode fazê-lo com a função VALUES:

LastPlayer = IF(
  COUNTROWS( VALUES( 'Team Fine Details'[SportsTeam] ) ) = 1,
  VALUES( 'Team Fine Details'[PlayerName] ),
  "More than one player"
)

Dica

CORRELACIONAR COM TABLEAU: é assim que faria o mesmo cálculo em Tableau: LastPlayer = IF COUNTD([SportsTeam]) = 1 THEN [PlayerName] ELSE "More than one player" END

Esta medida teria um aspeto semelhante ao relatório/visualização abaixo:

Relatório de exemplo com o cálculo LastPlayer incluído.

Aplicar a função ALL

A função ALL indica ao Power BI para olhar para uma tabela específica, tirar todos os valores da mesma (não filtrar a tabela) e utilizar esse subconjunto de valores numa expressão.

Uma utilização comum para a função ALL é quando quer saber a percentagem do total de uma medida agregada.

Por exemplo, considere o cenário de quantidade fina da equipa desportiva. O seu chefe está satisfeito com as suas descobertas da tarefa anterior, mas quer saber qual a equipa que tem a maior percentagem de multas pendentes.

Relatório mais recente com o cálculo LastPlayer incluído.

O primeiro passo é criar uma medida para o total geral das multas pendentes:

TotalAllFineAmount = CALCULATE( [TotalFineAmount], ALL( 'Team Fine Details'[SportsTeam] ) )

Dica

CORRELACIONAR COM TABLEAU: é assim que faria o mesmo cálculo em Tableau com a expressão LOD FIXA. Está a agregar o total TotalFineAmount ao nível da tabela: TotalAllFineAmount = { FIXED : SUM([TotalFineAmount]) }

O segundo e último passo é criar a percentagem da medida total com a função DIVIDE:

FineAmountPercentOfTotal = DIVIDE( [TotalFineAmount], [TotalAllFineAmount] )

Dica

CORRELACIONAR COM TABLEAU: é assim que faria o mesmo cálculo em Tableau: FineAmountPercentOfTotal = SUM([TotalFineAmount]) / SUM([TotalAllFineAmount])