Información general sobre DAX
Expresiones de análisis de datos (DAX) es un lenguaje de expresiones de fórmulas que se usa en Analysis Services, Power BI y Power Pivot en Excel. Las fórmulas DAX abarcan funciones, operadores y valores para realizar cálculos avanzados y consultas en los datos de las tablas y columnas relacionadas de los modelos de datos tabulares.
Este artículo sirve de introducción básica a los conceptos más importantes de DAX. En él se describe DAX y es aplicable a todos los productos que lo usan. Puede que algunas funciones no sean válidas en determinados productos o casos de uso. Consulte la documentación del producto en la que se especifique su implementación de DAX específica.
Cálculos
Las fórmulas DAX se usan en medidas, columnas calculadas, tablas calculadas y seguridad de nivel de fila.
Medidas
Las medidas son fórmulas de cálculo dinámico en las que los resultados cambian en función del contexto. Las medidas se usan en informes en los que se pueden combinar y filtrar datos del modelo mediante varios atributos, como un informe de Power BI o una tabla dinámica o un gráfico dinámico de Excel. Las medidas se crean con la barra de fórmulas DAX del diseñador de modelos.
Una fórmula en una medida puede usar las funciones de agregación estándar creadas automáticamente con la característica de Autosuma (como COUNT o SUM), aunque también podemos definir nuestra propia fórmula con la barra de fórmulas DAX. Las medidas con nombre se pueden pasar como argumento a otras medidas.
Al definir una fórmula para una medida en la barra de fórmulas, una característica de información sobre herramientas muestra una vista previa de cuáles serían los resultados para total en el contexto actual, pero de lo contrario no se generan los resultados inmediatamente en ninguna parte. La razón por la que no se pueden ver los resultados (filtrados) del cálculo inmediatamente es que el resultado de una medida no se puede determinar sin el contexto. Evaluar una medida requiere una aplicación cliente de informes que pueda proporcionar el contexto necesario para recuperar los datos pertinentes de cada celda y, a continuación, evaluar la expresión para cada celda. Ese cliente podría ser una tabla dinámica o un gráfico dinámico de Excel, un informe de Power BI o una expresión de tabla en una consulta DAX en SQL Server Management Studio (SSMS).
Independientemente del cliente, se ejecuta una consulta distinta por cada celda de los resultados. Es decir, cada combinación de encabezados de fila y de columna de una tabla dinámica, o cada selección de segmentación de datos y filtros de un informe de Power BI, genera un subconjunto de datos diferente sobre el que se calcula la medida. Por ejemplo, con esta fórmula de medida muy sencilla:
Total Sales = SUM([Sales Amount])
Cuando un usuario coloca la medida TotalSales en un informe y, después, coloca la columna Product Category de una tabla Product en Filters, la suma de Sales Amount se calcula y se muestra en cada categoría de producto.
A diferencia de las columnas calculadas, la sintaxis de una medida incluye el nombre de la medida antes de la fórmula. En el ejemplo que acabamos de proporcionar, el nombre Total Sales aparece delante de la fórmula. Después de crear una medida, el nombre y su definición aparecen en la lista de campos de la aplicación cliente de informes y, en función de las perspectivas y roles, estarán disponibles para todos los usuarios del modelo.
Para obtener más información, consulte:
Medidas en Power BI Desktop
Medidas en Analysis Services
Medidas en Power Pivot
Columnas calculadas
Una columna calculada es una columna que se agrega a una tabla existente (en el diseñador de modelos) y, después, se crea una fórmula DAX que define los valores de esa columna. Cuando una columna calculada contiene una fórmula DAX válida, se calculan valores para cada fila en cuanto la fórmula se escribe y, tras ello, los valores se almacenan en el modelo de datos en memoria. Por ejemplo, en una tabla Date, cuando se escribe la fórmula en la barra de fórmulas:
= [Calendar Year] & " Q" & [Calendar Quarter]
Se calcula un valor para cada fila de la tabla, tomando para ello los valores de la columna Calendar Year (de la propia tabla Date), agregando un espacio y la letra mayúscula Q y, finalmente, agregando los valores de la columna Calendar Quarter (de la propia tabla Date). El resultado de cada fila en la columna calculada se calcula inmediatamente y se muestra, por ejemplo, como 2017 Q1. Los valores de columna solo se recalculan si la tabla o cualquier tabla relacionada se procesa (actualiza), o si el modelo se descarga de la memoria y se vuelve a cargar, como al cerrar y volver a abrir un archivo de Power BI Desktop.
Para más información, vea:
Columnas calculadas en Power BI Desktop
Columnas calculadas en Analysis Services
Columnas calculadas en Power Pivot.
Tablas calculadas
Una tabla calculada es un objeto calculado, basado en una expresión de fórmula, que se deriva de todas las tablas (o parte de ellas) del mismo modelo. En lugar de consultar y cargar valores en las columnas de la nueva tabla desde un origen de datos, una fórmula DAX define los valores de la tabla.
Las tablas calculadas pueden ser útiles en una dimensión realizadora de roles. Un ejemplo es la tabla Date, como OrderDate, ShipDate o DueDate, según la relación de clave externa. Al crear una tabla calculada para ShipDate explícitamente, se obtiene una tabla independiente disponible para las consultas y plenamente funcional, como cualquier otra tabla. Las tablas calculadas también son útiles al configurar un conjunto de filas filtrado o un subconjunto o superconjunto de columnas a partir de otras tablas existentes, ya que permiten mantener intacta la tabla original mientras se crean variaciones de dicha tabla para dar cabida a escenarios concretos.
Las tablas calculadas admiten relaciones con otras tablas. Las columnas de la tabla calculada tienen tipos de datos y formato, y pueden pertenecer a una categoría de datos. Las tablas calculadas se pueden denominar, mostrar u ocultar, como cualquier otra tabla. Las tablas calculadas vuelven a calcularse si alguna de las tablas desde la que extraen datos se actualiza.
Para más información, vea:
Tablas calculadas en Power BI Desktop
Tablas calculadas en Analysis Services.
Seguridad de nivel de fila
Con la seguridad de nivel de fila, una fórmula DAX se debe evaluar como una condición booleana "true" o "false", que define qué filas pueden devolver los resultados de una consulta realizada por miembros de un rol determinado. Por ejemplo, en el caso de los miembros del rol Sales, dada una tabla Customers con la siguiente fórmula DAX:
= Customers[Country] = "USA"
Los miembros de ese rol Sales solo podrán ver los datos de los clientes de Estados Unidos, y solo se devuelven agregados (como SUM) relativos a los clientes de Estados Unidos. La seguridad de nivel de fila no está disponible en Power Pivot en Excel.
Al definir la seguridad de nivel de fila con una fórmula DAX, se crea un conjunto de filas permitido. Esto no deniega el acceso a otras filas, simplemente estas no se devuelven como parte del conjunto de filas permitido. Otros roles pueden permitir el acceso a las filas excluidas por la fórmula DAX. Si un usuario es miembro de otro rol y la seguridad de nivel de fila de ese rol permite el acceso a ese conjunto de filas específico, el usuario podrá ver los datos de esa fila.
Las fórmulas de seguridad de nivel de fila se aplican tanto a las filas especificadas como a las filas relacionadas. Si una tabla tiene varias relaciones, los filtros aplican seguridad a la relación que esté activa. Las fórmulas de seguridad de nivel de fila se entrecruzan con otras fórmulas definidas para las tablas relacionadas.
Para más información, vea:
Seguridad de nivel de fila (RLS) con Power BI
Roles en Analysis Services
Consultas
Se pueden crear y ejecutar consultas DAX también en SQL Server Management Studio (SSMS) y en herramientas de código abierto como DAX Studio (daxstudio.org). A diferencia de las fórmulas de cálculo DAX, que solo se pueden crear en modelos de datos tabulares, se pueden ejecutar consultas DAX también en modelos multidimensionales de Analysis Services. Las consultas DAX suelen ser más fáciles de escribir y más eficaces que las consultas de Expresiones de datos multidimensionales (MDX).
Una consulta DAX es una instrucción, como, por ejemplo, una instrucción SELECT en T-SQL. El tipo más básico de consulta DAX es una instrucción evaluate. Por ejemplo,
EVALUATE
( FILTER ( 'DimProduct', [SafetyStockLevel] < 200 ) )
ORDER BY [EnglishProductName] ASC
Devuelve como resultados una tabla que muestra solo los productos con un nivel SafetyStockLevel inferior a 200, en orden ascendente según el elemento EnglishProductName.
Se pueden crear medidas como parte de la consulta. Las medidas existen únicamente lo que dura la consulta. Para más información, vea Consultas DAX.
Fórmulas
Las fórmulas DAX son fundamentales para crear cálculos en columnas y medidas calculadas, así como para proteger los datos con seguridad de nivel de fila. Para crear fórmulas de columnas y medidas calculadas, use la barra de fórmulas situada en la parte superior de la ventana del diseñador de modelos o del editor DAX. A fin de crear fórmulas para la seguridad de nivel de fila, use el cuadro de diálogo Administrador de roles o Administrar roles. La información de esta sección está pensada para empezar a conocer los conceptos básicos de las fórmulas DAX.
Conceptos básicos de las fórmulas
Las fórmulas DAX pueden ser muy simples o bastante complejas. En la siguiente tabla se muestran algunos ejemplos de fórmulas sencillas que se podrían usar en una columna calculada.
Fórmula | Definición |
---|---|
= TODAY() |
Inserta la fecha actual en cada fila de una columna calculada. |
= 3 |
Inserta el valor 3 en cada fila de una columna calculada. |
= [Column1] + [Column2] |
Agrega los valores de la misma fila de [Column1] y [Column2] y coloca los resultados en la columna calculada de la misma fila. |
Independientemente de si la fórmula que se cree sea sencilla o compleja, se pueden usar los siguientes pasos para crear una fórmula:
Cada fórmula debe comenzar por un signo igual (=).
Se puede escribir o seleccionar un nombre de función, o bien escribir una expresión.
Empiece a escribir las primeras letras de la función o el nombre que quiera, y Autocompletar mostrará una lista de las funciones, tablas y columnas disponibles. Presione la tecla TAB para agregar un elemento de la lista Autocompletar a la fórmula.
También puede hacer clic en el botón Fx para ver una lista de las funciones disponibles. Para seleccionar una función de la lista desplegable, use las teclas de dirección para resaltar el elemento y haga clic en Aceptar para agregar la función a la fórmula.
Para proporcionar los argumentos de la función, selecciónelos de una lista desplegable de posibles tablas y columnas, o bien escriba valores.
Compruebe si hay errores de sintaxis: asegúrese de que todos los paréntesis están emparejados y de que se hace referencia correctamente a las columnas, tablas y valores.
Presione Entrar para aceptar la fórmula.
Nota
En una columna calculada, en cuanto se escribe la fórmula y esta se valida, la columna se rellena con valores. En una medida, cuando se presiona Entrar, se guarda la definición de la medida en la tabla. Si una fórmula no es válida, se mostrará un error.
En este ejemplo, echemos un vistazo a una fórmula en una medida denominada Days in Current Quarter:
Days in Current Quarter = COUNTROWS( DATESBETWEEN( 'Date'[Date], STARTOFQUARTER( LASTDATE('Date'[Date])), ENDOFQUARTER('Date'[Date])))
Esta medida se usa para crear una relación de comparación entre un período incompleto y el período anterior. La fórmula debe tener en cuenta la proporción del período que ha transcurrido y compararla con la misma proporción del período anterior. En este caso, [Days Current Quarter to Date]/[Days in Current Quarter] nos da la proporción transcurrida en el período actual.
Esta fórmula contiene los siguientes elementos:
Elemento de la fórmula | Descripción |
---|---|
Days in Current Quarter |
Nombre de la medida. |
= |
El signo igual (=) inicia la fórmula. |
COUNTROWS |
COUNTROWS cuenta el número de filas de la tabla Date. |
() |
Los paréntesis de apertura y de cierre especifican argumentos. |
DATESBETWEEN |
La función DATESBETWEEN devuelve las fechas entre la última fecha de cada valor de la columna Date en la tabla Date. |
'Date' |
Especifica la tabla Date. Las tablas se especifican entre comillas simples. |
[Date] |
Especifica la columna Date de la tabla Date. Las columnas se especifican entre corchetes. |
, |
|
STARTOFQUARTER |
La función STARTOFQUARTER devuelve la fecha de inicio del trimestre. |
LASTDATE |
La función LASTDATE devuelve la última fecha del trimestre. |
'Date' |
Especifica la tabla Date. |
[Date] |
Especifica la columna Date de la tabla Date. |
, |
|
ENDOFQUARTER |
La función ENDOFQUARTER. |
'Date' |
Especifica la tabla Date. |
[Date] |
Especifica la columna Date de la tabla Date. |
Uso de la función Autocompletar en fórmulas
La función Autocompletar ayuda a escribir una sintaxis de fórmula válida proporcionando las opciones para cada elemento de la fórmula.
Puede usar la función Autocompletar fórmula en medio de una fórmula existente con funciones anidadas. El texto situado inmediatamente antes del punto de inserción se usa para mostrar los valores de la lista desplegable, mientras que todo el texto situado después del punto de inserción se mantiene inalterado.
La función Autocompletar no agrega el paréntesis de cierre de las funciones, ni hace coincidir automáticamente los paréntesis. Debe asegurarse de que cada función sea correcta sintácticamente ya que, de lo contrario, no podrá guardar o usar la fórmula.
Uso de varias funciones en una fórmula
Las funciones se pueden anidar, es decir, puede usar los resultados de una función como argumento de otra función. Puede anidar hasta 64 niveles de funciones en columnas calculadas. Sin embargo, el anidamiento puede dificultar la creación de fórmulas o la solución de sus problemas. Muchas funciones están diseñadas para usarse exclusivamente como funciones anidadas. Estas funciones devuelven una tabla, que no se puede guardar directamente como un resultado, pero que se debe proporcionar como entrada de una función de tabla. Por ejemplo, las funciones SUMX, AVERAGEX y MINX requieren una tabla como primer argumento.
Functions
Una función es una fórmula con nombre dentro de una expresión. La mayoría de las funciones tienen argumentos obligatorios y opcionales, también conocidos como parámetros, como entrada. Cuando se ejecuta la función, se devuelve un valor. DAX incluye funciones que sirven para realizar cálculos usando fechas y horas, para crear valores condicionales, para trabajar con cadenas y para realizar búsquedas basadas en relaciones. También ofrece la posibilidad de iterar por una tabla para realizar cálculos recursivos. Si conoce las fórmulas de Excel, muchas de estas funciones le parecerán muy similares; sin embargo, las fórmulas DAX son diferentes en los siguientes aspectos importantes:
Una función de DAX siempre hace referencia a una columna completa o una tabla. Si solo desea usar valores concretos de una tabla o columna, puede agregar filtros a la fórmula.
Si necesita personalizar los cálculos fila a fila, DAX dispone de funciones que permiten usar el valor de la fila actual o un valor relacionado como un tipo de parámetro, para realizar cálculos que varían según el contexto. Para saber cómo funcionan estas funciones, vea Contexto en este artículo.
DAX incluye muchas funciones que devuelven una tabla, en lugar de un valor. La tabla no se muestra en un cliente del informes, sino que se utiliza para proporcionar la entrada a otras funciones. Por ejemplo, puede recuperar una tabla y, a continuación, contar los valores distintos que contiene, o calcular sumas dinámicas en tablas o columnas filtradas.
Las funciones DAX incluyen una serie de funciones de inteligencia de tiempo . Estas funciones le permiten definir o seleccionar rangos de fechas y realizar cálculos dinámicos basados en dichas fechas o rangos. Por ejemplo, puede comparar sumas en períodos paralelos.
Funciones de agregación
Las funciones de agregación calculan un valor (escalar) como count, sum, average, minimum o maximum para todas las filas de una columna o tabla, según se define en la expresión. Para más información, consulte Funciones de agregación.
Funciones de fecha y hora
Las funciones de fecha y hora en DAX son similares a las funciones de fecha y hora en Microsoft Excel. Sin embargo, las funciones DAX se basan en un tipo de datos datetime a partir del 1 de marzo de 1900. Para obtener más información, vea Funciones de fecha y hora.
Funciones de filtro
Las funciones de filtro de DAX devuelven tipos de datos específicos, valores de búsqueda en tablas relacionadas, además de la capacidad de filtrar por valores relacionados. Las funciones de búsqueda usan tablas y relaciones, como una base de datos. Las funciones de filtrado permiten manipular el contexto de los datos para crear cálculos dinámicos. Para obtener más información, vea Funciones de filtro.
Funciones financieras
Estas funciones en DAX se usan en fórmulas que realizan cálculos financieros, como el valor neto presente y la tasa de devolución. Estas funciones son similares a las funciones financieras usadas en Microsoft Excel. Para obtener más información, vea Funciones financieras.
Funciones de información
Una función de información examina la celda o fila que se proporciona como argumento e indica si el valor coincide con el tipo esperado. Por ejemplo, la función ISERROR devuelve TRUE si el valor al que se hace referencia contiene un error. Para obtener más información, vea Funciones de información.
Funciones lógicas
Las funciones lógicas actúan sobre una expresión para devolver información acerca de los valores de la expresión. Por ejemplo, la función TRUE permite saber si una expresión que se está evaluando devuelve un valor TRUE. Para obtener más información, vea Funciones lógicas.
Funciones matemáticas y trigonométricas
Las funciones matemáticas en DAX son muy parecidas a las funciones matemáticas y trigonométricas de Excel. Existen pequeñas diferencias en los tipos de datos numéricos usados por funciones de DAX. Para obtener más información, vea Funciones matemáticas y trigonométricas.
Otras funciones
Estas funciones realizan acciones únicas que no se pueden definir por medio de ninguna de las categorías a las que la mayoría de las otras funciones pertenecen. Para obtener más información, vea Otras funciones.
Funciones de relación
Las funciones de relación en DAX permiten devolver valores de otra tabla relacionada, especificar una relación concreta para usarla en una expresión y especificar la dirección de filtro cruzado. Para más información, consulte Funciones de relación.
Funciones estadísticas
Las funciones estadísticas calculan valores relacionados con las distribuciones estadísticas y la probabilidad, como la desviación estándar y el número de permutaciones. Para obtener más información, vea Funciones estadísticas.
Funciones de texto
Las funciones de texto en DAX son muy parecidas a sus homólogas en Excel. Puede devolver parte de una cadena, buscar texto dentro de una cadena o concatenar valores de una cadena. DAX también proporciona funciones para controlar los formatos para las fechas, horas y números. Para obtener más información, vea Funciones de texto.
Funciones de inteligencia de tiempo
Las funciones de inteligencia de tiempo proporcionadas en DAX le permiten crear cálculos que usan el conocimiento integrado acerca de calendarios y fechas. El uso de intervalos de fecha y de hora en combinación con agregaciones o cálculos permite crear comparaciones significativas a lo largo de períodos de tiempo comparables relativos a ventas, inventarios, etc. Para obtener más información, vea Funciones de inteligencia de tiempo (DAX).
Funciones de manipulación de tablas
Estas funciones devuelven una tabla o manipulan las tablas existentes. Por ejemplo, mediante el uso de ADDCOLUMNS puede agregar columnas calculadas a una tabla especificada o devolver una tabla de resumen sobre un conjunto de grupos con la función SUMMARIZECOLUMNS. Para obtener más información, vea Funciones de manipulación de tablas.
Variables
Se pueden crear variables dentro de una expresión mediante VAR. Técnicamente, VAR no es una función, sino una palabra clave que sirve para almacenar el resultado de una expresión como una variable con nombre. De este modo, esa variable se puede pasar como argumento a otras expresiones de medida. Por ejemplo:
VAR
TotalQty = SUM ( Sales[Quantity] )
Return
IF (
TotalQty > 1000,
TotalQty * 0.95,
TotalQty * 1.25
)
En este ejemplo, TotalQty se puede pasar como una variable con nombre a otras expresiones. Las variables pueden ser de cualquier tipo de datos escalar, tablas incluidas. El uso de variables en las fórmulas DAX puede ser increíblemente eficaz.
Tipos de datos
Puede importar datos en un modelo de varios orígenes de datos diferentes que podrían admitir tipos de datos diferentes. Al importar los datos en un modelo, se convierten a uno de los tipos de datos del modelo tabular. Cuando se usa el modelo de datos en un cálculo, los datos se convierten a un tipo de datos DAX para la duración y el resultado del cálculo. Cuando se crea una fórmula DAX, los términos usados en la fórmula determinarán automáticamente el tipo de datos de valor devuelto.
DAX admite los siguientes tipos de datos:
Tipo de datos en el modelo | Tipo de datos en DAX | Descripción |
---|---|---|
Whole Number | Valor entero de 64 bits (ocho bytes) 1, 2 | Números que no tienen posiciones decimales. Los enteros pueden ser números positivos o negativos, pero deben ser números enteros comprendidos entre -9.223.372.036.854.775.808 (-2^63) y 9.223.372.036.854.775.807 (2^63-1). |
Decimal Number | Número real de 64 bits (ocho bytes) 1, 2 | Los números reales son aquellos que pueden tener posiciones decimales. Abarcan un amplio intervalo de valores: Valores negativos de -1,79E +308 a -2,23E -308 Cero Valores positivos desde 2,23E -308 hasta 1,79E + 308 Sin embargo, el número de dígitos significativos se limita a 17 dígitos decimales. |
Booleano | Boolean | Valor True o False. |
Texto | String | Cadena de datos de carácter Unicode. Pueden ser cadenas, números o fechas representados en un formato de texto. |
Fecha | Fecha y hora | Fechas y horas en una representación de fecha y hora aceptada. Las fechas válidas son todas las fechas posteriores al 1 de marzo de 1900. |
Moneda | Moneda | El tipo de datos de moneda permite los valores comprendidos entre -922.337.203.685.477,5808 y 922.337.203.685.477,5807 con cuatro dígitos decimales de precisión fija. |
N/D | En blanco | Un tipo en blanco es un tipo de datos de DAX que representa y reemplaza los valores NULL de SQL. Un valor en blanco se puede crear con la función BLANK y se puede comprobar si es tal con la función lógica ISBLANK. |
Los modelos de datos tabulares también incluyen el tipo de datos Tabla como entrada o salida en muchas funciones DAX. Por ejemplo, la función FILTER toma una tabla como entrada y genera otra tabla de salida que contiene solo las filas que cumplen las condiciones del filtro. Mediante la combinación de funciones de tabla con funciones de agregación, se pueden realizar cálculos complejos en conjuntos de datos definidos dinámicamente.
Como los tipos de datos suelen establecerse automáticamente, es importante entender los tipos de datos y cómo se aplican, en particular, a las fórmulas DAX. Los errores en fórmulas o los resultados inesperados, por ejemplo, suelen producirse cuando se usa un operador determinado que no se puede utilizar con un tipo de datos especificado en un argumento. por ejemplo, la fórmula = 1 & 2
devuelve un resultado de cadena de 12. Sin embargo, la fórmula = "1" + "2"
devuelve un resultado entero de 3.
Context
El contexto es un concepto importante que se debe comprender al crear fórmulas DAX. El contexto es lo que permite realizar análisis dinámicos, ya que los resultados de una fórmula cambian para reflejar la selección de fila o celda actual, y también los datos relacionados. Entender lo que es el contexto y usarlo eficazmente es esencial para generar análisis dinámicos y muy eficaces, y para solucionar los posibles problemas de las fórmulas.
Las fórmulas de modelos tabulares se pueden evaluar en un contexto diferente, dependiendo de otros elementos de diseño:
- Filtros aplicados en una Tabla dinámica o informe
- Filtros definidos dentro de una fórmula
- Relaciones especificadas utilizando funciones especiales dentro de una fórmula
Hay diferentes tipos de contexto: contexto de fila, contexto de consultay contexto de filtro.
Contexto de fila
Se puede pensar en un contexto de fila como "la fila actual". Si crea una fórmula en una columna calculada, el contexto de la fila para esa fórmula incluye los valores de todas las columnas en la fila actual. Si la tabla se relaciona con otra tabla, el contenido también incluye todos los valores de la otra tabla que están relacionados con la fila actual.
Por ejemplo, suponga que crea una columna calculada = [Freight] + [Tax]
que suma los valores de dos columnas, Freight y Tax, de la misma tabla. Esta fórmula obtiene automáticamente solo los valores de la fila actual en las columnas especificadas.
El contexto de fila también sigue cualquier relación definida entre las tablas, incluidas las relaciones definidas dentro de una columna calculada utilizando fórmulas DAX, para determinar qué filas de las tablas relacionadas están asociadas a la fila actual.
Por ejemplo, la fórmula siguiente utiliza la función RELATED para capturar un valor de impuesto de una tabla relacionada, en función de la región a la que se envió el pedido. El valor del impuesto se determina utilizando el valor para la región en la tabla actual, para ello, se busca la región en la tabla relacionada y, posteriormente, se obtiene la tasa impositiva para esa región de la tabla relacionada.
= [Freight] + RELATED('Region'[TaxRate])
Esta fórmula obtiene la tasa impositiva para la región actual de la tabla de regiones y la agrega al valor de la columna Freight. En las fórmulas de DAX, no necesita conocer o especificar la relación específica que conecta las tablas.
Contexto de varias filas
DAX incluye funciones que iteran los cálculos sobre una tabla. Estas funciones pueden tener varias filas actuales, cada una con su propio contexto de fila. Básicamente, estas funciones permiten crear fórmulas que realizan operaciones sobre un bucle interno y externo de forma recursiva.
Por ejemplo, suponga que un modelo contiene una tabla Products y una tabla Sales . Es posible que los usuarios deseen pasar por la tabla de ventas completa, la cual está llena de transacciones que implican a varios productos, y encontrar la cantidad más grande que se haya pedido para cada producto en cualquiera de las transacciones.
Con DAX puede compilar una fórmula única que devuelve el valor correcto y los resultados se actualizan automáticamente cada vez que un usuario agrega datos a las tablas.
= MAXX(FILTER(Sales,[ProdKey] = EARLIER([ProdKey])),Sales[OrderQty])
Para obtener un ejemplo detallado de esta fórmula, vea EARLIER.
En resumen, la función EARLIER almacena el contexto de fila de la operación anterior a la operación actual. En todo momento, la función almacena en memoria dos conjuntos de contexto: un conjunto de contexto representa la fila actual para el bucle interno de la fórmula y el otro conjunto de contexto representa la fila actual para el bucle externo de la fórmula. DAX alimenta automáticamente los valores entre los dos bucles de forma que puede crear agregados complejos.
Contexto de consulta
Contexto de la consulta hace referencia al subconjunto de datos que se recuperan implícitamente para una fórmula. Por ejemplo, cuando un usuario coloca una medida o un campo en un informe, el motor examina los encabezados de fila y de columna, las segmentaciones y los filtros de informe para determinar el contexto. Después, se ejecutan las consultas necesarias en los datos del modelo para obtener el subconjunto de datos correcto, se realizan los cálculos que define la fórmula y se rellenan los valores en el informe.
Como el contexto cambia según dónde se coloque la fórmula, los resultados de la fórmula también pueden variar. Por ejemplo, supongamos que creamos una fórmula que suma los valores de la columna Profit de la tabla Sales: = SUM('Sales'[Profit])
. Si usamos esta fórmula en una columna calculada dentro de la tabla Sales, los resultados de la fórmula serán los mismos en toda la tabla, ya que el contexto de consulta de la fórmula es siempre el conjunto de datos completo de la tabla Sales. Los resultados reflejarán las ganancias de todas las regiones, de todos los productos, de todos los años, etc.
No obstante, normalmente los usuarios no quieren ver el mismo resultado cientos de veces, sino obtener las ganancias de un año determinado, de un país determinado, de un producto determinado o de alguna combinación de estos elementos para, luego, obtener un total general.
En un informe, el contexto se cambia mediante el filtrado, la incorporación o la eliminación de campos, y con el uso de segmentaciones. Para cada cambio, el contexto de consulta en el que se evalúa la medida. Por consiguiente, la misma fórmula, que se utiliza en una medida, se evalúa en un contexto de la consulta diferente para cada celda.
Contexto de filtro
Elcontexto de filtro es el conjunto de valores permitido en cada columna o en los valores recuperados de una tabla relacionada. Los filtros se pueden aplicar a la columna en el diseñador o en el nivel de presentación (informes y tablas dinámicas). Las expresiones de filtro también pueden definir explícitamente filtros dentro de la fórmula.
El contexto del filtro se agrega al especificar las restricciones de filtro en el conjunto de valores permitido en una columna o tabla, utilizando los argumentos para una fórmula. El contexto del filtro se aplica sobre otros contextos, como el contexto de la fila o el de la consulta.
En los modelos tabulares hay muchas maneras de crear el contexto de filtro. En el contexto de los clientes que pueden consumir el modelo, como los informes de Power BI, los usuarios pueden crear filtros sobre la marcha agregando segmentaciones o filtros de informe en los encabezados de columna y fila. También puede especificar directamente las expresiones de filtro dentro de la fórmula, para especificar valores relacionados, filtrar las tablas que se usan como entradas u obtener dinámicamente el contexto de los valores utilizados en los cálculos. También puede borrar por completo o de forma selectiva los filtros en columnas específicas. Esto resulta muy útil al crear fórmulas que calculan totales generales.
Para obtener más información sobre cómo crear filtros en las fórmulas, vea Función FILTER (DAX).
Para ver un ejemplo de cómo los filtros se pueden borrar para crear totales generales, vea Función ALL (DAX).
Para obtener ejemplos sobre cómo borrar y aplicar filtros de forma selectiva en las fórmulas, vea ALLEXCEPT.
Determinar el contexto de las fórmulas
Al crear una fórmula DAX, se comprueba primero que la fórmula tiene una sintaxis válida y después se prueba para asegurarse de que los nombres de las columnas y tablas incluidas en la fórmula se pueden encontrar en el contexto actual. Si no se puede encontrar alguna columna o tabla especificada por la fórmula, se devuelve un error.
El contexto durante la validación (y las operaciones de recálculo) se determina, según se describió en las secciones anteriores, utilizando las tablas disponibles en el modelo, cualquier relación entre las tablas y cualquier filtro que se haya aplicado.
Por ejemplo, si ha importado recientemente algunos datos en una tabla nueva y no está relacionada con ninguna otra tabla (y no ha aplicado ningún filtro), el contexto actual será todo el conjunto de columnas de la tabla. Si la tabla está vinculada mediante relaciones con otras tablas, el contexto actual incluirá las tablas relacionadas. Si agrega una columna de la tabla a un informe que tiene segmentación de datos y quizá algún filtro de informe, el contexto de la fórmula es el subconjunto de datos de cada celda del informe.
El contexto es un concepto eficaz que también puede dificultar la solución de los problemas con las fórmulas. Se recomienda comenzar con fórmulas y relaciones simples para ver cómo funciona el contexto. La siguiente sección proporciona algunos ejemplos de cómo las fórmulas utilizan tipos diferentes de contexto para devolver resultados de forma dinámica.
Operadores
El lenguaje DAX usa cuatro tipos diferentes de operadores de cálculo en las fórmulas:
- Operadores de comparación para comparar valores y devolver un valor lógico TRUE\FALSE.
- Operadores aritméticos para realizar cálculos aritméticos que devuelven valores numéricos.
- Operadores de concatenación de texto para combinar dos o más cadenas de texto.
- Operadores lógicos que combinan dos o más expresiones para devolver un único resultado.
Para más información detallada sobre los operadores usados en las fórmulas DAX, vea Operadores DAX.
Trabajar con tablas y columnas
Las tablas de los modelos de datos tabulares son similares a las de Excel, pero son diferentes en la forma en que trabajan con datos y con fórmulas:
- Las fórmulas solo funcionan con tablas y columnas, pero no con celdas individuales, referencias a rangos ni matrices.
- Las fórmulas pueden usar relaciones para obtener valores de las tablas relacionadas. Los valores que se recuperan siempre se relacionan con el valor de fila actual.
- No puede tener datos irregulares o "desiguales", como puede haber en una hoja de cálculo de Excel. Cada fila de una tabla debe contener el mismo número de columnas. Sin embargo, puede tener valores vacíos en algunas columnas. Las tablas de datos de Excel y de los modelos tabulares no son intercambiables.
- Debido a que se establece un tipo de datos para cada columna, cada valor de esa columna debe ser del mismo tipo.
Hacer referencia a tablas y columnas en fórmulas
Puede hacer referencia a cualquier tabla y columna mediante el nombre. Por ejemplo, en la siguiente fórmula se muestra cómo hacer referencia a las columnas de dos tablas utilizando el nombre completo :
= SUM('New Sales'[Amount]) + SUM('Past Sales'[Amount])
Al evaluar una fórmula, el diseñador de modelos comprueba primero la sintaxis general y, a continuación, compara los nombres de las columnas y las tablas proporcionadas con las posibles columnas y las tablas del contexto actual. Si el nombre es ambiguo o si no se puede encontrar la columna o tabla, obtendrá un error en su fórmula (una #cadena ERROR en lugar de un valor de datos en las celdas donde el error se produce). Para obtener más información sobre los requisitos de nomenclatura de tablas, columnas y otros objetos, vea la sección Requisitos de nomenclatura en Sintaxis de DAX.
Relaciones de tablas
Al crear relaciones entre las tablas, se obtiene la capacidad de usar los valores relacionados de otras tablas en los cálculos. Por ejemplo, se puede usar una columna calculada para determinar todos los registros de envío relacionados con el distribuidor actual y, luego, sumar los costos de envío de cada uno. En muchos casos, sin embargo, puede no ser necesaria una relación. Puede usar la función LOOKUPVALUE en una fórmula para devolver el valor de result_columnName de la fila que cumple los criterios especificados en los argumentos search_column y search_value.
Muchas funciones de DAX requieren que exista una relación entre las tablas, o entre varias tablas, para localizar las columnas a las que se ha hecho referencia y devolver resultados que tengan sentido. Otras funciones intentarán identificar la relación; sin embargo, para obtener los mejores resultados, debería crear una relación siempre que sea posible. Los modelos de datos tabulares admiten varias relaciones entre tablas. Para evitar confusiones o resultados incorrectos, solo una relación se designa como la relación activa cada vez, si bien esta relación activa se puede cambiar según sea necesario para recorrer las distintas conexiones de los datos en los cálculos. La función USERELATIONSHIP sirve para especificar una o más relaciones que se van a usar en un cálculo específico.
Cuando se usan relaciones, es importante respetar las siguientes reglas de diseño de fórmulas:
Si las tablas están conectadas mediante una relación, hay que garantizar que las dos columnas que se usan como claves tienen valores que coinciden. No se aplica integridad referencial, por lo que es posible tener valores no coincidentes en una columna de clave y seguir creando una relación. Si ocurre esto, debe ser consciente de que la presencia de espacios en blanco o valores no coincidentes podría afectar a los resultados de las fórmulas.
Al vincular tablas en el modelo mediante relaciones, amplía el ámbito, o contexto, en el que se evalúan las fórmulas. Los cambios del contexto como resultado de la incorporación de nuevas tablas, nuevas relaciones o de cambios en la relación activa pueden hacer que los resultados cambien de forma imprevista. Para obtener más información, vea la sección Contexto en este artículo.
Proceso y actualización
Proceso y recálculo son dos operaciones independientes, pero que se relacionan entre sí. Debe entender perfectamente estos conceptos a la hora de diseñar un modelo que contiene fórmulas complejas, cantidades grandes de datos o datos que se obtienen de orígenes de datos externos.
El proceso (actualización) consiste en actualizar los datos de un modelo con datos nuevos de un origen de datos externo.
Elrecálculo es el proceso de actualizar los resultados de las fórmulas para reflejar cualquier cambio en las propias las fórmulas y cualquier cambio en los datos subyacentes. El recálculo puede afectar al rendimiento de las siguientes maneras:
Los valores de una columna calculada se calculan y se almacenan en el modelo. Para actualizar los valores de la columna calculada, debe procesar el modelo mediante uno de los tres comandos de procesamiento: Proceso completo, Procesar datos o Procesar recalc. El resultado de la fórmula se debe recalcular siempre para la columna completa, cada vez que cambia la fórmula.
Los valores calculados mediante medidas se evalúan dinámicamente siempre que un usuario agrega la medida a una tabla dinámica o abre un informe; a medida que el usuario modifique el contexto, los valores devueltos por la medida cambiarán. Los resultados de la medida siempre reflejan el valor más reciente de la memoria caché en memoria.
El proceso y el recálculo no tienen ningún efecto en las fórmulas de seguridad de nivel de fila, a menos que el resultado de un recálculo devuelva un valor diferente, lo que hace que los miembros del rol puedan o no realizar consultas en esa fila.
Actualizaciones
DAX mejora constantemente. Las funciones nuevas y actualizadas se publican con la actualización disponible siguiente, que suele ser mensual. En primer lugar se actualizan los servicios, seguido de las aplicaciones instaladas como Power BI Desktop, Excel, SQL Server Management Studio (SSMS) y la extensión del proyecto de Analysis Services para Visual Studio (SSDT). SQL Server Analysis Services se actualiza en la actualización acumulativa siguiente. Las funciones nuevas se anuncian y se describen en primer lugar en la referencia de funciones DAX, que coincide con las actualizaciones de Power BI Desktop.
No todas las funciones se admiten en versiones anteriores de SQL Server Analysis Services y Excel.
Solución de problemas
Si recibe un error al definir una fórmula, esta podría contener un error sintáctico, un error semánticoo un error de cálculo.
Los errores sintácticos son más fáciles de resolver. Normalmente, se deben a que falta un paréntesis o una coma.
El otro tipo de error sucede cuando la sintaxis es correcta, pero el valor o una columna a la que se hace referencia no tienen sentido en el contexto de la fórmula. Estos errores semánticos y de cálculo se pueden deber a uno de los problemas siguientes:
- La fórmula hace referencia a una columna, tabla o función que no existe.
- La fórmula parece ser correcta, pero cuando el motor de datos captura los datos, detecta un error de coincidencia de tipos y genera un error.
- La fórmula pasa un número o un tipo de argumentos incorrecto a una función.
- La fórmula hace referencia a otra columna que tiene un error y, en consecuencia, sus valores no son válidos.
- La fórmula hace referencia a una columna que no se ha procesado, lo que significa que tiene metadatos pero ningún dato real que se pueda utilizar para los cálculos.
En los cuatro primeros casos, DAX marca la columna completa que contiene la fórmula no válida. En el último caso, DAX hace que la columna se muestre en gris para indicar que se encuentra en estado no procesado.
Aplicaciones y herramientas
Power BI Desktop
Power BI Desktop es una aplicación de creación de informes y modelado de datos gratuita. El diseñador de modelos incluye un editor DAX para crear fórmulas de cálculo DAX.
Power Pivot en Excel
El diseñador de modelos de Power Pivot en Excel incluye un editor DAX para crear fórmulas de cálculo DAX.
Visual Studio
Visual Studio con la extensión de proyectos de Analysis Services (VSIX) se usa para crear proyectos de modelos de Analysis Services. El diseñador de modelos tabulares, instalado con la extensión de proyectos, incluye un editor de DAX.
SQL Server Management Studio
SQL Server Management Studio (SSMS) es una herramienta esencial para trabajar con Analysis Services. SSMS incluye un editor de consultas DAX para consultar modelos tanto tabulares como multidimensionales.
DAX Studio
DAX Studio es una herramienta de cliente de código abierto para crear y ejecutar consultas DAX en Analysis Services, Power BI Desktop y Power Pivot en modelos de Excel.
Tabular Editor
Tabular Editor es una herramienta de código abierto que proporciona una vista jerárquica intuitiva de cada objeto en los metadatos del modelo tabular. Tabular Editor incluye un editor DAX con resaltado de sintaxis, que proporciona una manera sencilla de editar medidas, columnas calculadas y expresiones de tabla calculada.
Recursos de aprendizaje
Al familiarizarse con DAX, lo mejor es usar la aplicación que se va a usar para crear los modelos de datos. Analysis Services, Power BI Desktop y Power Pivot en Excel cuentan con artículos y tutoriales que incluyen lecciones sobre cómo crear medidas, columnas calculadas y filtros de fila mediante DAX. Estos son algunos recursos adicionales:
Uso de DAX en Power BI Desktop ruta de aprendizaje.
La guía definitiva sobre DAX, por Alberto Ferrari y Marco Russo (Microsoft Press). En la segunda edición de esta guía exhaustiva, los modeladores de datos noveles y los profesionales de la inteligencia empresarial encontrarán los conceptos básicos de técnicas de alto rendimiento muy innovadoras.
Comunidad
DAX cuenta con una comunidad muy activa que siempre está dispuesta a compartir sus conocimientos. La comunidad de Microsoft Power BI cuenta con un foro de debate específico para DAX, DAX Commands and Tips.