Documentos de Académico
Documentos de Profesional
Documentos de Cultura
EDUARDO SA
Sintaxis DAX
En este artículo se describen la sintaxis y los requisitos del lenguaje de expresiones
de fórmula DAX.
Requisitos de la sintaxis
Una fórmula 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. que incluyen la siguiente
información:
Fórmula Resultado
=3 3
="Sales" Sales
=(0,03 Tres por ciento del valor de la columna Importe de la tabla actual.
*[Amount])
Aunque esta fórmula se puede usar para calcular un porcentaje, el
=0,03 *[Amount] resultado no se muestra como un porcentaje a menos que se aplique el
formato en la tabla.
Requisitos de nomenclatura
A menudo, un modelo de datos contiene varias tablas. Las tablas y sus columnas, de
forma conjunta, componen una base de datos almacenada en el motor de análisis
en memoria (VertiPaq). En esa base de datos, todas las tablas deben tener nombres
únicos. Los nombres de las columnas también deben ser únicos en cada tabla. Los
nombres de objeto no distinguen mayúsculas de minúsculas; por ejemplo, los
nombres SALES y Sales representarían la misma tabla.
Cuando se usa una tabla o una columna como entrada para una función,
generalmente se debe calificar el nombre de la columna. El nombre completo de
una columna es el nombre de la tabla, seguido del nombre de la columna entre
corchetes: por ejemplo, 'Ventas de EE. UU.'[Productos]. Siempre se requiere un
nombre completo cuando se hace referencia a una columna en los contextos
siguientes:
Tablas
Los nombres de tabla son necesarios siempre que la columna sea de una tabla
distinta de la actual. Los nombres de tabla deben ser únicos en la base de
datos.
Los nombres de tabla deben ir entre comillas simples si contienen espacios,
otros caracteres especiales o cualquier carácter alfanumérico que no sea el
inglés.
Medidas
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 las columnas sin hacer referencia a la tabla
base a la que pertenecen, excepto cuando pueda haber un conflicto de nombres
para resolver o con ciertas funciones que requieren que los nombres de columna
estén completos.
Si el nombre que se utiliza para una tabla es el mismo que el de una palabra clave
reservada de Analysis Services, se genera un error y se debe cambiar el nombre de
la tabla. Sin embargo, puede utilizar palabras clave en nombres de objetos si el
nombre del objeto está entre corchetes (en las columnas) o con comillas (en las
tablas).
Caracteres especiales
.,;':/\|?&%$!+=()[]{}<>
Otras restricciones
La sintaxis necesaria para cada función y el tipo de operación que puede realizar
varían en gran medida dependiendo de la función. Pero, por lo general, las reglas
siguientes se aplican a todas las fórmulas y expresiones:
- (resta/
signo)
* (multiplicación)
/ (división)
^ (exponenciación)
|| (o)
Tipos de datos
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 es
incompatible con la operación actual, DAX devuelve un error. Además, DAX no
proporciona funciones que permitan cambiar o convertir explícitamente el tipo de
datos de los datos existentes que se han importado en un modelo de datos.
Se pueden usar tablas que contengan 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.
Operadores DAX
Tipos de operadores
Operadores aritméticos
Nota
El signo más puede funcionar como operador binario y como operador unario. Un
operador binario requiere números en ambos lados del operador y realiza la
suma. Cuando se usan valores en una fórmula DAX a ambos lados del operador
binario, DAX intenta convertir los valores a tipos de datos numéricos si aún no son
números. En cambio, el operador unario se puede aplicar a cualquier tipo de
argumento. El signo más no afecta al tipo o al valor y simplemente se pasa por alto,
mientras que el operador menos crea un valor negativo, si se aplica a un valor
numérico.
Operadores de comparación
Puede comparar dos valores con los siguientes operadores. Cuando se comparan
dos valores con estos operadores, el resultado es un valor lógico, ya sea TRUE o
FALSE.
Todos los operadores de comparación, excepto ==, tratan BLANK como equivalente
al número 0, una cadena vacía "", DATE(1899, 12, 30), o FALSE. Como resultado,
[Column] = 0 será true cuando el valor de [Column] sea 0 o BLANK. Por el contrario,
[Column] == 0 solo es true cuando el valor de [Column] es 0.
Use la "Y comercial" (&) para unir, o concatenar, dos o más cadenas de texto para
generar un único fragmento de texto.
Operador de
texto Significado Ejemplo
& ("Y comercial") Conecta, o concatena, dos valores para generar un valor de [Region] & ", " &
texto continuo. [City]
Operadores lógicos
Use los operadores lógicos (&&) y (||) para combinar expresiones para generar un
solo resultado.
Operador de
texto Significado Ejemplos
&& (doble Y Crea una condición AND entre dos expresiones que ([Region] = "France")
comercial) tienen ambas un resultado booleano. Si ambas && ([BikeBuyer] =
expresiones devuelven TRUE, la combinación de las "yes"))
expresiones también devuelve TRUE; de lo contrario, la
combinación devuelve FALSE.
||(símbolo de Crea una condición OR entre dos expresiones lógicas. Si (([Region] = "France")
doble barra alguna de las expresiones devuelve TRUE, el resultado || ([BikeBuyer] =
vertical) es TRUE; solo cuando ambas expresiones son FALSE, el "yes"))
resultado es FALSE.
Una expresión evalúa los operadores y los valores en un orden específico. Todas las
expresiones comienzan siempre con un signo igual (=). Este signo igual indica que
los caracteres tras él constituyen una expresión.
Después del signo igual están los elementos que se van a calcular (los operandos),
que se separan con operadores de cálculo. Las expresiones siempre se leen de
izquierda a derecha, pero el orden en el que los elementos se agrupan se puede
controlar en cierto grado mediante el uso de paréntesis.
^ Exponenciación
=,==,<,>,<=,>=,<> Comparación
=5+2*3
=(5+2)*3
=-2^2
Para garantizar que el operador de inversión del signo se aplica primero al valor
numérico, se pueden usar paréntesis para controlar los operadores, como se
muestra en el siguiente ejemplo. El resultado de esta expresión es 4.
= (-2)^2
Compatibilidad
DAX controla y compara fácilmente varios tipos de datos, de forma muy similar a
como lo hace Microsoft Excel, pero el motor de cálculo subyacente se basa en
SQL Server Analysis Services, con lo cual proporciona las características avanzadas
adicionales de los almacenes de datos relacionales, incluida una mayor
compatibilidad con los tipos de fecha y hora. Por lo tanto, es posible que, en algunos
casos, los resultados de los cálculos o el comportamiento de las funciones no sean
los mismos que en Excel. Además, DAX admite más tipos de datos que Excel. En esta
sección se describen las principales diferencias.
Por ejemplo, supongamos que tiene dos números que quiere combinar. Un número
es el resultado de una fórmula, como =[Price] * .20, y dicho resultado puede
contener muchos decimales, mientras que el otro número es un entero que se ha
proporcionado como valor de cadena.
Tipo de datos del lado izquierdo Tipo de datos del lado derecho
Numérica Numérica
Booleano Booleano
Cadena Cadena
Booleano Booleano
Cadena Cadena
Moneda Moneda
Por lo tanto, siempre que copie y pegue fórmulas de Excel, asegúrese de revisarla
cuidadosamente, ya que es posible que algunos operadores o elementos de las
fórmulas no sean válidos. Cuando tenga dudas sobre el orden en el que se realizan
las operaciones, se recomienda usar paréntesis para controlar el orden de las
operaciones y acabar con cualquier ambigüedad en el resultado.
Consultas DAX
Con las consultas DAX, puede consultar y devolver los datos definidos mediante una
expresión de tabla. Los clientes de informes crean consultas DAX cada vez que un
campo se coloca en una superficie del informe o cuando se aplica un filtro o cálculo.
Las consultas DAX también se pueden crear y ejecutar en SQL Server Management
Studio (SSMS) y en herramientas de código abierto como DAX Studio. Las consultas
DAX que se ejecutan en SSMS y DAX Studio devuelven los resultados como una
tabla
Palabras clave
EVALUATE (necesario)
En el nivel más básico, una consulta DAX es una instrucción EVALUATE que
contiene una expresión de tabla. Sin embargo, una consulta puede contener varias
instrucciones EVALUATE.
Sintaxis
EVALUATE <table>
Argumentos
Periodo Definición
Ejemplo
EVALUATE(
'Internet Sales'
)
Devuelve todas las filas y columnas de la tabla Ventas por Internet, como una tabla.
ORDER BY (opcional)
La palabra clave opcional ORDER BY define una o varias expresiones que se usan
para ordenar los resultados de la consulta. Cualquier expresión que se puede evaluar
para cada fila del resultado es válida.
Sintaxis
EVALUATE <table>
[ORDER BY {<expression> [{ASC | DESC}]}[, …]
Argumentos
Periodo Definición
Ejemplo
EVALUATE(
'Internet Sales'
)
ORDER BY
'Internet Sales'[Order Date]
Devuelve todas las filas y columnas de la tabla Ventas por Internet, ordenadas por
Fecha de pedido, como una tabla.
START AT (opcional)
Sintaxis
EVALUATE <table>
[ORDER BY {<expression> [{ASC | DESC}]}[, …]
[START AT {<value>|<parameter>} [, …]]]
Argumentos
Periodo Definición
parameter Nombre de un parámetro en una instrucción XMLA con el carácter @ como prefijo.
Los argumentos START AT tienen una correspondencia uno a uno con las columnas
de la cláusula ORDER BY. En la cláusula START AT puede haber tantos argumentos
como en la cláusula ORDER BY, pero no más. El primer argumento START AT define
el valor inicial de la columna 1 de las columnas ORDER BY. El segundo argumento
START AT define el valor inicial de la columna 2 de las columnas ORDER BY dentro
de las filas que cumplen el primer valor de la columna 1.
Ejemplo
EVALUATE(
'Internet Sales'
)
ORDER BY
'Internet Sales'[Sales Order Number]
START AT "SO7000"
Devuelve todas las filas y columnas de la tabla Internet Sales, ordenadas por Número
de pedido de venta, empezando en SO7000.
DEFINE (opcional)
La palabra clave opcional DEFINE define las entidades que solo existen mientras
dura la consulta. Las definiciones son válidas para todas las instrucciones
EVALUATE. Las entidades pueden ser variables, medidas, tablas y columnas. Las
definiciones pueden hacer referencia a otras definiciones que aparecen antes o
después de la definición actual. Las definiciones normalmente preceden a la
instrucción EVALUATE.
Sintaxis
[DEFINE { MEASURE <tableName>[<name>] = <expression> }
{ VAR <name> = <expression>}]
EVALUATE <table>
Argumentos
Periodo Definición
tableName Nombre de una tabla existente que usa la sintaxis DAX estándar. No puede ser una
expresión.
expression Cualquier expresión DAX que devuelve un valor escalar único. La expresión puede usar
cualquiera de las medidas definidas. La expresión debe devolver una tabla. Si se
requiere un valor escalar, ajuste el escalar dentro de una función ROW() para generar
una tabla.
VAR Expresión opcional como una variable con nombre. Una expresión VAR se puede pasar
como argumento a otras expresiones.
Ejemplo
DEFINE
MEASURE 'Internet Sales'[Internet Total Sales] = SUM('Internet Sales'[Sales
Amount])
EVALUATE
SUMMARIZECOLUMNS
(
'Date'[Calendar Year],
TREATAS({2013, 2014}, 'Date'[Calendar Year]),
"Total Sales", [Internet Total Sales],
"Combined Years Total Sales", CALCULATE([Internet Total Sales],
ALLSELECTED('Date'[Calendar Year]))
)
ORDER BY [Calendar Year]
Devuelve como una tabla las ventas totales calculadas para los años 2013 y 2014, y
las ventas totales calculadas combinadas para los años 2013 y 2014. La medida de
la instrucción DEFINE, Internet Total Sales, se usa tanto en las expresiones Total Sales
como en Combined Years Total Sales.
Para hacer referencia a los parámetros XMLA, debe añadir un carácter @ como
prefijo al nombre del parámetro. Por lo tanto, cualquier lugar de la sintaxis donde
se permite un valor se puede reemplazar por una llamada de parámetro. Todos los
parámetros XMLA se escriben como texto. Importante
Importante
EVALUATE <table>
Convenciones de nomenclatura de
parámetros DAX
Nombres de parámetro:
Parámetro Descripción
expression Cualquier expresión DAX que devuelve un único valor escalar, donde la expresión
se va a evaluar varias veces (para cada fila o contexto).
valor Cualquier expresión DAX que devuelve un único valor escalar, donde la expresión
se va a evaluar exactamente una vez antes del resto de operaciones.
tableName Nombre de una tabla existente que usa la sintaxis DAX estándar. No puede ser una
expresión.
columnName Nombre de una columna existente, con la sintaxis DAX estándar, normalmente
completa. No puede ser una expresión.
ties Enumeración que se usa para determinar el control de los valores de empate.
Parámetro Descripción
prefixing Los nombres de los parámetros se pueden calificar aún más con un prefijo que
describa cómo se usa el argumento y cómo evitar la lectura ambigua de los
parámetros. Por ejemplo: