PT EN
Voltar ao site

DATTAX × DAX — Guia de Paridade

Se você constrói medidas no Power BI, trocar de plataforma costuma significar reaprender tudo do zero — e descobrir tarde demais que a função que sustenta seus KPIs não existe do outro lado. Esta página elimina essa incerteza: mostra, categoria por categoria, o que do DAX (Data Analysis Expressions, do Power BI) já existe no DATTAX, como as funções se equivalem, e o que continua fora de alcance.

Referência canônica do DAX: https://learn.microsoft.com/en-us/dax/dax-function-reference (250+ funções organizadas em 12 categorias)


1. Onde o DATTAX está hoje

DATTAX 2.0.0 — paridade DAX ≈ 85%, depois das quatro fases de implementação da linguagem. A cobertura abrange iterator X-variants, filter context com CALCULATE, time intelligence table-valued, table expressions, navegação de relacionamentos, distribuições estatísticas, hierarquias parent-child e operações bit a bit.

O que falta (~15%): integração USERELATIONSHIP ativa, visual calcs avançados (WINDOW frames complexos), variáveis VAR/RETURN inline e tooltips de página. Tudo mapeado para a fase 5 (futura).

Estado atual por categoria (DATTAX v2.0.0)

MétricaDAXDATTAX v2.0Cobertura
Total de funções~250~21084%
Aggregation (basic)221882% ✓
Aggregation X (iterator)1111100% ✓
Filter / Context3022 (CALCULATE, ALL, ALLEXCEPT, FILTER, KEEPFILTERS, REMOVEFILTERS, SELECTEDVALUE, HASONEVALUE, ISFILTERED)73% ✓
Time Intelligence4032 (DATESYTD/MTD/QTD/WTD, DATEADD, DATESBETWEEN, DATESINPERIOD, PARALLELPERIOD, SAMEPERIODLASTYEAR table, PREVIOUS/NEXT 5, STARTOF, ENDOF*, FIRSTDATE, LASTDATE)80% ✓
Text212095% ✓
Math/Trig473881% ✓
Date/Time242292% ✓
Logical1512 (IF, SWITCH, IFERROR, AND, OR, NOT, COALESCE, BLANK, TRUE, FALSE, ISBLANK, ISNUMBER)80% ✓
Table Manipulation3218 (DISTINCT, VALUES, UNION, EXCEPT, INTERSECT, TOPN, GENERATESERIES, CROSSJOIN, ROW, TREATAS, ADDCOLUMNS, SELECTCOLUMNS, SUMMARIZE, FILTER, COUNTROWS)56%
Statistical4024 (NORM/BETA/CHISQ/T/POISSON/EXPON DIST+INV+RT, COMBIN, PERMUT, FACT, GEOMEAN, STDEV.S/P, VAR.S/P, PERCENTILE.INC/EXC, RANK.EQ)60% ✓
Information421433%
Parent-Child55 (PATH, PATHITEM, PATHITEMREVERSE, PATHCONTAINS, PATHLENGTH)100% ✓
Relationships54 (RELATED, RELATEDTABLE, LOOKUPVALUE + JOIN pipe)80% ✓
Bitwise55 (BITAND, BITOR, BITXOR, BITLSHIFT, BITRSHIFT)100% ✓
Visual calcs44 (OFFSET, INDEX, WINDOW, RUNNINGSUM, RANK)100% ✓

✓ = paridade suficiente para uso BI real.


2. As famílias que sustentam medidas de BI

2.1 Iterator X-functions — agregue derivações, não só colunas

Em DAX, as X-variants (SUMX, AVERAGEX, COUNTX, MINX, MAXX, MEDIANX, PRODUCTX, GEOMEANX, COUNTAX, RANKX, PERCENTILEX.INC) recebem (tabela, expressão) e avaliam a expressão linha a linha:

