Introdução a Dax
Com base no curso de vídeo DAX da SQLBI.
Esquema de relatório

Relatório

Teoria
A linguagem Dax
DAX é uma linguagem funcional, a execução flui com chamadas de função.
! A formatação de código é importante no DAX, pois facilita a depuração do código. Para formatar automaticamente o código DAX, pode -se usar o Daxformatter.
Colunas calculadas
- Colunas calculadas usando Dax.
- Sempre calculado para a linha atual.
Medidas
- Escrito usando Dax
- Não trabalhe fila por linha
- Em vez disso, use mesas e agregadores
- Não tem o conceito «atual da linha»
Convenções de nomeação
- As medidas não pertencem a uma tabela => Evite o nome da tabela em medidas de referência. Dessa forma, é mais fácil mudar para outra tabela e identificar como uma medida.
- Então:
- Colunas calculadas -> Tabela [coluna]
- Medidas -> [Medida]
Medidas versus colunas calculadas
- Use uma coluna quando:
- Precisando cortar ou filtrar o valor
- Use uma medida quando:
- Porcentagens de cálculo ou proporções
- Precisando de agregações complexas
- Espaço e uso da CPU:
- As colunas consomem memória
- As medidas consomem CPU
Funções de agregação
- Trabalhe apenas em colunas numéricas.
- Agregar apenas uma coluna.
As funções de agregação «x»
- Iteradores: Útil para agregar fórmulas
- Itera sobre a mesa e avaliar a expressão para cada linha
- Sempre receba dois parâmetros:
- Tabela para iterar
- Fórmula para avaliar para cada linha
- Exemplo:
SUMX (
Sales,
Sales[Price] * Sales[Quantity]
)
Usando variáveis
- Muito útil para evitar repetir as subexpressões em seu código.
- Exemplo:
Quantity =
VAR TotalQuantity = SUM ( Sales[Quantity] )
RETURN
IF (
TotalQuantity > 1000,
TotalQuantity * 0.95,
TotalQuantity * 1.25
)
Funções de data
DATE, DATEVALUE, DAY, EDATE,
EOMONTH, HOUR, MINUTE,
MONTH, NOW, SECOND, TIME,
TIMEVALUE, TODAY, WEEKDAY,
WEEKNUM, YEAR, YEARFRAC
Funções da tabela
- Funções básicas que funcionam em mesas completas e retornam uma tabela como resultado
FILTER
ALL
VALUES
DISTINCT
RELATEDTABLE
- Seu resultado é frequentemente usado em outras funções
- Eles podem ser combinados para formar expressões complexas
FILTRO
- Adiciona uma nova condição restringe o número de linhas de uma tabela
- Retorna uma tabela que pode ser iterada por uma função «x»
TODOS
- Retorna todas as fileiras de uma mesa enquanto ignora o contexto do filtro
- Retorna uma tabela que pode ser iterada por uma função «x»
- Também pode ser usado com uma única coluna
ALL ( Customers[CustomerName] ) o resultado é uma tabela com uma coluna
Distinto
- Retorna os valores distintos de uma coluna, apenas os visíveis no contexto atual
NumOfProducts =
COUNTROWS (
DISTINCT ( Product[ProductCode] )
)
RelatedTable
- Retorna uma tabela com todas as linhas relacionadas com a atual.
NumOfProducts = COUNTROWS ( RELATEDTABLE ( Product ) )
Contextos de avaliação
1. Contexto do filtro
- Definido por:
- Seleção de linha
- Seleção de colunas
- Filtros de relatório
- Seleção dos fatores de fatia
- Linhas fora do contexto do filtro não são consideradas para o cálculo
- Definido automaticamente por dinâmico, pode ser criado com funções específicas também
2. Contexto da linha
- Definido por:
- Definição de coluna calculada
- Definido automaticamente para cada linha
- Funções de iteração de linha
- Sumx, média
- Todas as funções e iteradores «x»
- Definido pelas fórmulas do usuário
- Necessário para avaliar os valores da coluna, é o conceito de "linha atual"
! O contexto do filtro filtra tabelas. O contexto da linha itera linhas!
CALCULAR
- Substitui parcialmente o contexto do filtro
- Condições
- Pode substituir uma tabela inteira
- Pode substituir uma única coluna
- Calcular trabalhos no contexto do filtro
- Os filtros são avaliados no contexto do filtro externo e depois combinados e finalmente usados para criar um novo contexto de filtro no qual o DAX avalia a expressão.
- Synthax:
CALCULATE (
Expression,
Filter1,
…
Filtern
)
1. Filtro e soma estão na mesma tabela. Você pode obter o mesmo resultado usando o filtro.
NumOfBigSales =
CALCULATE (
SUM ( Sales[SalesAmount] ),
Sales[SalesAmount] > 100
)
2. Filtro esclarecido apenas em uma coluna. Todos usados com uma única tabela de coluna.
CALCULATE (
SUMX (
Orders,
Orders[Amount]
),
ALL ( Orders[Channel] )
)
Filtros e relacionamentos
-Relatórios afetam o contexto do filtro
RELACIONADO
RELATED ( table[column] )
- Abre um novo contexto de linha na tabela de destino
- Seguindo relacionamentos
- Permite muitos lados para a filtragem lateral
RelatedTable
RELATEDTABLE ( table )
- Filtra a tabela de parâmetros
- Retorna apenas linhas relacionadas ao atual
- É o companheiro de Related
Transição de contexto
- Calcular executa outra tarefa:
- Se executado dentro de um contexto de linha
- Leva o contexto da linha
- Transforma -o em um contexto de filtro equivalente
- Aplica -o ao modelo de dados antes de calcular sua expressão
- Exemplo:
SUM() vs CALCULATE(SUM())
Inteligência do tempo
- O tempo de inteligência precisa de uma tabela de data.
- Data Tabela Propriedades:
- Todas as datas devem estar presentes
- De 1 ° de janeiro a 31 ° de dezembro
- Sem buracos
- Caso contrário, a inteligência do tempo não funcionará
- Time Intelligence Covers:
- No acumulado do ano
- Trimestre até o momento
- Em execução total
- Mesmo período anterior do ano anterior
- Cálculo de dias úteis
- Ano fiscal
- etc.
- Agregações:
- YTD: Ano até hoje
- QTD: trimestre até o momento
- MTD: mês até agora
CALENDÁRIO
- Retorna uma tabela com uma única coluna chamada "Data", contendo um conjunto contíguo de datas no intervalo fornecido, inclusive.
CALENDAR (
DATE ( YEAR ( MIN ( Sales[Order Date] ) ), 1, 1 ),
DATE ( YEAR ( MIN ( Sales[Order Date] ) ), 12, 31 )
)
Calendarauto
- Cria automaticamente uma tabela de calendário com base no conteúdo do banco de dados. Opcionalmente, você pode especificar o último mês (útil para exercícios fiscais)
- Calendarauto usa todas as datas no modelo, excluindo apenas colunas e tabelas calculadas
No acumulado do ano
DATESYTD e TOTALYTD
SalesAmountYTD =
CALCULATE (
SUM ( Sales[SalesAmount] ),
DATESYTD ( 'Date'[Date] )
)
SalesAmountYTD :=
TOTALYTD (
SUM ( Sales[SalesAmount] ),
'Date'[Date],
"06-30"
)
Mesmo período do ano passado
Sales_SPLY =
CALCULATE (
SUM ( Sales[SalesAmount] ),
SAMEPERIODLASTYEAR ( 'Date'[Date] )
)
Em execução total
- A execução total requer um filtro explícito.
SalesAmountRT =
CALCULATE (
SUM ( Sales[SalesAmount] ),
FILTER ( ALL ( 'Date' ), 'Date'[Date] <= MAX ( 'Date'[Date] ) )
)