Introducción a DAX
Basado en el curso de video DAX de SQLBI.
Esquema de informes

Informe

Teoría
El idioma dax
DAX es un lenguaje funcional, la ejecución fluye con llamadas de función.
! El formato del código es importante en DAX, ya que facilita la depuración del código. Para formatear automáticamente el código DAX, uno puede usar DaxFormatter.
Columnas calculadas
- Columnas calculadas usando DAX.
- Siempre calculado para la fila actual.
Medidas
- Escrito con Dax
- No trabaje en fila por fila
- En su lugar, use tablas y agregadores
- No tengo el concepto de "fila actual»
Convenciones de nombres
- Las medidas no pertenecen a una tabla => Evite el nombre de la tabla en las medidas de referencia. De esta manera, es más fácil moverse a otra tabla e identificarse como una medida.
- Entonces:
- Columnas calculadas -> tabla [columna]
- Medidas -> [Medida]
Medidas vs columnas calculadas
- Use una columna cuando:
- Necesitar cortar o filtrar el valor
- Use una medida cuando:
- Cálculo de porcentajes o proporciones
- Necesito agregaciones complejas
- Uso de espacio y CPU:
- Columnas consumen memoria
- Las medidas consumen CPU
Funciones de agregación
- Trabajar solo en columnas numéricas.
- Agregue solo una columna.
Las funciones de agregación «x»
- Iteradores: útiles para agregar fórmulas
- Iterar sobre la tabla y evaluar la expresión para cada fila
- Siempre reciba dos parámetros:
- Mesa para iterar
- Fórmula para evaluar para cada fila
- Ejemplo:
SUMX (
Sales,
Sales[Price] * Sales[Quantity]
)
Usando variables
- Muy útil para evitar repetir subexpresiones en su código.
- Ejemplo:
Quantity =
VAR TotalQuantity = SUM ( Sales[Quantity] )
RETURN
IF (
TotalQuantity > 1000,
TotalQuantity * 0.95,
TotalQuantity * 1.25
)
Funciones de fecha
DATE, DATEVALUE, DAY, EDATE,
EOMONTH, HOUR, MINUTE,
MONTH, NOW, SECOND, TIME,
TIMEVALUE, TODAY, WEEKDAY,
WEEKNUM, YEAR, YEARFRAC
Funciones de tabla
- Funciones básicas que funcionan en tablas completas y devuelven una tabla como resultado
FILTER
ALL
VALUES
DISTINCT
RELATEDTABLE
- Su resultado se usa a menudo en otras funciones
- Se pueden combinar juntos para formar expresiones complejas.
FILTRAR
- Agrega una nueva condición restringe el número de filas de una tabla
- Devuelve una tabla que puede ser iterada por una función «x»
TODO
- Devuelve todas las filas de una tabla mientras ignora el contexto del filtro
- Devuelve una tabla que puede ser iterada por una función «x»
- También se puede utilizar con una sola columna
ALL ( Customers[CustomerName] ) el resultado es una tabla con una columna
DISTINTO
- Devuelve los valores distintos de una columna, solo los visibles en el contexto actual
NumOfProducts =
COUNTROWS (
DISTINCT ( Product[ProductCode] )
)
Plataje relacionado
- Devuelve una tabla con todas las filas relacionadas con la actual.
NumOfProducts = COUNTROWS ( RELATEDTABLE ( Product ) )
Contextos de evaluación
1. Contexto de filtro
- Definido por:
- Selección de hileras
- Selección de columna
- Informe de filtros
- Selección de cortadoras
- Las filas fuera del contexto del filtro no se consideran para el cálculo
- Definido automáticamente por Pivottable, también se puede crear con funciones específicas
2. Contexto de fila
- Definido por:
- Definición de columna calculada
- Definido automáticamente para cada fila
- Funciones de iteración de filas
- Sumx, promediox ...
- Todas las funciones y iteradores «x»
- Definido por las fórmulas de usuario
- Necesario para evaluar los valores de la columna, es el concepto de "fila actual"
! El contexto del filtro filtra tablas. ¡El contexto de la fila itera filas!
CALCULAR
- Reemplaza parcialmente el contexto del filtro
- Condiciones
- Puede reemplazar una mesa completa
- Puede reemplazar una sola columna
- Calcule los trabajos en el contexto del filtro
- Los filtros se evalúan en el contexto del filtro exterior, luego se combinan juntos en y finalmente se usan para construir un nuevo contexto de filtro en el que DAX evalúa la expresión.
- Sintaxis:
CALCULATE (
Expression,
Filter1,
…
Filtern
)
1. El filtro y la suma están en la misma tabla. Puede obtener el mismo resultado usando el filtro.
NumOfBigSales =
CALCULATE (
SUM ( Sales[SalesAmount] ),
Sales[SalesAmount] > 100
)
2. Filtro claro en una sola columna. Todos usados con una sola tabla de columna.
CALCULATE (
SUMX (
Orders,
Orders[Amount]
),
ALL ( Orders[Channel] )
)
Filtros y relaciones
-Las relaciones afectan el contexto del filtro
RELACIONADO
RELATED ( table[column] )
- Abre un nuevo contexto de fila en la tabla de destino
- Siguiendo las relaciones
- Permite un filtrado de un lado a un lado
Plataje relacionado
RELATEDTABLE ( table )
- Filtra la tabla de parámetros
- Devuelve solo filas relacionadas con la actual
- Es el compañero de relacionado
Transición de contexto
- Calcular realiza otra tarea:
- Si se ejecuta dentro de un contexto de fila
- Toma el contexto de la fila
- Lo transforma en un contexto de filtro equivalente
- Lo aplica al modelo de datos antes de calcular su expresión
- Ejemplo:
SUM() vs CALCULATE(SUM())
Inteligencia de tiempo
- La inteligencia de tiempo necesita una tabla de fechas.
- Propiedades de la tabla de fecha:
- Todas las fechas deben estar presentes
- Del 1 ° de enero al 31 ° de diciembre
- Sin agujeros
- De lo contrario, la inteligencia del tiempo no funcionará
- Cubres de inteligencia de tiempo:
- El año hasta la fecha
- Trimestre hasta la fecha
- Total de carrera
- Mismo período del año anterior
- Computación de días hábiles
- Año fiscal
- etc.
- Agregaciones:
- YTD: año hasta la fecha
- QTD: trimestre hasta la fecha
- MTD: mes hasta la fecha
CALENDARIO
- Devuelve una tabla con una sola columna llamada "fecha", que contiene un conjunto contiguo de fechas en el rango dado, inclusive.
CALENDAR (
DATE ( YEAR ( MIN ( Sales[Order Date] ) ), 1, 1 ),
DATE ( YEAR ( MIN ( Sales[Order Date] ) ), 12, 31 )
)
Calendarauto
- Crea automáticamente una tabla de calendario basada en el contenido de la base de datos. Opcionalmente, puede especificar el último mes (útil para años fiscales)
- Calendarauto usa todas las fechas en el modelo, excluyendo solo columnas y tablas calculadas
El año hasta la fecha
DATESYTD y TOTALYTD
SalesAmountYTD =
CALCULATE (
SUM ( Sales[SalesAmount] ),
DATESYTD ( 'Date'[Date] )
)
SalesAmountYTD :=
TOTALYTD (
SUM ( Sales[SalesAmount] ),
'Date'[Date],
"06-30"
)
Mismo período del año pasado
Sales_SPLY =
CALCULATE (
SUM ( Sales[SalesAmount] ),
SAMEPERIODLASTYEAR ( 'Date'[Date] )
)
Total de carrera
- Ejecutar el total requiere un filtro explícito.
SalesAmountRT =
CALCULATE (
SUM ( Sales[SalesAmount] ),
FILTER ( ALL ( 'Date' ), 'Date'[Date] <= MAX ( 'Date'[Date] ) )
)