dax
SUMX(Sales, Sales[Quantity] * Sales[UnitPrice])  -- soma "total por linha"
AVERAGEX(Sales, RELATED(Product[Margin]) * Sales[Amount])

As 11 X-variants estão disponíveis no DATTAX. A medida clássica de "receita = quantidade × preço, somada linha a linha" funciona como você espera, sem poluir o pipeline com MUTATE + GROUP BY intermediários e sem impedir que a expressão vire uma medida reutilizável do modelo.

2.2 CALCULATE e filter context — o coração do DAX

Cada célula de uma matriz ou gráfico carrega um conjunto implícito de filtros (linha + coluna + filtros de página). O CALCULATE é o mecanismo que modifica esse contexto antes de avaliar a expressão:

dax
SalesUS := CALCULATE(SUM(Sales[Amount]), Geography[Country] = "USA")
SalesAllProducts := CALCULATE([Sales], ALL(Product))

O DATTAX suporta CALCULATE com os modificadores essenciais — ALL, ALLEXCEPT, REMOVEFILTERS, KEEPFILTERS, FILTER table-valued, LOOKUPVALUE, SELECTEDVALUE, HASONEVALUE, ISFILTERED. Nos dashboards do DATTA BI, o contexto de cada visual (eixo, legenda e filtros da página) é aplicado automaticamente: as suas medidas respondem aos cliques do usuário como no Power BI.

2.3 Time intelligence table-valued — YoY e MoM sem reescrever a query

As funções de tempo do DAX retornam tabelas de datas que o CALCULATE consome como filtro:

dax
SalesYTD := CALCULATE(SUM(Sales[Amount]), DATESYTD(DimDate[Date]))

O DATTAX cobre as principais: DATESYTD/MTD/QTD/WTD, DATEADD, DATESBETWEEN, DATESINPERIOD, PARALLELPERIOD, SAMEPERIODLASTYEAR, PREVIOUS*/NEXT* (dia, semana, mês, trimestre e ano), STARTOF*/ENDOF*, FIRSTDATE e LASTDATE. Além delas há atalhos escalares nativos (YTD, MTD, QTD, GROWTH_PCT, ROLLING_AVG) — veja a referência da linguagem.

2.4 DIVIDE — o padrão de todo KPI financeiro

dax
Margem := DIVIDE([Receita] - [Custo], [Receita], 0)

DIVIDE(a, b, alternativo) devolve o valor alternativo (ou BLANK) em vez de erro quando b = 0. Está disponível no DATTAX — seus KPIs não quebram no divisor zero.

2.5 Lógicas e condicionais

dax
Margem = IF([Receita] > 0, ([Receita] - [Custo]) / [Receita], BLANK())
Faixa = SWITCH(TRUE(), [Idade] < 18, "Menor", [Idade] < 65, "Adulto", "Idoso")

IF, SWITCH, IFERROR, AND, OR, NOT, COALESCE, BLANK, ISBLANK e ISNUMBER estão todas disponíveis. Nota de semântica: em DAX, BLANK é um valor especial; no DATTAX, BLANK é um alias semântico de nulo — ISBLANK e IS NULL são equivalentes.


3. Catálogo DAX por categoria — o que existe no DATTAX

Use as listas abaixo como mapa: negrito indica as funções de uso essencial em modelos reais.

3.1 Aggregation (22)

APPROXIMATEDISTINCTCOUNT, AVERAGE, AVERAGEA, AVERAGEX, COUNT, COUNTA, COUNTAX, COUNTBLANK, COUNTROWS, COUNTX, DISTINCTCOUNT, DISTINCTCOUNTNOBLANK, MAX, MAXA, MAXX, MEDIAN, MEDIANX, MIN, MINA, MINX, PRODUCT, PRODUCTX, SUM, SUMX

Cobertura DATTAX: 18 básicas + as 11 X-variants completas.

3.2 Filter (30)

