sintaxis de DAX
En este artículo se describen la sintaxis y los requisitos del lenguaje de expresiones de fórmula DAX.
Requisitos de sintaxis
Una fórmula de DAX siempre comienza con un signo igual (=
). Después del signo igual, se puede proporcionar cualquier expresión que se evalúe como un valor escalar o una que se pueda convertir en un valor escalar. Estos incluyen lo siguiente:
Constante escalar o expresión que usa un operador escalar (
+,-,*,/,>=,...,&&, ...
)Referencias a columnas o tablas. El lenguaje DAX siempre usa tablas y columnas como entradas para funciones, nunca una matriz o un conjunto arbitrario de valores.
Operadores, constantes y valores proporcionados como parte de una expresión.
El resultado de una función y sus argumentos necesarios. Algunas DAX funciones devuelven una tabla en lugar de un escalar y deben encapsularse en una función que evalúe la tabla y devuelva un escalar; a menos que la tabla sea una sola columna, una sola tabla de filas, se trata como un valor escalar.
La mayoría de las funciones DAX requieren uno o varios argumentos, que pueden incluir tablas, columnas, expresiones y valores. Sin embargo, algunas funciones, como PI, no requieren ningún argumento, pero siempre requieren paréntesis para indicar el argumento NULL. Por ejemplo, siempre debe escribir PI(), no PI. También se pueden anidar funciones dentro de otras funciones.
Expresiones. Una expresión puede contener cualquiera o todas las siguientes: operadores, constantes o referencias a columnas.
Por ejemplo, a continuación se muestran todas las fórmulas válidas.
Fórmula | Resultado |
---|---|
= 3 |
3 |
= "Sales" |
Ventas |
= 'Sales'[Amount] |
Si usa esta fórmula en la tabla Ventas, obtendrá el valor de la columna Importe de la tabla Ventas para la fila actual. |
= (0.03 *[Amount]) =0.03 * [Amount] |
Tres por ciento del valor de la columna Cantidad de la tabla actual. Aunque esta fórmula se puede usar para calcular un porcentaje, el resultado no se muestra como un porcentaje a menos que aplique formato en la tabla. |
= PI() |
Valor de la constante pi. |
Las fórmulas pueden comportarse de forma diferente en función de cómo se usen. Siempre debe tener en cuenta el contexto y cómo se relacionan los datos que se usan en la fórmula con otros datos que se pueden usar en el cálculo.
Requisitos de nomenclatura
Un modelo de datos suele contener varias tablas. Juntas las tablas y sus columnas componen una base de datos almacenada en el motor de análisis en memoria (VertiPaq). Dentro de esa base de datos, todas las tablas deben tener nombres únicos. Los nombres de las columnas también deben ser únicos dentro de cada tabla. Todos los nombres de objeto son insensibles a mayúsculas; por ejemplo, los nombres SALES y Sales representan la misma tabla.
Cada columna y medida que agregue a un modelo de datos existente debe pertenecer a una tabla específica. Debe especificar la tabla que contiene la columna implícitamente, al crear una columna calculada dentro de una tabla, o explícitamente, al crear una medida y especificar el nombre de la tabla donde se debe almacenar la definición de medida.
Cuando se usa una tabla o una columna como entrada para una función, generalmente se debe completar el nombre de la columna. El nombre completo de una columna es el nombre de la tabla, seguido del nombre de columna entre corchetes cuadrados. Por ejemplo, "Ventas de EE. UU."[Productos]. Siempre se requiere un nombre completo cuando se hace referencia a una columna en los contextos siguientes:
Como argumento de la función,
VALUES
Como argumento para las funciones,
ALL
oALLEXCEPT
En un argumento de filtro para las funciones,
CALCULATE
oCALCULATETABLE
Como argumento de la función,
RELATEDTABLE
Como argumento para cualquier función de inteligencia de tiempo
Un nombre de columna incompleto es simplemente el nombre de la columna, entre corchetes: por ejemplo, [Importe de ventas]. Por ejemplo, al hacer referencia a un valor escalar de la misma fila de la tabla actual, puede utilizar el nombre de columna no cualificado.
Si el nombre de una tabla contiene espacios, palabras clave reservadas o caracteres no permitidos, debe incluir el nombre de la tabla entre comillas simples. También debe incluir nombres de tabla entre comillas si el nombre contiene caracteres fuera del intervalo de caracteres alfanumérico ANSI, independientemente de si la configuración regional admite o no el juego de caracteres. Por ejemplo, si abre un libro que contiene nombres de tabla escritos en caracteres cirílicos, como "Таблица", el nombre de la tabla debe incluirse entre comillas, aunque no contenga espacios.
Nota
Para que sea más fácil escribir los nombres completos de las columnas, use la característica Autocompletar en el editor de fórmulas.
Tablas
Los nombres de tabla son necesarios siempre que la columna sea de una tabla diferente a la tabla actual. Los nombres de tabla deben ser únicos dentro de la base de datos.
Los nombres de tabla deben incluirse entre comillas simples si contienen espacios, otros caracteres especiales o caracteres alfanuméricos no en inglés.
Medidas
Los nombres de medida siempre deben estar entre corchetes.
Los nombres de medida pueden contener espacios.
Cada nombre de medida debe ser único dentro de un modelo. Por lo tanto, el nombre de la tabla es opcional delante de un nombre de medida al hacer referencia a una medida existente. Sin embargo, al crear una medida, siempre debe especificar una tabla donde se almacenará la definición de medida.
Columnas
Los nombres de columna deben ser únicos en el contexto de una tabla; sin embargo, varias tablas pueden tener columnas con los mismos nombres (la desambiguación viene con el nombre de la tabla).
En general, se puede hacer referencia a columnas sin hacer referencia a la tabla base a la que pertenecen, excepto cuando puede haber un conflicto de nombres para resolver o con determinadas funciones que requieren que los nombres de columna estén completos.
Palabras clave reservadas
Si el nombre que usa para una tabla es el mismo que una palabra clave reservada de Analysis Services, se genera un error y debe cambiar el nombre de la tabla. Sin embargo, puede usar palabras clave en nombres de objeto si el nombre de objeto está entre corchetes (para columnas) o comillas (para tablas).
Nota
Las comillas se pueden representar mediante varios caracteres diferentes, en función de la aplicación. Si pega fórmulas de un documento externo o página web, asegúrese de comprobar el código ASCII del carácter que se usa para abrir y cerrar comillas, para asegurarse de que son iguales. De lo contrario, es posible que DAX no pueda reconocer los símbolos como comillas, lo que hace que la referencia no sea válida.
Caracteres especiales
Los siguientes caracteres y tipos de caracteres no son válidos en los nombres de tablas, columnas o medidas:
Espacios iniciales o finales; a menos que los espacios se incluyan entre delimitadores de nombre, corchetes o apóstrofes únicos.
Caracteres de control
Los siguientes caracteres que no son válidos en los nombres de los objetos:
.,;':/\\*|?&%$!+=()[]{}<>
Ejemplos de nombres de objeto
En la tabla siguiente se muestran ejemplos de algunos nombres de objeto:
Tipos de objeto | Ejemplos | Comentario |
---|---|---|
Nombre de tabla | Ventas | Si el nombre de la tabla no contiene espacios u otros caracteres especiales, no es necesario incluir el nombre entre comillas. |
Nombre de tabla | "Ventas de Canadá" | Si el nombre contiene espacios, pestañas u otros caracteres especiales, incluya el nombre entre comillas simples. |
Nombre completo de la columna | Ventas[Importe] | El nombre de la tabla precede al nombre de columna y el nombre de columna se incluye entre corchetes. |
Nombre completo de la medida | Ventas[Beneficio] | El nombre de la tabla precede al nombre de la medida y el nombre de la medida se incluye entre corchetes. En determinados contextos, siempre se requiere un nombre cualificado completo. |
Nombre de columna incompleto | [Importe] | El nombre no completo es simplemente el nombre de la columna, entre corchetes. Entre los contextos en los que se puede usar el nombre incompleto, se incluyen las fórmulas de una columna calculada en la misma tabla o en una función de agregación que está buscando en la misma tabla. |
Columna completamente cualificada en una tabla con espacios | "Ventas de Canadá"[Cantidad] | El nombre de la tabla contiene espacios, por lo que debe estar rodeado de comillas simples. |
Otras restricciones
La sintaxis necesaria para cada función y el tipo de operación que puede realizar varía en gran medida en función de la función. Sin embargo, en general, las reglas siguientes se aplican a todas las fórmulas y expresiones:
DAX fórmulas y expresiones no pueden modificar ni insertar valores individuales en tablas.
No se pueden crear filas calculadas mediante DAX. Solo puede crear columnas y medidas calculadas.
Al definir columnas calculadas, se pueden anidar funciones en cualquier nivel.
DAX tiene varias funciones que devuelven una tabla. Normalmente, se usan los valores devueltos por estas funciones como entrada para otras funciones, que requieren una tabla como entrada.
operadores y constantes de DAX
En la tabla siguiente se enumeran los operadores admitidos por DAX. Para obtener más información sobre la sintaxis de los operadores individuales, consulte DAX operadores.
Tipo de operador | Símbolo y uso |
---|---|
Operador de paréntesis | () orden de precedencia y agrupación de argumentos |
Operadores aritméticos | + (adición)- (resta)* (multiplicación)/ (división)^ (exponenciación) |
Operadores de comparación | = (igual a)> (mayor que)< (menor que)>= (mayor o igual que)<= (menor o igual que)<> (no igual a) |
Operador de concatenación de texto | & (concatenación) |
Operadores lógicos | && (y)|| (o) |
Tipos de datos
No es necesario modificar, convertir o especificar el tipo de datos de una columna o valor que use en una fórmula de DAX. Cuando se usan datos en una fórmula de DAX, DAX identifica automáticamente los tipos de datos en columnas a las que se hace referencia y de los valores que escribe y realiza conversiones implícitas cuando sea necesario para completar la operación especificada.
Por ejemplo, si intenta agregar un número a un valor de fecha, el motor interpretará la operación en el contexto de la función y convertirá los números en un tipo de datos común y, a continuación, presentará el resultado en el formato previsto, una fecha.
Sin embargo, existen algunas limitaciones en los valores que se pueden convertir correctamente. Si un valor o una columna tienen un tipo de datos que no es compatible con la operación actual, DAX devuelve un error. Además, DAX no proporciona funciones que le permitan cambiar, convertir o modificar explícitamente el tipo de datos de los datos existentes que ha importado a un modelo de datos.
Importante
DAX no admite el uso del tipo de datos variante. Por lo tanto, cuando se cargan o importan datos en un modelo de datos, se espera que los datos de cada columna sean generalmente de un tipo de datos coherente.
Algunas funciones devuelven valores escalares, incluidas las cadenas, mientras que otras funciones funcionan con números, números enteros y números reales, fechas y horas. El tipo de datos necesario para cada función se describe en la sección DAX funciones.
Puede usar tablas que contienen varias columnas y varias filas de datos como argumento para una función. Algunas funciones también devuelven tablas, que se almacenan en memoria y se pueden usar como argumentos para otras funciones.
Fecha y hora
DAX almacena valores de fecha y hora mediante el tipo de datos datetime usado por Microsoft SQL Server. El formato de fecha y hora usa un número de punto flotante en el que los valores de fecha corresponden a la parte entera que representa el número de días desde el 30 de diciembre de 1899. Los valores de hora corresponden a la parte decimal de un valor de fecha donde horas, minutos y segundos se representan mediante fracciones decimales de un día. Las funciones de fecha y hora de DAX convierten implícitamente argumentos al tipo de datos de fecha y hora.
Nota
El valor dateTime máximo exacto admitido por DAX es el 31 de diciembre de 9999 00:00:00.
Literal de fecha y hora
A partir de la versión de agosto de 2021 de Power BI Desktop, los valores de fecha y fecha y hora de DAX se pueden especificar como un literal en el formato dt"YYYY-MM-DD"
, dt"YYYY-MM-DDThh:mm:ss"
o dt"YYYY-MM-DD hh:mm:ss"
. Cuando se especifica como literal, el uso de las funciones DATE, TIME, DATEVALUE, TIMEVALUE en la expresión no es necesario.
Por ejemplo, la expresión siguiente usa funciones DATE y TIME para filtrar por OrderDate:
EVALUATE
FILTER (
FactInternetSales,
[OrderDate] > (DATE(2015,1,9) + TIME(2,30,0)) &&[OrderDate] < (DATE(2015,12,31) + TIME(11,59,59))
)
La misma expresión de filtro se puede especificar como literal:
EVALUATE
FILTER (
FactInternetSales,
[OrderDate] > dt"2015-1-9T02:30:00" && [OrderDate] < dt"2015-12-31T11:59:59"
)
Nota
El formato literal de tipo DAX para fecha y fecha y hora no se admite en todas las versiones de Power BI Desktop, Analysis Services y Power Pivot en Excel. Las funcionalidades nuevas y actualizadas de DAX suelen introducirse en Power BI Desktop y, a continuación, se incluyen más adelante en Analysis Services y Power Pivot en Excel.