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étrica | DAX | DATTAX v2.0 | Cobertura |
|---|---|---|---|
| Total de funções | ~250 | ~210 | 84% ✓ |
| Aggregation (basic) | 22 | 18 | 82% ✓ |
| Aggregation X (iterator) | 11 | 11 | 100% ✓ |
| Filter / Context | 30 | 22 (CALCULATE, ALL, ALLEXCEPT, FILTER, KEEPFILTERS, REMOVEFILTERS, SELECTEDVALUE, HASONEVALUE, ISFILTERED) | 73% ✓ |
| Time Intelligence | 40 | 32 (DATESYTD/MTD/QTD/WTD, DATEADD, DATESBETWEEN, DATESINPERIOD, PARALLELPERIOD, SAMEPERIODLASTYEAR table, PREVIOUS/NEXT 5, STARTOF, ENDOF*, FIRSTDATE, LASTDATE) | 80% ✓ |
| Text | 21 | 20 | 95% ✓ |
| Math/Trig | 47 | 38 | 81% ✓ |
| Date/Time | 24 | 22 | 92% ✓ |
| Logical | 15 | 12 (IF, SWITCH, IFERROR, AND, OR, NOT, COALESCE, BLANK, TRUE, FALSE, ISBLANK, ISNUMBER) | 80% ✓ |
| Table Manipulation | 32 | 18 (DISTINCT, VALUES, UNION, EXCEPT, INTERSECT, TOPN, GENERATESERIES, CROSSJOIN, ROW, TREATAS, ADDCOLUMNS, SELECTCOLUMNS, SUMMARIZE, FILTER, COUNTROWS) | 56% |
| Statistical | 40 | 24 (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% ✓ |
| Information | 42 | 14 | 33% |
| Parent-Child | 5 | 5 (PATH, PATHITEM, PATHITEMREVERSE, PATHCONTAINS, PATHLENGTH) | 100% ✓ |
| Relationships | 5 | 4 (RELATED, RELATEDTABLE, LOOKUPVALUE + JOIN pipe) | 80% ✓ |
| Bitwise | 5 | 5 (BITAND, BITOR, BITXOR, BITLSHIFT, BITRSHIFT) | 100% ✓ |
| Visual calcs | 4 | 4 (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:
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:
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:
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
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
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ília | Funções |
|---|---|
| Agregações | SUM, AVG, MIN, MAX, COUNT, COUNT_DISTINCT, MEDIAN, COLLECT, FIRST, LAST |
| Texto | CONCAT, UPPER, LOWER, TRIM, LENGTH, CONTAINS, NOTCONTAINS, STARTSWITH, ENDSWITH, SUBSTRING, REPLACE, SPLIT, REGEXEXTRACT |
| Matemática | ABS, ROUND, CEIL, FLOOR, SQRT, POWER, LOG, EXP |
| Data/hora | NOW, TODAY, YEAR, MONTH, DAY, QUARTER, WEEKOFYEAR, DAYOFWEEK, DATEADD, DATEDIFF, DATEFORMAT, DATEPARSE |
| Time intelligence escalar | YTD, MTD, QTD, SAMEPERIODLASTYEAR, GROWTHPCT, ROLLINGAVG, MOVING_AVG |
| Janela e ranking | ROWNUMBER, RANK, DENSERANK, LAG, LEAD, RUNNING_TOTAL, PERCENTILE |
| Estatística | STDDEV (com variância interna) |
| Outras | COALESCE, 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:
ReceitaYTD := CALCULATE(SUM(Vendas[Valor]), DATESYTD(DimData[Data]))
ReceitaYTD_AnoAnterior := CALCULATE([ReceitaYTD], SAMEPERIODLASTYEAR(DimData[Data]))No DATTAX, dentro de um modelo com medidas definidas:
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:
- Abra o editor em .
- Defina as medidas acima sobre o seu dataset de vendas, ajustando os nomes de colunas.
- Use as medidas em um
EVALUATE ... GROUP BY regiao AGGREGATE ...e confira os números contra o relatório original. - 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.
CROSSFILTERsegue a mesma dependência. - Visual calcs avançados — WINDOW frames complexos, além de
OFFSET,INDEX,RANK,WINDOWeRUNNINGSUM, que já existem. - VAR ... RETURN inline — variáveis dentro de expressões; hoje o equivalente é o
LETno 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
- 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. - 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.
- BLANK ≈ NULL. DAX trata BLANK como valor especial; no DATTAX, BLANK é um alias semântico de nulo — comportamento consistente com SQL.
- 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