CALCULATE, CALCULATETABLE, FILTER, ALL, ALLCROSSFILTERED, ALLEXCEPT, ALLNOBLANKROW, ALLSELECTED, EARLIER, EARLIEST, FIRST, INDEX, KEEPFILTERS, LAST, LOOKUP, LOOKUPWITHTOTALS, LOOKUPVALUE, MATCHBY, MOVINGAVERAGE, NEXT, OFFSET, ORDERBY, PARTITIONBY, PREVIOUS, RANGE, RANK, REMOVEFILTERS, ROWNUMBER, RUNNINGSUM, SELECTEDVALUE, WINDOW

Cobertura DATTAX: 22, incluindo todas as essenciais em negrito.

3.3 Time Intelligence (40)

CLOSINGBALANCEDAY/WEEK/MONTH/QUARTER/YEAR, DATEADD, DATESBETWEEN, DATESINPERIOD, DATESMTD, DATESQTD, DATESYTD, DATESWTD, ENDOFMONTH/QUARTER/YEAR/WEEK, FIRSTDATE, LASTDATE, NEXTDAY/WEEK/MONTH/QUARTER/YEAR, OPENINGBALANCEDAY/WEEK/MONTH/QUARTER/YEAR, PARALLELPERIOD, PREVIOUSDAY/WEEK/MONTH/QUARTER/YEAR, SAMEPERIODLASTYEAR, STARTOFMONTH/QUARTER/YEAR/WEEK, TOTALMTD, TOTALQTD, TOTALYTD, TOTALWTD

Cobertura DATTAX: 32 das 40.

3.4 Text (21)

COMBINEVALUES, CONCATENATE, CONCATENATEX, EXACT, FIND, FIXED, FORMAT, LEFT, LEN, LOWER, MID, REPLACE, REPT, RIGHT, SEARCH, SUBSTITUTE, TRIM, UNICHAR, UNICODE, UPPER, VALUE

Cobertura DATTAX: 20 das 21.

3.5 Math/Trig (47)

ABS, ACOS/ACOSH/ACOT/ACOTH, ASIN/ASINH, ATAN/ATANH, CEILING, CONVERT, COS/COSH/COT/COTH, CURRENCY, DEGREES, DIVIDE, EVEN, EXP, FACT, FLOOR, GCD, INT, ISO.CEILING, LCM, LN, LOG, LOG10, MOD, MROUND, ODD, PI, POWER, QUOTIENT, RADIANS, RAND, RANDBETWEEN, ROUND, ROUNDDOWN, ROUNDUP, SIGN, SIN/SINH, SQRT, SQRTPI, TAN/TANH, TRUNC

Cobertura DATTAX: 38 das 47.

3.6 Date/Time (24)

CALENDAR, CALENDARAUTO, DATE, DATEDIFF, DATEVALUE, DAY, EDATE, EOMONTH, HOUR, MINUTE, MONTH, NETWORKDAYS, NOW, QUARTER, SECOND, TIME, TIMEVALUE, TODAY, UTCNOW, UTCTODAY, WEEKDAY, WEEKNUM, YEAR, YEARFRAC

Cobertura DATTAX: 22 das 24.

3.7 Logical (15)

AND, BITAND, BITLSHIFT, BITOR, BITRSHIFT, BITXOR, COALESCE, FALSE, IF, IF.EAGER, IFERROR, NOT, OR, SWITCH, TRUE

Cobertura DATTAX: 12, mais as 5 operações bit a bit completas (BITAND, BITOR, BITXOR, BITLSHIFT, BITRSHIFT).

3.8 Table Manipulation (32)

ADDCOLUMNS, ADDMISSINGITEMS, CROSSJOIN, CURRENTGROUP, DATATABLE, DETAILROWS, DISTINCT, EXCEPT, FILTERS, GENERATE, GENERATEALL, GENERATESERIES, GROUPBY, IGNORE, INTERSECT, NATURALINNERJOIN, NATURALLEFTOUTERJOIN, ROLLUP, ROLLUPADDISSUBTOTAL, ROLLUPISSUBTOTAL, ROLLUPGROUP, ROW, SELECTCOLUMNS, SUBSTITUTEWITHINDEX, SUMMARIZE, SUMMARIZECOLUMNS, TOPN, TREATAS, UNION, VALUES

Cobertura DATTAX: 18 das 32 — as essenciais em negrito estão presentes. Lembre que muitas operações de tabela existem também como transformações de pipe (|> DISTINCT, |> UNION, |> GROUP BY).

3.9 Statistical (40)

BETA.DIST/INV, CHISQ.DIST/DIST.RT/INV/INV.RT, COMBIN, COMBINA, CONFIDENCE.NORM/T, EXPON.DIST, GEOMEAN, GEOMEANX, LINEST, LINESTX, MEDIAN, MEDIANX, NORM.DIST/INV/S.DIST/S.INV, PERCENTILE.EXC/INC, PERCENTILEX.EXC/INC, PERMUT, POISSON.DIST, RANK.EQ, RANKX, SAMPLE, STDEV.P, STDEV.S, STDEVX.P, STDEVX.S, T.DIST/2T/RT, T.INV/2T, VAR.P, VAR.S, VARX.P, VARX.S

Cobertura DATTAX: 24 das 40, incluindo as distribuições NORM/BETA/CHISQ/T/POISSON/EXPON com DIST, INV e RT.

3.10 Information (42)

COLUMNSTATISTICS, CONTAINS, CONTAINSROW, CONTAINSSTRING, CONTAINSSTRINGEXACT, CUSTOMDATA, HASONEFILTER, HASONEVALUE, ISAFTER, ISBLANK, ISBOOLEAN, ISCROSSFILTERED, ISCURRENCY, ISDATETIME, ISDECIMAL, ISDOUBLE, ISEMPTY, ISERROR, ISEVEN, ISFILTERED, ISINSCOPE, ISINT64, ISINTEGER, ISLOGICAL, ISNONTEXT, ISNUMBER, ISNUMERIC, ISODD, ISONORAFTER, ISSELECTEDMEASURE, ISSTRING, ISSUBTOTAL, ISTEXT, NAMEOF, NONVISUAL, SELECTEDMEASURE, SELECTEDMEASUREFORMATSTRING, SELECTEDMEASURENAME, TABLEOF, USERCULTURE, USERNAME, USEROBJECTID, USERPRINCIPALNAME

Cobertura DATTAX: 14 — as essenciais em negrito estão presentes. A categoria inclui muitas funções específicas do runtime do Power BI que não se aplicam fora dele.

3.11 Parent-Child (5)

PATH, PATHCONTAINS, PATHITEM, PATHITEMREVERSE, PATHLENGTH — cobertura 100%. Hierarquias são representadas como string "1|2|3|4", úteis para reporting de estrutura organizacional.

3.12 Relationships (5)

CROSSFILTER, RELATED, RELATEDTABLE, USERELATIONSHIP, TREATAS — cobertura DATTAX: 4 de 5, com RELATED, RELATEDTABLE e LOOKUPVALUE, além do JOIN de pipe. TREATAS também existe na linguagem, contabilizada na categoria de manipulação de tabelas. USERELATIONSHIP e CROSSFILTER ainda não são suportadas.


4. Vocabulário nativo do DATTAX

Além dos nomes compatíveis com DAX, a linguagem mantém o vocabulário próprio, mais próximo de SQL — útil quando você está preparando dados em vez de escrever medidas:

FamíliaFunções
AgregaçõesSUM, AVG, MIN, MAX, COUNT, COUNT_DISTINCT, MEDIAN, COLLECT, FIRST, LAST
TextoCONCAT, UPPER, LOWER, TRIM, LENGTH, CONTAINS, NOTCONTAINS, STARTSWITH, ENDSWITH, SUBSTRING, REPLACE, SPLIT, REGEXEXTRACT
MatemáticaABS, ROUND, CEIL, FLOOR, SQRT, POWER, LOG, EXP
Data/horaNOW, TODAY, YEAR, MONTH, DAY, QUARTER, WEEKOFYEAR, DAYOFWEEK, DATEADD, DATEDIFF, DATEFORMAT, DATEPARSE
Time intelligence escalarYTD, MTD, QTD, SAMEPERIODLASTYEAR, GROWTHPCT, ROLLINGAVG, MOVING_AVG
Janela e rankingROWNUMBER, RANK, DENSERANK, LAG, LEAD, RUNNING_TOTAL, PERCENTILE
EstatísticaSTDDEV (com variância interna)
OutrasCOALESCE, CAST

Os operadores IS NULL, IS NOT NULL, BETWEEN, NOT BETWEEN, IN e NOT IN são resolvidos internamente por funções equivalentes — você os escreve como operadores normais da linguagem.


5. Exemplo prático — traduzindo uma medida do Power BI

Cenário: você tem no Power BI a medida de receita YTD com comparação anual.

Em DAX:

dax
ReceitaYTD := CALCULATE(SUM(Vendas[Valor]), DATESYTD(DimData[Data]))
ReceitaYTD_AnoAnterior := CALCULATE([ReceitaYTD], SAMEPERIODLASTYEAR(DimData[Data]))

No DATTAX, dentro de um modelo com medidas definidas:

dattax
DEFINE MEASURE receita_ytd =
  CALCULATE(SUM(valor), DATESYTD(data)) ;

DEFINE MEASURE receita_ytd_ano_anterior =
  CALCULATE([receita_ytd], SAMEPERIODLASTYEAR(data)) ;

Passo a passo para validar:

  1. Abra o editor em DATTA BIDATTAX.
  2. Defina as medidas acima sobre o seu dataset de vendas, ajustando os nomes de colunas.
  3. Use as medidas em um EVALUATE ... GROUP BY regiao AGGREGATE ... e confira os números contra o relatório original.
  4. Ao usar as mesmas medidas em um dashboard do DATTA BI, o contexto de filtro de cada visual (eixo, legenda e filtros de página) é aplicado automaticamente.

6. O que ainda não está coberto

  • USERELATIONSHIP — ativação de relacionamentos alternativos do modelo semântico. CROSSFILTER segue a mesma dependência.
  • Visual calcs avançados — WINDOW frames complexos, além de OFFSET, INDEX, RANK, WINDOW e RUNNINGSUM, que já existem.
  • VAR ... RETURN inline — variáveis dentro de expressões; hoje o equivalente é o LET no topo do script.
  • Tooltips de página — recurso de apresentação do Power BI, fora do escopo da linguagem.

Esses itens estão priorizados para a fase 5. Se algum deles bloqueia sua migração, registre o caso com o time da plataforma — a ordem é guiada por uso real.


7. Filosofia de design

  1. Pipes e funções, juntos. DAX é funcional puro; M (Power Query) é pipeline — no Power BI são duas linguagens separadas. O DATTAX combina as duas: |> para preparação e ETL, funções DAX-like dentro de expressões para medidas. Uma linguagem só, dois estilos.
  2. Filter context onde faz sentido. O contexto de filtro implícito é ativado nas consultas que vêm de um visual de dashboard; pipelines de ETL continuam explícitos e previsíveis.
  3. BLANK ≈ NULL. DAX trata BLANK como valor especial; no DATTAX, BLANK é um alias semântico de nulo — comportamento consistente com SQL.
  4. Iteradores avaliam linha a linha. As X-variants recebem a expressão e a aplicam sobre cada linha da tabela informada, o que permite agregar derivações sem materializar colunas intermediárias.

8. Referências

  • Referência DAX oficial: https://learn.microsoft.com/en-us/dax/dax-function-reference
  • Referência da linguagem DATTAX
  • Guia da linguagem para usuários
  • Fluxo de BI da plataforma