Traducido del inglés al español - www.onlinedoctranslator.
com
CALCULAR (SUM (Ventas [Cantidad])
))
* 'Producto' [Precio unitario] *
Cliente [Cashback%]
)
Las versiones "media" y "mejorada" del
Cashback Sim. La medida se puede adaptar fácilmente para utilizar
las medidas existentes en los cálculos más íntimos. De hecho, la
versión "mejorada" utiliza unCALCULAR función para calcular la
suma de Cantidad de ventas] para una combinación dada de Precio
unitario y Devolución de dinero %, como lo haría una referencia de
medida. Debe considerar este enfoque para escribir código
eficiente que sea más fácil de mantener. Sin embargo, es posible
una versión más eficiente eliminando los iteradores anidados.
Nota
Nota Una definición de medida de diez incluye funciones de agregación como
SUMA. Con la excepción deDISTINCTCOUNT, las funciones de agregación simples
son solo una sintaxis más corta para un iterador. Por ejemplo,SUMA
invoca internamente SUMX. Por lo tanto, una referencia de medida en un iterador
de diez implica la ejecución de otro iterador anidado con una transición de
contexto en el medio. Cuando esto es requerido por la naturaleza del cálculo, este
es un costo computacional necesario. Cuando los iteradores anidados son
adicionales como los dos anidadosSUMA / SUMA de El Cashback Sim. (mejorado)
medida, entonces se puede considerar una consolidación del cálculo para
optimizar el rendimiento; sin embargo, esto podría afectar la legibilidad y
reutilización de la medida.
La siguiente versión "rápida" del Cashback Sim. La medida
optimiza el rendimiento, a costa de reducir la capacidad de
reutilizar la lógica empresarial de las medidas existentes:
Haga clic aquí para ver la imagen del código
DEFINIR
MEDIDA Ventas [Cashback Sim. (rápido)] =
SUMX (
Ventas,
Cantidad de ventas]
* RELATED ('Producto' [Unidad
Precio] )
* RELACIONADO (
Cliente [Cashback%])
)
EVALUAR
TOPN (
502,
RESUMEN COLUMNAS (
ROLLUPADDISSUBTOTAL (
'Cliente' [País],
"IsGrandTotalRowTotal"),
"Cashback Sim. (Rápido)",
'Sales' [Cashback Sim. (rápido)]
),
[IsGrandTotalRowTotal], 0,
'Cliente' [País], 1
)
PEDIR POR
[IsGrandTotalRowTotal] DESC,
'Cliente' [País]
Figura 20-41. muestra la información de tiempos del servidor
de la versión “rápida”, que ahorra más del 50% del tiempo de
ejecución en comparación con las versiones “media” y
“mejorada”.
Figura 20-41. Serv er Tim in gsru n in the qu er y for the
Cashback Sim. (rápido)M ea su r epor tado por pais.
La medida con un solo iterador sin transiciones de contexto
genera la siguiente consulta de motor de almacenamiento simple,
reportada en la línea 2 de Figura 20-41.:
Haga clic aquí para ver la imagen del código
CON
$ Expr0: = ((CAST (PFCAST ('Ventas de
DaxBook' [Cantidad] COMO INT) COMO REAL)
* PFCAST (
'Producto DaxBook' [Precio unitario] COMO REAL)
)
* PFCAST (
'Cliente de DaxBook' [Reembolso] COMO REAL))
SELECCIONAR
'Cliente de DaxBook' [País], SUM (@ $
Expr0)
DESDE 'DaxBook Sales'
EXTERIOR IZQUIERDO ÚNASE A 'Cliente de DaxBook'
EN 'DaxBook
Ventas '[CustomerKey] =' Cliente de
DaxBook '[CustomerKey]
EXTERIOR IZQUIERDO ÚNASE A 'Producto DaxBook'
EN 'DaxBook
Ventas '[ProductKey] =' Producto
DaxBook '[ProductKey];
Utilizando el RELACIONADO la función no requiere ninguna
CallbackDataID. De hecho, la única consecuencia de
RELACIONADO es que impone una combinación en el motor de
almacenamiento para permitir el acceso a la columna relacionada,
que normalmente tiene un impacto de rendimiento menor en
comparación con un CallbackDataID. Sin embargo, no se sugiere la
versión “rápida” de la medida a menos que sea fundamental para
obtener la última mejora adicional del desempeño y mantener la
materialización en un nivel mínimo.
Evitar filtros de tabla para DISTINCTCOUNT
Ya mencionamos que filtrar argumentos en
CALCULAR/Calculable las funciones deben aplicarse a columnas en
lugar de tablas. El objetivo de este ejemplo sobre el mismo tema es
mostrarle un patrón de plan de consulta adicional que puede
encontrar en los tiempos del servidor. Un efecto secundario de un
filtro de tabla es que requiere una gran materialización en el motor
de almacenamiento, para permitir que el motor de fórmulas calcule
el resultado. Sin embargo, para las expresiones no aditivas, el plan
de consulta puede generar una consulta del motor de
almacenamiento para cada elemento incluido en la granularidad del
resultado. losDISTINCTCOUNT
la agregación es un ejemplo simple y común de una
expresión no aditiva.
Por ejemplo, considere el informe en Figura 20-42. que muestra
la cantidad de clientes que realizaron compras superiores a $ 1,000
(Clientes 1k) para cada nombre de producto.
Figura 20-42. Cu stom er sw ith pu r ch a se montas sobre $ 1, 000 por
cada pr odu cto.
La condición del filtro en el Clientes 1k La medida requiere dos
columnas. La forma menos eficiente de implementar tal condición
es mediante el uso de un filtro sobre el
Ventas mesa. La siguiente consulta calcula el
Clientes 1k medida en el informe anterior, generando los resultados
de los tiempos del servidor visibles en Figura 20-43.:
Haga clic aquí para ver la imagen del código
DEFINIR
MEASURE Ventas [Clientes 1k (lento)] =
CALCULAR (
DISTINCTCOUNT (
Ventas [CustomerKey]),
FILTRO (
Ventas,
Cantidad de ventas] *
Ventas [precio neto]> 1000
)
)
EVALUAR
TOPN (
502,
RESUMEN COLUMNAS (
ROLLUPADDISSUBTOTAL (
'Producto' [Nombre del producto],
"IsGrandTotalRowTotal"),
"Clientes_1k__slow_",
'Ventas' [Clientes 1k (lento)]
),
[IsGrandTotalRowTotal], 0,
'Producto' [Nombre del producto], 1
)
PEDIR POR
[IsGrandTotalRowTotal] DESC,
'Producto' [Nombre del producto]
Figura 20-43. Serv er Tim in gsru n in the qu er y for the
Clientes 1k (s bajo) la medida.
Esta consulta genera una gran cantidad de consultas del motor de
almacenamiento: una consulta para cada producto incluido en el
resultado. Debido a que cada consulta del motor de almacenamiento
requiere de 100 a 200 milisegundos, hay un total de varios minutos de
costo de CPU y la latencia es inferior a un minuto solo por el paralelismo
del motor de almacenamiento.
La primera consulta xmSQL en la línea 2 de Figura 20-43.
devuelve la lista de nombres de productos, incluidos Cantidad
y Precio neto para las transacciones de venta de ese producto.
De hecho, aunque solo hay 1.091 productos utilizados al
menos una vez en elVentas en transacciones con un monto
superior a $ 1,000, la granularidad de la caché de datos es
mayor porque también incluye detalles adicionales además del
nombre del producto, lo que devuelve más filas para el mismo
producto:
Haga clic aquí para ver la imagen del código
SELECCIONE
'Producto DaxBook' [Nombre del producto],
'Ventas de DaxBook' [Cantidad], 'Ventas de
DaxBook' [Precio neto] DE 'Ventas de
DaxBook'
EXTERIOR IZQUIERDO ÚNASE A 'Producto DaxBook'
EN 'DaxBook
Ventas '[ProductKey] =' Producto
DaxBook '[ProductKey]
DÓNDE
(COALESCE ((CAST (PFCAST (
'Ventas de DaxBook' [Cantidad] COMO INT) COMO
REAL)
* PFCAST (
'Ventas de DaxBook' [Precio neto] COMO REAL))
)
> COALESCE (1000.000000)
);
Hay 1.091 consultas xmSQL que son muy similares a la de la
línea 6 de Figura 20-43. y devuelve un valor único obtenido con
una agregación de recuento distinta. En este caso, la condición
de filtro tiene todas las combinaciones de
Cantidad y Precio neto que devuelven un valor mayor que
1,000 para el producto Adventure Works 52 LCD HDTV
X790W Silver:
Haga clic aquí para ver la imagen del código
SELECCIONE
DCOUNT ('Ventas de DaxBook' [CustomerKey]
)
DESDE 'DaxBook Sales'
EXTERIOR IZQUIERDO ÚNASE A 'Producto DaxBook'
EN 'DaxBook
Ventas '[ProductKey] =' Producto
DaxBook '[ProductKey]
DÓNDE
(COALESCE ((CAST (PFCAST ('DaxBook
Sales' [Cantidad] AS INT) COMO REAL)
* PFCAST (
'Ventas de DaxBook' [Precio neto] COMO REAL))
)
> COALESCE (1000.000000)
)
VAND (
'Producto DaxBook' [Nombre del producto],
'Ventas DaxBook' [Cantidad], 'Ventas
DaxBook' [Precio neto])
EN {
('Adventure Works 52 "LCD HDTV X790W
Silver', 2, 1592.200000),
('Adventure Works 52 "LCD HDTV X790W
Silver', 4, 1432.980000),
('Adventure Works 52 "LCD HDTV X790W
Silver', 1, 1273.760000),
('Adventure Works 52 "LCD HDTV X790W
Silver', 3, 1480.746000),
('Adventure Works 52 "LCD HDTV X790W
Silver', 4, 1512.590000),
('Adventure Works 52 "LCD HDTV X790W
Silver', 3, 1592.200000),
('Adventure Works 52 "LCD HDTV X790W
Silver', 3, 1353.370000),
('Adventure Works 52 "LCD HDTV X790W
Silver', 4, 1273.760000),
('Adventure Works 52 "LCD HDTV X790W
Silver', 1, 1480.746000),
('Adventure Works 52 "LCD HDTV X790W
Silver', 1, 1592.200000)
. . [24 tuplas en total, no todas
desplegado]};
De hecho, la siguiente consulta xmSQL en la línea 10 de
Figura 20-43. solo difiere de este último en la condición de
filtro final, que incluye combinaciones válidas de
Cantidad y Precio neto para el producto Contoso Washer &
Dryer 21in E210 Blue:
Haga clic aquí para ver la imagen del código
SELECCIONE
DCOUNT ('Ventas de DaxBook' [CustomerKey]
)
DESDE 'DaxBook Sales'
EXTERIOR IZQUIERDO ÚNASE A 'Producto DaxBook'
EN 'DaxBook
Ventas '[ProductKey] =' Producto
DaxBook '[ProductKey]
DÓNDE
(COALESCE ((CAST (PFCAST ('DaxBook
Sales' [Cantidad] AS INT) COMO REAL)
* PFCAST (
'Ventas de DaxBook' [Precio neto] COMO REAL))
)
> COALESCE (1000.000000)
)
VAND (
'Producto DaxBook' [Nombre del producto],
'Ventas DaxBook' [Cantidad], 'Ventas
DaxBook' [Precio neto])
EN {
('Lavadora y secadora Contoso de 21 pulgadas
E210 Azul ', 2, 1519.050000),
('Lavadora y secadora Contoso de 21 pulgadas
E210 Azul ', 2, 1279.200000),
('Lavadora y secadora Contoso de 21 pulgadas
E210 Azul ', 2, 1359.150000),
('Lavadora y secadora Contoso de 21 pulgadas
E210 Azul ', 4, 1487.070000),
('Lavadora y secadora Contoso de 21 pulgadas
E210 Azul ', 3, 1439.100000),
('Lavadora y secadora Contoso de 21 pulgadas
E210 Azul ', 3, 1519.050000),
('Lavadora y secadora Contoso de 21 pulgadas
E210 Azul ', 3, 1359.150000),
('Lavadora y secadora Contoso de 21 pulgadas
E210 Azul ', 2, 1599.000000),
('Lavadora y secadora Contoso de 21 pulgadas
E210 Azul ', 1, 1439.100000),
('Lavadora y secadora Contoso de 21 pulgadas
E210 Azul ', 3, 1279.200000)
. . [24 tuplas en total, no todas
desplegado]};
La presencia de varias consultas de motor de almacenamiento similares
también es visible en el panel Plan de consultas que se muestra en
Figura 20-44.. Cada fila que comienza en la línea 15 corresponde a un único
caché de datos con solo una columna producida por una de las consultas
del motor de almacenamiento descritas anteriormente.
Figura 20-44. Qu er y Pla n pa neru n en la qu er ia para
Clientes 1k (s bajo).
La presencia del filtro de tabla aplicado al contexto del filtro obliga a
un plan de consulta que no es eficiente. En este caso, un filtro de tabla
produce múltiples consultas del motor de almacenamiento en lugar de
una única materialización grande. Sin embargo, la optimización
requerida es siempre la misma: los filtros de columna son mejores que
los filtros de tabla en
CALCULAR y Calculable. La versión optimizada del
Cliente 1k medida aplica un filtro sobre
las dos columnas Cantidad y Precio neto, utilizando
MANTENER FILTROS para utilizar el filtro semántico de la
medida original. La siguiente consulta produce los resultados
de tiempos del servidor visibles enFigura 20-45.:
Haga clic aquí para ver la imagen del código
DEFINIR
MEASURE Ventas [Clientes 1k (rápido)] =
CALCULAR (
DISTINCTCOUNT (
Ventas [CustomerKey]),
KEEPFILTERS (
FILTRO (
TODOS (
Cantidad de ventas],
Ventas [precio neto]
),
Cantidad de ventas] *
Ventas [precio neto]> 1000
)
)
)
EVALUAR
TOPN (
502,
RESUMEN COLUMNAS (
ROLLUPADDISSUBTOTAL (
'Producto' [Nombre del producto],
"IsGrandTotalRowTotal"),
"Clientes_1k__fast_",
'Ventas' [Clientes 1k (rápido)]
),
[IsGrandTotalRowTotal], 0,
'Producto' [Nombre del producto], 1
)
PEDIR POR
[IsGrandTotalRowTotal] DESC,
'Producto' [Nombre del producto]
Figura 20-45. Ser v er Tim in gsru n in the qu er y for Clientes 1k (rápido).
El filtro de columna en CALCULAR simplifica el plan de consultas,
que ahora solo requiere dos consultas del motor de
almacenamiento, una para cada nivel de granularidad del resultado
(un producto frente al total de todos los productos). La siguiente es
la consulta xmSQL en la línea 4 enFigura 20-45.:
Haga clic aquí para ver la imagen del código
SELECCIONE
'Producto DaxBook' [Nombre del producto], DCOUNT
('Ventas DaxBook' [CustomerKey]
)
DESDE 'DaxBook Sales'
EXTERIOR IZQUIERDO ÚNASE A 'Producto DaxBook'
EN 'DaxBook
Ventas '[ProductKey] =' Producto
DaxBook '[ProductKey]
DÓNDE
(COALESCE ((CAST (PFCAST ('DaxBook
Sales' [Cantidad] AS INT) COMO REAL)
* PFCAST (
'Ventas de DaxBook' [Precio neto] COMO REAL))
)
> COALESCE (1000.000000)
);
La caché de datos obtenida corresponde al resultado de la consulta
DAX. El motor de fórmulas no tiene que realizar ningún procesamiento
adicional. Ésta es una condición óptima para la realización de esta
consulta. La lección aquí es que la cantidad de consultas del motor de
almacenamiento también puede ser importante. Una gran cantidad de
consultas del motor de almacenamiento puede ser el resultado de un
plan de consultas incorrecto. Las medidas no aditivas combinadas con
filtros de tabla o filtros bidireccionales podrían ser una de las razones de
este comportamiento, impactando el rendimiento de forma negativa.
Evitar evaluaciones múltiples mediante el uso de variables
Cuando una expresión DAX evalúa la misma subexpresión
varias veces, suele ser una buena idea almacenar el
resultado de la subexpresión en una variable,
haciendo referencia al nombre de la variable en las siguientes partes de
la expresión DAX original. El uso de variables es una práctica
recomendada que mejora la legibilidad del código y puede proporcionar
un plan de consulta mejor y más eficiente, con solo algunas excepciones
que se describen más adelante en esta sección.
Por ejemplo, el informe en Figura 20-46. muestra una
Ventas YOY% medida calculando la diferencia porcentual
entre el valor de Cantidad de ventas que se muestra en la fila
del informe y el valor correspondiente en el año anterior.
Figura 20-46. Diferencia en sa les y ea r sobre y ea rr epor tado por y
ea ra nd m on th.
los Ventas YOY% medida utiliza otras medidas
internamente. Para poder modificar cada parte del cálculo,
es útil incluir todas las medidas subyacentes mediante la
función Definir medida dependiente en DAX Studio. La
siguiente consulta calcula el originalVentas YOY% (lento)
medida en el informe anterior, generando los resultados de
los tiempos del servidor visibles en
Figura 20-47.:
Haga clic aquí para ver la imagen del código
DEFINIR
MEASURE Ventas [Ventas PY] =
CALCULAR (
[Cantidad de ventas],
SAMEPERIODLASTYEAR (
'Fecha' [Fecha])
)
MEASURE Ventas [Ventas YOY (lento)] =
SI (
NO ESBLANCO ( [Cantidad de ventas] )
&& NO ESBLANCO ( [Ventas PY] ),
[Cantidad de ventas] - [Ventas PY]
)
MEASURE Ventas [Importe de ventas] =
SUMX (
Ventas,
Ventas [Cantidad] * Ventas [Neto
Precio]
)
MEASURE Ventas [Ventas YOY% (lento)] =
DIVIDIR (
[Ventas interanual (lento)],
[Ventas PY]
)
EVALUAR
TOPN (
502,
RESUMEN COLUMNAS (
ROLLUPADDISSUBTOTAL (
ROLLUPGROUP (
'Fecha' [año calendario
Mes],
'Fecha' [Año calendario Mes
Número]
), "IsGrandTotalRowTotal"
),
"Ventas_YOY____slow_",
'Ventas' [Ventas YOY% (lento)]
),
[IsGrandTotalRowTotal], 0, 'Fecha' [Número de mes del
año calendario], 1, 'Fecha' [Mes del año calendario], 1
)
PEDIR POR
[IsGrandTotalRowTotal] DESC, 'Fecha' [Número de
mes del año calendario], 'Fecha' [Mes del año
calendario]
Figura 20-47. Serv er Tim in gsru n in the qu er y for the Ventas YOY% (s
bajo) la medida.
La descripción del plan de consulta incluye 1.819 filas, que no se
informan aquí. Además, hay cuatro consultas del motor de
almacenamiento recuperadas por la caché del motor de
almacenamiento (SE Cache), aunque ejecutamos un comando de
borrar caché antes de ejecutar la consulta. Esto indica que
diferentes partes del plan de consultas generan diferentes
solicitudes para la misma consulta del motor de almacenamiento.
Aunque la caché mejora el rendimiento de la solicitud del motor de
almacenamiento, la presencia de dicha redundancia en el plan de
consulta es un indicador de que hay espacio para mejoras
adicionales.
Cuando un plan de consulta es tan complejo y hay muchas
consultas del motor de almacenamiento, es una buena idea revisar
el código DAX y reducir las evaluaciones redundantes mediante el
uso de variables. De hecho, las evaluaciones redundantes podrían
ser responsables de estas solicitudes duplicadas. En general, el
motor DAX debería poder ubicar similares
subexpresiones ejecutadas dentro del mismo contexto de
filtro y reutilizan sus resultados sin múltiples evaluaciones. Sin
embargo, la presencia de condiciones lógicas comoSI
y CAMBIAR La creación de diferentes ramas de ejecución puede
detener fácilmente esta optimización interna.
Por ejemplo, considere el Ventas interanuales (lentas)
implementación de la medida: el Cantidad de ventas y Ventas PY
Las medidas se ejecutan en diferentes ramas de la evaluación.
El primer argumento de laSI La función siempre debe
evaluarse, mientras que el segundo argumento solo debe
evaluarse siempre que el primer argumento
evalúa a CIERTO. Una expresión DAX que está presente tanto
en el primer argumento como en el segundo podría evaluarse
dos veces en el plan de consulta, lo que podría no considerar
el resultado obtenido para el primer argumento como algo
que se pueda reutilizar al evaluar el segundo argumento. Las
razones técnicas por las que esto sucede y cuándo resulta ser
preferible están fuera del alcance de este libro.
El siguiente extracto de la consulta anterior destaca las
referencias de medida que podrían evaluarse dos veces porque se
encuentran tanto en el primer argumento como en el segundo:
Haga clic aquí para ver la imagen del código
MEASURE Ventas [Ventas YOY (lento)] =
SI (
NO ESBLANCO ( [Cantidad de ventas] ) &&
NO ESBLANCO ( [Ventas PY] ),
[Cantidad de ventas] - [Ventas PY]
)
Almacenando los valores devueltos por las dos medidas
Cantidad de ventas y Ventas PY en dos variables, es posible
instruir al motor DAX para hacer cumplir una única evaluación
de las dos medidas antes de la SI condición, reutilizando el
resultado tanto en el primer argumento como en el segundo. El
siguiente extracto delVentas YOY (rápido) La medida muestra
cómo implementar esta técnica en el código DAX:
Haga clic aquí para ver la imagen del código
MEDIR Ventas [Ventas YOY (rápido)] =
VAR SalesPY = [Ventas PY]
VAR SalesAmount = [Cantidad de ventas]
REGRESO
SI (
NOT ISBLANK (SalesAmount) &&
NOT ISBLANK (SalesPY),
SalesAmount - SalesPY
)
La siguiente consulta incluye una implementación completa del
Ventas interanual (rápido)% medida, que se basa internamente
sobre Ventas YOY (rápido) en lugar de Ventas interanuales (lentas). La
ejecución de la consulta produce los resultados de los tiempos del
servidor visibles enFigura 20-48.:
Haga clic aquí para ver la imagen del código
DEFINIR
MEASURE Ventas [Ventas PY] =
CALCULAR (
[Cantidad de ventas],
SAMEPERIODLASTYEAR (
'Fecha' [Fecha])
)
MEDIR Ventas [Ventas YOY (rápido)] =
VAR SalesPY = [Ventas PY]
VAR SalesAmount = [Cantidad de ventas]
REGRESO
SI (
NOT ISBLANK (SalesAmount
) && NOT ISBLANK (SalesPY),
SalesAmount - SalesPY
)
MEASURE Ventas [Importe de ventas] =
SUMX (
Ventas,
Ventas [Cantidad] * Ventas [Neto
Precio]
)
MEASURE Ventas [Ventas YOY% (rápido)] =
DIVIDIR (
[Ventas interanual (rápido)],
[Ventas PY]
)
EVALUAR
TOPN (
502,
RESUMEN COLUMNAS (
ROLLUPADDISSUBTOTAL (
ROLLUPGROUP (
'Fecha' [año calendario
Mes],
'Fecha' [Año calendario Mes
Número]
), "IsGrandTotalRowTotal"
),
"Sales_YOY____fast_",
'Ventas' [Ventas YOY% (rápido)]
),
[IsGrandTotalRowTotal], 0, 'Fecha' [Número de mes del
año calendario], 1, 'Fecha' [Mes del año calendario], 1
)
PEDIR POR
[IsGrandTotalRowTotal] DESC, 'Fecha' [Número de
mes del año calendario], 'Fecha' [Mes del año
calendario]
Figura 20-48. Ser v er Tim in gsru n in the qu er y for Ventas YOY% (fas t).
La descripción del plan de consulta incluye 488 filas (no
informadas aquí), lo que reduce la complejidad del plan de
consulta en un 73%; el plan de consulta anterior tenía 1.819
filas de largo. El nuevo plan de consultas reduce el costo del
motor de almacenamiento en términos de tiempo de
ejecución y número de consultas, y también reduce el tiempo
de ejecución en el motor de fórmulas. En general, la medida
optimizada reduce el tiempo de ejecución en
aproximadamente un 50%, pero la optimización podría ser
aún mayor en modelos y expresiones más complejos. Si se
aplicara la misma optimización a las medidas anidadas, la
mejora podría ser exponencial.
Sin embargo, preste atención a los posibles efectos secundarios de
asignar variables antes de las declaraciones condicionales. Solo las
subexpresiones utilizadas en el primer argumento pueden asignarse a
variables definidas antes de unaSI o CAMBIAR
declaración; de lo contrario, el efecto podría ser el
contrario, forzando la evaluación de expresiones que de
otro modo serían ignoradas. Debes seguir estas pautas:
CUANDO LA MISMA EXPRESIÓN DE DAX SE EVALUA MÚLTIPLES VECES
CON EN EL MISMO CONT EXTENSIÓN DE FILTRO, ASIGNARLO A UN
var ia ble y refiera la var ia ble en st ea d e la ex pr esión DAX.
CUANDO SE EVALUA UNA EXPRESIÓN DAX CON EN LOS BRANCHES DE
UN SI o CAMBIAR, cuando cada vez que sea necesario firmar el
ex pr esión a avar ia ble con en el br an ca condicional.
No avaria ble fuera de un lado SI o CAMBIAR
d e sta t em en t si la var ia ble sólo se usa con en el br an
ca condicional.
EL PRIMER ARGUMENTO DE SI y CAMBIAR ca nu se var ia bles
definidas antes SI y CAMBIAR sin que ello afecte al rendimiento.
En este artículo se incluyen más ejemplos sobre estas
pautas: https://www.sqlbi.com/articles/optimizingif-and-
switch-expressions-using-variables/
Implementar declaraciones condicionales alternativas
En el último ejemplo usamos un simple SI declaración para mostrar una posible
optimización usando variables. Si bien el uso de variables es una práctica
recomendada, vale la pena mencionar que existen formas alternativas de expresar la
misma lógica condicional en DAX. Por ejemplo, siempre que unSI La función devuelve
un valor numérico y la expresión del segundo argumento no genera un error de
ejecución cuando la condición del primer argumento es CIERTO, es posible convertir
este código:
Haga clic aquí para ver la imagen del código
SI (<condición =, <expresión =)
Dentro:
<expresión = * <condición =
Por ejemplo, la medida Sales YOY (f ast) se puede implementar usando esta
expresión:
Haga clic aquí para ver la imagen del código
MEDIR Ventas [Ventas YOY (rápido)] =
([Importe de ventas] - [Ventas PY])
* (NO ESBLANCO ([Monto de ventas]) && NO
ISBLANK ([Ventas PY]))
El resultado produce solo 208 filas en el plan de consulta, a pesar de que la duración
de la consulta es muy similar. No obstante, en modelos más complejos, la reducción
del plan de consultas puede tener beneficios más visibles. Sin embargo, diferentes
versiones del motor tenderán a producir resultados diferentes. Considere este estilo
de codificación alternativo como una de las opciones disponibles en caso de que
necesite optimizar aún más su código. No aplique dichas técnicas sin verificar los
efectos sobre el rendimiento y los planes de consulta, verificando si mejoran el
rendimiento y si vale la pena reducir la legibilidad de su código.
CONCLUSIONES
La lección en este último capítulo (para ser honesto, en todo el libro)
es que debe considerar todos los factores que afectan un plan de
consulta para encontrar el cuello de botella real. Observar los
porcentajes de FE y SE que se muestran en los tiempos del servidor
es un buen punto de partida, pero siempre debe investigar la razón
detrás de los números. Herramientas como DAX Studio y VertiPaq
Analyzer le brindan la capacidad de medir los efectos de un mal
plan de consulta, pero estas son solo pistas y piezas de evidencia
que apuntan a las razones de una consulta lenta.
¡Bienvenido al mundo DAX!
Índice
NÚMEROS
Relaciones 1: 1 (modelos de datos), 2
A
relaciones activas
ambigüedad, 514-515
Función CALCULATABLE, 451-453
tablas expandidas y, 450-453
Función USERELATIONSHIP, 450-451
Función ADDCOLUMNS, 223-224, 366-369, 371-372
Iteradores ADDCOLUMNS, 196-199
Función ADDMISSINGITEMS
consultas de autoría, 419-420, 432-433
función de autoexistencia (consultas), 432-433
funciones de agregación, consultas xmSQL, 625-627
agregaciones, 568-571
en modelos de datos, 587-588, 647-648
SE, 548
Agregaciones de VertiPaq, gestión, 604-607
agregadores, 42, 43, 44, 45-46
Función PROMEDIO, 43-44
Función PROMEDIO, 44
Función COUNT, 46
Función CONTAR, 46
Función CONTAR.BLANCO, 46
Función COUNTROWS, 46
Función DISTINCTCOUNT, 46
Función DISTINCTCOUNTNOBLANK, 46
Función MAX, 43
Función MIN, 43
Función SUMA, 42-43, 44-45
Función SUMX, 45
TODAS las funciones, 464-465
Función ALLEXCEPT versus, 326-328
CALCULAR función y, 125-132, 164, 169-172
relaciones físicas calculadas, circular
dependencias, 478
columnas y, 64-sesenta y cinco
calcular porcentajes, 125-132
transiciones de contexto, evitando, 328-330
contextos de evaluación, 100-101
filtrar contextos, 324-326, 327-330
medidas y, 63-64
días no laborables entre dos fechas, computación,
523-525
porcentajes, computación, 63-64
sintaxis de, 63
ejemplo de categorías / subcategorías principales, 66-67
Función VALORES y, 67, 327-328
TODAS * funciones, 462-464
Función ALLCROSSFILtered, 464, 465
Función ALLEXCEPT, sesenta y cinco-66, 464, 465
TODAS las funciones versus, 326-328
calcular porcentajes, 135
filtrar contextos, 326-328
Función VALORES versus, 326-328
Función ALLNOBLANKROW, 464, 465, 478
Función ALLSELECTED, 74-75, 76, 455-457, 464, 465
CALCULAR función y, 171-172
calcular porcentajes, 75-76
filas iteradas, regresando, 460-462
contextos de filtro de sombra, 459-462
columna de claves alternativas / primarias (tablas), 599, 600
ambigüedad en las relaciones, 512-513
relaciones activas, 514-515
relaciones no activas, 515-517
Analysis Services 2012/2014 y la función
CallbackDataID, 644
totales anuales (en movimiento), computación, 243-244
filtros de forma arbitraria, 336
mejores prácticas, 343
edificio, 338-343
filtros de columna versus, 336
definido 337-338
filtros simples versus, 337
usos de, 343
operadores aritméticos, 23
manejo de errores
división por cero, 32-33
valores vacíos / faltantes, 33-35
consultas xmSQL, 627
flechas (dirección de filtro transversal), 3
atributos, optimización del modelo de datos
deshabilitar jerarquías de atributos, 604
optimizar los atributos de obtención de detalles, 604
consultas de autoría, 395
Función ADDMISSINGITEMS, 419-420, 432-433
función de autoexistencia, 428-434
Estudio DAX, 395
DEFINIR secciones
MEASURE palabra clave en, 399
VAR palabra clave en, 397-399
EVALUAR declaraciones
Función ADDMISSINGITEMS, 419-420, 432-
433
ejemplo de, 396
variables de expresión y, 398
Función GENERAR, 414-417
Función GENERATEALL, 417
Función GROUPBY, 420-423
Función ISONORAFTER, 417-419
Función NATURALINNERJOIN, 423-425
Función NATURALLEFTOUTERJOIN, 423-425
variables de consulta y, 398
Función FILA, 400-401
Función MUESTRA, 427-428
Función SUSTITUIR CON ÍNDICE, 425-427
Función RESUMEN, 401-403, 433-434
Función SUMMARIZECOLUMNS, 403-409,
429-434
sintaxis de, 396-399
Función TOPN, 409-414
Función TOPNSKIP, 420
variables de expresión, 397-399
Función GENERAR, 414-417
Función GENERATEALL, 417
Función GROUPBY, 420-423
Función ISONORAFTER, 417-419
MEDIR en las secciones DEFINIR, 399
medidas
medidas de consulta, 399
pruebas, 399-401
Función NATURALINNERJOIN, 423-425
Función NATURALLEFTOUTERJOIN, 423-425
variables de consulta, 397-399
Función FILA, medidas de prueba, 400-401
Función MUESTRA, 427-428
contextos de filtro de sombra, 457-462
Función SUSTITUIR CON ÍNDICE, 425-427
Función RESUMEN, 401-403, 433-434
Función SUMMARIZECOLUMNS, 403-409, 429-
434
Función TOPN, 409-414
Función TOPNSKIP, 420
VAR en las secciones DEFINE, 397-399
Fecha / hora automática (Power BI), 218-219
función de autoexistencia (consultas), 428-434
columnas de fecha automática (Power Pivot para Excel), 219
Función PROMEDIO, 43-44, 199
Función AVERAGEA, devolviendo promedios, 199
promedios (medias)
promedios de cálculo, función AVERAGEX, 199-201
medias móviles, 201-202
promedios de retorno
Función PROMEDIO, 199
Función AVERAGEA, 199
Función PROMEDIO, 44
promedios informáticos, 199-201
filtrar contextos, 111-112
Iteradores AVERAGEX, 188
B
eventos por lotes (consultas xmSQL), 630-632
dirección de filtro cruzado bidireccional
(relaciones físicas), 490, 491-493, 507
filtrado bidireccional (relaciones), 3-4
relaciones bidireccionales, 106, 109
Tipo de datos binarios, 23
Función EN BLANCO, 36
filas en blanco, relaciones no válidas, 68-71
Columnas calculadas booleanas, optimización del modelo de datos,
597-598
Condiciones booleanas, función CALCULAR, 119-120,
123-124
Tipo de datos booleanos, 22
Lógica booleana, 23
cuellos de botella, optimización DAX, 667-668
identificar cuellos de botella SE / FE, 667-668
optimizar los cuellos de botella, 668
tablas puente, MMR (Many-Many Relationships), 494-
499
información de presupuesto / ventas (cálculos), que se
muestran juntos, 527-530
C
Función CALCULAR, 115
TODAS las funciones, 125-132, 164, 169-172
Función ALLSELECTED, 171-172
Condiciones booleanas, 119-120, 123-124
relaciones físicas calculadas, circular
dependencias, 478-480
elementos de cálculo, que se aplican a expresiones, 291-299
dependencias circulares, 161-164
calcular porcentajes, 124, 135
TODAS las funciones, 125-132
Función ALLEXCEPT, 135
Función VALORES, 133-134
transiciones de contexto, 148, 151-154
columnas calculadas, 154-157
medidas, 157-160
Función CROSSFILTER, 168
contextos de evaluación, 79
orden de evaluación, 144-148
filtrar argumentos, 118-119, 122, 123, 445-447
filtrar contextos, 148-151
filtración
varias columnas, 140-143
una sola columna, 138-140
Función KEEPFILTERS, 135-138, 139-143, 164,
168-169
orden de evaluación, 146-148
filtrar varias columnas, 142-143
medias móviles, 201-202
secuencias de numeración de eventos (cálculos), 537-
538
sobrescribir filtros, 120-122, 136
Grupo de cálculo de precedencia, 299-304
Relaciones basadas en rangos (calculadas físicas
relaciones), 474-476
Función RELACIONADA y, 443-444
contextos de fila, 148-151
reglas para, 172-173
semántica de, 122-123
sintaxis de, 118, 119-120
filtros de mesa, 382-384, 445-447
cálculos de inteligencia de tiempo, 228-232
transfiriendo filtros, 482-483, 484-485
Función UNION y, 376-378
Función USERELATIONSHIP, 164-168
columnas calculadas, 25-26
Columnas calculadas booleanas, optimización del modelo de datos,
597-598
transiciones de contexto, 154-157
optimización del modelo de datos, 595-599
Función DISTINCT, 68
expresiones, 29
medidas, 42
elegir entre columnas calculadas y
medidas, 29-30
diferencias entre columnas calculadas y
medidas, 29
usando medidas en columnas calculadas, 30
Procesando, 599
Función RELACIONADA, 443-444
Función SUM, contextos de evaluación, 88-89
funciones de tabla, 59
Función VALORES, 68
relaciones físicas calculadas, 471
dependencias circulares, 476-480
relaciones de varias columnas, 471-473
relaciones basadas en rangos, 474-476
tablas calculadas, 59
creando 390-391
Función DISTINCT, 68
Función SELECTCOLUMNS, 390-391
Función VALORES, 68
Función CALCULATABLE, 115, 363
relaciones activas, 451-453
Función FILTRO versus, 363-365
funciones de inteligencia del tiempo, 259, 260-261
granularidad de cálculo e iteradores, 211-214
grupos de cálculo, 279-281
elementos de cálculo y, 288
creando 281-288
definido 288
Grupo de cálculo de nombre, 288
Grupo de cálculo de precedencia, 288, 299-304
elementos de cálculo
aplicando a expresiones, 291
Función CALCULAR, 291-299
Función DATESYTD, 293-296
Cálculos hasta la fecha, 294
mejores prácticas, 311
grupos de cálculo y, 288
Elemento de cálculo de expresión, 289
cadenas de formato, 289-291
incluyendo / excluyendo medidas de los elementos de cálculo,
304-306
Elemento de cálculo de nombre, 288
Valores ordinales, 289
propiedades de, 288-289
recursividad lateral, 306-311
Elemento de cálculo YOY, 289-290
Elemento de cálculo del% interanual, 289-290
calculos
información de presupuesto / ventas (cálculos), mostrando
juntos, 527-530
días no laborables entre dos fechas, computación,
523-525
precalcular valores (cálculos), trabajo de computación
días entre dos fechas, 525-527
Ventas
calcular las ventas del año anterior hasta las ventas del último día
(cálculos), 539-544
calcular las ventas en la misma tienda, 530-536
mostrando información de presupuesto / ventas en conjunto, 527-
530
sintaxis de, 17-18
días laborables entre dos fechas, computación, 519-523
días no laborables, 523-525
precalcular valores (cálculos), 525-527
Función CALENDARIO, tablas de fechas de construcción, 222
Función CALENDARAUTO, tablas de fechas de construcción, 222-
224
calendarios (personalizados), cálculos de inteligencia de tiempo, 272
Función DATESYTD, 276-277
semanas, 272-275
Función CallbackDataID
Analysis Services 2012/2014 y, 644
Optimización de DAX, 690-693
paralelismo y, 641
VertiPaq y, 640-644
captura de consultas DAX, 609-611
cardinalidad
columnas (tablas)
optimización del modelo de datos, 591-592
optimizar columnas de alta cardinalidad, 603
iteradores, 188-190
relaciones (modelos de datos), 489-490, 586-587, 590-
591
Columna de cardinalidad (Analizador VertiPaq), 581, 583
ejemplo de categorías / subcategorías, TODAS las funciones y,
66-67
celdas (Excel), 5
cadenas (relaciones), 3
dependencias circulares
CALCULAR función y, 161-164
relaciones físicas calculadas, 476-480
documentación de código, variables, 183-184
mantenimiento / legibilidad del código, función FILTRO, 62-63
filtros de columna
filtros de forma arbitraria versus, 336
definido 336
bases de datos en columnas, 550-553
columnas (tablas), 5-7
Función ADDCOLUMNS, 223-224, 366-369, 371-
372
Iteradores ADDCOLUMNS, 196-199
TODAS las funciones y, 64-sesenta y cinco
Función ALLEXCEPT y, sesenta y cinco-66
columnas de fecha automática (Power Pivot para Excel), 219
Columnas calculadas booleanas, optimización del modelo de datos,
597-598
columnas calculadas, 25-26, 42, 443-444
Columnas calculadas booleanas, 597-598
elegir entre columnas calculadas y
medidas, 29-30
transiciones de contexto, 154-157
optimización del modelo de datos, 595-599
diferencias entre columnas calculadas y
medidas, 29
Función DISTINCT, 68
expresiones, 29
Procesando, 599
Función SUMA, 88-89
funciones de tabla, 59
usando medidas en columnas calculadas, 30
Función VALORES, 68
cardinalidad
optimización del modelo de datos, 591-592
optimizar columnas de alta cardinalidad, 603
Columna de fecha, optimización del modelo de datos, 592-595
definido 2
columna de atributos descriptivos (tablas), 600, 601-602
filtración
Función CALCULAR, 138-140
varias columnas, 140-143
una sola columna, 138-140
filtros de tabla versus, 444-447
medidas, contextos de evaluación, 89-90
varias columnas
Función DISTINCT y, 71
Función VALORES y, 71
columna de claves primarias / alternativas (tablas), 599, 600
columna de atributos cualitativos (tablas), 599, 600
columna de atributos cuantitativos (tablas), 599, 600-601
referenciando, 17-18
relaciones, 3
contextos de fila, 87
Función SELECTCOLUMNS, 390-391, 393-394
Iteradores SELECTCOLUMNS, 196, 197-199
optimización dividida, 602-603
optimización del almacenamiento, 602
optimización de división de columnas, 602-603
columnas de alta cardinalidad, 603
almacenamiento 601-602
Función SUSTITUIR CON ÍNDICE, 425-427
Función RESUMEN y, 401
Función SUMMARIZECOLUMNS, 403-409, 429-
434
columna de atributos técnicos (tablas), 600, 602
Columna de tiempo, optimización del modelo de datos, 592-595
Analizador VertiPaq, 580-583
Columnas # columna (Analizador VertiPaq), 582
Columna Tamaño de jerarquías de columnas (Analizador VertiPaq),
582
Columna Tamaño total de columnas (Analizador VertiPaq), 581
Función COMBINEVALUES, relaciones de varias
columnas (relaciones físicas calculadas), 472-
473
comentarios
al final de las expresiones, 18
expresiones, ubicación de comentarios en expresiones, 18
comentarios de varias líneas, 18
comentarios de una sola línea, 18
operadores de comparación, 23
modelos de datos compuestos, 646-647
Modo DirectQuery, 488
Modo VertiPaq, 488
compresión (VertiPaq), 553-554
codificación hash, 555-556
recodificación, 559
RLE, 556-559
codificación de valor, 554-555
Función CONCATENATEX
iteradores y, 194-196
tablas como valores escalares, 74
declaraciones condicionales, 24-25, 708-709
condiciones
DAX, 11
SQL, 11
CONTIENE función
mesas y, 387-388
transfiriendo filtros, 481-482, 484-485
CONTIENE funciones y tablas 387-388
transiciones de contexto, 148
TODAS las funciones y, 328-330
CALCULAR función y, 151-154
columnas calculadas, 154-157
Optimización de DAX, 672-678
tablas ampliadas, 454-455
iteradores, aprovechando las transiciones de contexto, 190-194
medidas, 157-160
funciones de inteligencia del tiempo, 260
funciones de conversión, 51
Función MONEDA, 51
Función FECHA, 51, 52
Función DATEVALUE, 51
Función FORMAT, 51
Función INT, 51
Función HORA, 51, 52
Función VALOR, 51
conversiones, manejo de errores, 31-32
núcleos (número de), selección de hardware VertiPaq, 574,
576
Función COUNT, 46
Función CONTAR, 46
Función CONTAR.BLANCO, 46
Función COUNTROWS, 46
filtrar contextos y relaciones, 109
contextos de fila anidados en la misma tabla, 92-95
tablas como valores escalares, 73
Modelo de CPU, selección de hardware VertiPaq, 574-575
direcciones de filtro cruzado (relaciones físicas), 3, 490
dirección de filtro cruzado bidireccional, 490, 491-493, 507
dirección de filtro cruzado único, 490
filtrado cruzado, optimización del modelo de datos, 590
relaciones entre islas, 489
Función CROSSFILTER
relaciones bidireccionales, 109
CALCULAR función y, 168
Funciones y tablas CROSSJOIN, 372-374, 383-384
Tipo de datos de moneda, 21
Función MONEDA, 51
calendarios personalizados, cálculos de inteligencia de tiempo, 272
Función DATESYTD, 276-277
semanas, 272-275
clientes (nuevo), informática (tablas), 380-381, 386-387
D
AVG diario
precedencia del grupo de cálculo, 299-303
elementos de cálculo, incluidas / excluidas medidas,
304-306
linaje de datos, 332-336, 465-468
modelos de datos
agregaciones, 647-648
modelos de datos compuestos, 646-647
Modo DirectQuery, 488
Modo VertiPaq, 488
definido 1-2
optimizando con VertiPaq, 579
agregaciones, 587-588, 604-607
columnas calculadas, 595-599
elegir columnas para el almacenamiento, 599-602
cardinalidad de columna, 591-592
filtrado cruzado, 590
Columna de fecha, 592-595
desnormalizar datos, 584-591
deshabilitar jerarquías de atributos, 604
recopilación de información del modelo de datos, 579-584
optimizar el almacenamiento de la columna, 602-603
optimizar los atributos de obtención de detalles, 604
cardinalidad de la relación, 586-587, 590-591
Columna de tiempo, 592-595
relaciones, 2
Relaciones 1: 1, 2
relaciones activas, 450-453
filtrado bidireccional, 3-4
cardinalidad 586-587, 590-591
cadenas 3
columnas, 3
dirección de filtro transversal, 3
DAX y SQL, 9
direcciones de, 3-4
relaciones multilaterales, 2, 3
relaciones unilaterales, 2, 3
Informes de relaciones (VertiPaq Analyzer), 584
filtrado unidireccional, 4
relaciones débiles, 2
modelos de datos únicos
Modo DirectQuery, 488
Modo VertiPaq, 488
tablas, definidas, 2
relaciones débiles, 439
actualizaciones de datos, SSAS (SQL Server Analysis Services),
549-550
Columna Tamaño de datos (Analizador VertiPaq), 581
tipos de datos, 19
Tipo de datos binarios, 23
Tipo de datos booleanos, 22
Tipo de datos de moneda, 21
Tipo de datos DateTime, 21-22
Tipo de datos decimal, 21
Tipo de datos entero, 21
operadores, 23
operadores aritméticos, 23
operadores de comparación, 23
operadores logicos, 23
sobrecarga 19-20
operadores de paréntesis, 23
operadores de concatenación de texto, 23
conversiones de cadena / número, 19-21
instrumentos de cuerda, 22
Tipo de datos de variante, 22
Columna de% de tamaño de base de datos (Analizador VertiPaq), 582
bases de datos (en columnas), 550-553
cachés de datos
FE, 547
SE, 547
VertiPaq, 549, 635-637
Función DATABLE, creando tablas estáticas, 392-393
Columna de fecha, optimización del modelo de datos, 592-595
Función FECHA, 51, 52
plantillas de tablas de fechas (Power Pivot para Excel), 220
tablas de fechas
edificio, 220-221
Función ADDCOLUMNS, 223-224
Función CALENDARIO, 222
Función CALENDARAUTO, 222-224
plantillas de fecha, 224
duplicando, 227
cargando desde otras fuentes de datos, 221
Marcar como tabla de fechas, 232-233
múltiples fechas, gestionando, 224
múltiples tablas de fechas, 226-228
múltiples relaciones con tablas de fechas, 224-226
nombrar 221
plantillas de fecha, 224
cálculos relacionados con la fecha / hora, 217
Fecha / hora automática (Power BI), 218-219
columnas de fecha automática (Power Pivot para Excel), 219
cálculos básicos, 228-232
funciones básicas, 233-235
Función CALCULAR, 228-232
Función CALCULATABLE, 259, 260-261
transiciones de contexto, 260
calendarios personalizados, 272
Función DATESYTD, 276-277
semanas, 272-275
tablas de fechas
Función ADDCOLUMNS, 223-224
edificio, 220-224
Función CALENDARIO, 222
Función CALENDARAUTO, 222-224
plantillas de tablas de fechas (Power Pivot para Excel), 220
plantillas de fecha, 224
duplicando, 227
cargando desde otras fuentes de datos, 221
gestionar varias fechas, 224-228
Marcar como tabla de fechas, 232-233
múltiples tablas de fechas, 226-228
múltiples relaciones con tablas de fechas, 224-226
nombrar 221
Función DATEADD, 237-238, 262-269
Función DATESINPERIOD, 243-244
Función DATESMTD, 259, 276-277
Función DATESQTD, 259, 276-277
Función DATESYTD, 259, 260, 261-262, 276-277
diferencias con respecto a períodos anteriores, computación, 241-
243
operaciones de obtención de detalles, 271
Función FILTRO, 228-232
Función FIRSTDATE, 269, 270
Función FIRSTNONBLANK, 256-257, 270-271
Función LASTDATE, 248-249, 254, 255, 269-270
Función LASTNONBLANK, 250-254, 255, 270-271
funciones de mezcla, 239-241
moviendo totales anuales, computación, 243-244
Cálculos de MTD, 235-236, 259-262, 276-277
funciones anidadas, orden de llamada de, 245-246
Función SIGUIENTE, 245-246
días no laborables entre dos fechas, computación,
523-525
saldos de apertura / cierre, 254-258
Función PARALLELPERIOD, 238-239
períodos hasta la fecha, 259-262
Función PREVIOUSMONTH, 239
Cálculos de QTD, 235-236, 259-262, 276-277
Función SAMEPERIODLASTYEAR, 237, 245-246
cálculos semi-aditivos, 246-248
Función STARTOFQUARTER, 256-257
períodos de tiempo, computando a partir de períodos anteriores, 237-239
días laborables entre dos fechas, computación, 519-523
días no laborables, 523-525
precalcular valores (cálculos), 525-527
Cálculos hasta la fecha, 235-236, 259-262, 276-277
Función DATEADD, cálculos de inteligencia de tiempo, 237-
238, 262-269
Función DATESINPERIOD, que calcula los totales anuales
móviles, 243-244
Función DATESMTD, cálculos de inteligencia de tiempo, 259,
276-277
Función DATESQTD, cálculos de inteligencia de tiempo, 259,
276-277
Función DATESYTD
elementos de cálculo, que se aplican a expresiones, 293-296
cálculos de inteligencia de tiempo, 259, 260, 261-262,
276-277
Tipo de datos DateTime, 21-22
Función DATEVALUE, 51
DAX (Expresiones de análisis de datos), 1
condiciones, 11
modelos de datos
definido 1-2
relaciones, 2-4
mesas, 2
plantillas de fecha, 224
DAX y, celdas y tablas, 5-7
Excel y
lenguajes funcionales, 7
teorías 8-9
expresiones
identificar una sola expresión DAX para
mejoramiento, 658-661
optimizar los cuellos de botella, 668
como lenguaje funcional, 10
funciones, 6-7
iteradores, 8
MDX, 12
jerarquías, 13-14
cálculos a nivel de hoja, 14
espacio multidimensional versus tabular, 12
como lenguaje de programación, 12-13
como lenguaje de consulta, 12-13
consultas, 613
optimizando, 657
cuellos de botella, 668
Función CallbackDataID, 690-693
implementación de cambios, 668
declaraciones condicionales, 708-709
transiciones de contexto, 672-678
crear consultas de reproducción, 661-664
Función DISTINCTCOUNT, 699-704
lista de quehaceres, 658
condiciones de filtrado, 668-672
identificar una sola expresión DAX para
mejoramiento, 658-661
identificar cuellos de botella SE / FE, 667-668
SI condiciones, 678-690
evaluaciones múltiples, evitando con variables, 704-
708
iteradores anidados, 693-699
planes de consulta, 664-667
volver a ejecutar consultas de prueba, 668
tiempos del servidor, 664-667
variables, 704-708
Power BI y, 14-15
como lenguaje de programación, 10-11
consultas
capturando 609-611
crear consultas de reproducción, 661-662
Función DISTINCTCOUNT, 634-635
ejecutando 546
planes de consulta, 612-613
coleccionismo 613-614
Estudio DAX, 617-620
planes de consultas lógicas, 612, 614
planes de consulta física, 612-613, 614-616
Analizador de SQL Server, 620-623
como lenguaje de consulta, 10-11
SQL y 9
subconsultas, 11
Motores DAX
DirectQuery, 546, 548, 549
FE, 546, 547
cachés de datos, 547
operadores de, 547
implementación de un solo subproceso, 547
SE, 546
agregaciones, 548
cachés de datos, 547
DirectQuery, 548, 549
operadores de, 547
implementaciones paralelas, 548
VertiPaq, 547-549, 550-577
Modelo tabular y, 545-546
VertiPaq, 546, 547-548, 550. Ver también modelos de datos,
optimizar con VertiPaq
agregaciones, 571-573
bases de datos en columnas, 550-553
compresión, 553-562
cachés de datos, 549
DMV, 563-565
selección de hardware, 573-577
codificación hash, 555-556
jerarquías, 561-562
materialización, 568-571
implementaciones multiproceso, 548
fraccionamiento, 562-563
mesas de procesamiento, 550
recodificación, 559
relaciones (modelos de datos), 561-562, 565-568
RLE, 556-559
operaciones de escaneo, 549
segmentación, 562-563
ordenar órdenes, 560-561
codificación de valor, 554-555
Estudio DAX, 395
captura de consultas DAX, 609-611
Power BI y, 609-611
medidas de consulta, creando, 662-663
planes de consulta, captura de información de perfiles, 617-620
Cachés VertiPaq, 639-640
DAXFormatter.com, 41
Tipo de datos decimal, 21
DEFINE MEASURE cláusulas en declaraciones EVALUATE,
59
DEFINIR secciones (consultas de autoría)
MEASURE palabra clave en, 399
VAR palabra clave en, 397-399
desnormalización de datos y optimización de modelos de datos, 584-
591
columna de atributos descriptivos (tablas), 600, 601-602
Función DETAILROWS, reutilizando expresiones de tabla, 388-
389
codificación de diccionario. Ver codificación hash
Columna Tamaño del diccionario (Analizador VertiPaq), 581
DirectQuery, 488-489, 546, 548, 549, 617
columnas calculadas, 25-26
modelos de datos compuestos, 488
Eventos finales (SQL Server Profiler), 621
SE, 549
modelos de datos compuestos, 646-647
leyendo, 645-646
modelos de datos únicos, 488
Rendimiento de E / S de disco, selección de hardware VertiPaq,
574, 576-577
Función DISTINCT, 71
filas en blanco y relaciones inválidas, 68, 70-71
columnas calculadas, 68
relaciones físicas calculadas
dependencias circulares, 477-478
relaciones basadas en rangos, 476
filtrar contextos, 111-112
varias columnas, 71
Función UNION y, 375-378
Función VALORES versus, 68
Función DISTINCTCOUNT, 46
Optimización de DAX, 699-704
ventas en la misma tienda (cálculos), computación, 535-536
filtros de mesa, evitando, 699-704
Consultas de VertiPaq SE, 634-635
Función DISTINCTCOUNTNOBLANK, 46
Función DIVIDE, optimización DAX, 684-687
división por cero, operadores aritméticos, 32-33
DMV (Vistas de administración dinámica) y SSAS, 563-
565
documentar código, variables, 183-184
atributos de obtención de detalles, optimización, 604
operaciones de obtención de detalles, cálculos de inteligencia de tiempo,
271
duplicación, tablas de fechas, 227
duración de un ejemplo de pedido, 26
segmentación dinámica, relaciones virtuales y, 485-
488
mi
Función ANTERIOR, contextos de evaluación, 97-98
editar texto, formatear código DAX, 42
valores vacíos / faltantes, manejo de errores, 33-35
Columna de codificación (analizador VertiPaq), 582, 583
manejo de errores
Función EN BLANCO, 36
Excel, valores vacíos / faltantes, 35
expresiones, 31
errores del operador aritmético, 32-35
errores de conversión, 31-32
generando errores, 38-39
SI función, 36, 37
Función SIERROR, 35-36, 37-38
Función ESBLANCO, 36
Función ISERROR, 36, 38
Función SQRT, 36
variables, 37
EVALUAR declaraciones
Función ADDMISSINGITEMS, 419-420, 432-433
Cláusulas DEFINE MEASURE, 59
ejemplo de, 396
variables de expresión y, 398
Función GENERAR, 414-417
Función GENERATEALL, 417
Función GROUPBY, 420-423
Función ISONORAFTER, 417-419
Función NATURALINNERJOIN, 423-425
Función NATURALLEFTOUTERJOIN, 423-425
Cláusulas ORDER BY, 60
variables de consulta y, 398
Función FILA, 400-401
Función MUESTRA, 427-428
Función SUSTITUIR CON ÍNDICE, 425-427
Función RESUMEN, 401-403, 433-434
Función SUMMARIZECOLUMNS, 403-409, 429-
434
sintaxis de, 59-60, 396-399
Función TOPN, 409-414
Función TOPNSKIP, 420
contextos de evaluación, 79
TODAS las funciones, 100-101
Función AVERAGEX, contextos de filtro, 111-112
Función CALCULAR, 79
columnas en medidas, 89-90
Función COUNTROWS, filtrar contextos y
relaciones, 107-108
definido 80
Función DISTINCT, contextos de filtro, 111-112
Función ANTERIOR, 97-98
filtrar contextos, 80, 109-110
Función PROMEDIO, 111-112
Función CALCULAR, 118-119
CALCULAR función y, 148-151
creando 115-119
Función DISTINCT, 111-112
ejemplos de, 80-85
filtrar argumentos, 118-119
relaciones y, 106-109
contextos de fila versus, 85
Función RESUMEN, 112
Función FILTRO, 92-93, 94-95, 98-101
varias tablas, trabajando con, 101-102
filtrar contextos y relaciones, 106-109
contextos y relaciones de fila, 102-105
Función RELACIONADA
filtrar contextos y relaciones, 109
contextos de filas anidadas en diferentes tablas, 92
contextos y relaciones de fila, 103-105
Función RELATEDTABLE
filtrar contextos y relaciones, 109
contextos de filas anidadas en diferentes tablas, 91-92
contextos y relaciones de fila, 103-105
relaciones y, 101-102
filtrar contextos, 106-109
contextos de fila, 102-105
contextos de fila, 80
CALCULAR función y, 148-151
referencias de columna, 87
ejemplos de, 86-87
filtrar contextos versus, 85
iteradores y, 90-91
contextos de filas anidadas en diferentes tablas, 91-92
contextos de fila anidados en la misma tabla, 92-97
relaciones y, 102-105
Función SUMA, en columnas calculadas, 88-89
Función RESUMEN, filtrar contextos, 112
evaluaciones (múltiples), evitando con variables, 704-708
eventos (cálculos), secuencias de numeración de, 536-539
Sobresalir
cálculos 8
células, 5
columnas, 5-7
DAX y
celdas y tablas, 5-7
lenguajes funcionales, 7
teorías 8-9
manejo de errores, valores vacíos / faltantes, 35
fórmulas, 6
funciones, 6-7
Power Pivot para Excel
columnas de fecha automáticas, 219
plantillas de tablas de fechas, 220
EXCEPTO función, tablas y, 379-381
tablas expandidas
relaciones activas, 450-453
filtros de columna versus filtros de tabla, 444-447
transiciones de contexto, 454-455
filtrar contextos, 439-441
filtración, 444-447
relaciones activas y, 450-453
diferencias entre filtros de tabla y expandido
mesas, 453-454
Función RELACIONADA, 441-444
relaciones, 437-441
filtros de tabla
filtros de columna versus, 444-447
en medidas, 447-450
Elemento de cálculo de expresión, 289
Árboles de expresión, 612
expresiones
columnas calculadas, 29
elementos de cálculo, que se aplican a expresiones, 291
Función CALCULAR, 291-299
Función DATESYTD, 293-296
Cálculos hasta la fecha, 294
comentarios, ubicación en expresiones, 18
Optimización de DAX, 658-661, 668
manejo de errores, 31
errores del operador aritmético, 32-35
errores de conversión, 31-32
formateo 39-40, 42
MDX
DAX y, 12-13, 14
consultas, 546, 604, 613, 663-664
medidas de consulta, 399
expresiones escalares, 57-58
expresiones de tabla
EVALUAR declaraciones, 59-60
reutilización 388-389
variables, 30-31, 397-399
F
FE (motores de fórmula), 546, 547
cuellos de botella, identificación, 667-668
cachés de datos, 547
operadores de, 547
planes de consulta, lectura, 652-653, 654-655
implementación de un solo subproceso, 547, 642
filtros de argumentos
Función CALCULAR, 118-119, 122, 123, 445-447
definido 120
múltiples referencias de columna, 140
Función SUMMARIZECOLUMNS, 406-409
filtrar contextos, 80, 109-110, 313, 343-344
TODAS las funciones, 324-326, 327-330
Función ALLEXCEPT, 326-328
filtros de forma arbitraria, 336
mejores prácticas, 343
edificio, 338-343
filtros de columna versus, 336
definido 337-338
filtros simples versus, 337
usos de, 343
Función PROMEDIO, 111-112
Función CALCULAR, 148-151
filtrar argumentos, 118-119
sobrescribir filtros, 120-122
filtros de columna
filtros de forma arbitraria versus, 336
definido 336
creando 115-119
linaje de datos, 332-336
Función DISTINCT, 111-112
ejemplos de, 80-85
tablas ampliadas, 439-441
Función FILTROS, 322-324
Función HASONVALUE, 314-318
Función ISCROSSFILTER, 319-322
Función ISEMPTY, 330-332
Función ESFILTERIZADA, 319, 320-322
anidando en variables, 184-185
relaciones y, 106-109
contextos de fila versus, 85
Función SELECTEDVALUE, 318-319
filtros simples
filtros de forma arbitraria versus, 337
definido 337
Función RESUMEN, 112
Función TREATAS, 334-336
Función VALORES, 322-324, 327-328
Función FILTRO, 57-58
Función CALCULATABLE versus, 363-365
mantenimiento / legibilidad del código, 62-63
contextos de evaluación, 98-101
como iterador, 60-61
contextos de fila anidados en la misma tabla, 92-93, 94-95
anidando 61-62
Relaciones basadas en rangos (calculadas físicas
relaciones), 474-476
sintaxis de, 60
cálculos de inteligencia de tiempo, 228-232
transfiriendo filtros, 481-482, 484-485
operaciones de filtrado, consultas xmSQL, 628-630
filtración
Función ALLCROSSFILtered, 464, 465
columnas (tablas) versus filtros de tabla, 444-447
Optimización de DAX, condiciones de filtrado, 668-672
tablas expandidas
diferencias entre filtros de tabla y expandido
mesas, 453-454
filtros de tabla y relaciones activas, 450-453
Función FILTRO
Relaciones basadas en rangos (calculadas físicas
relaciones), 474-476
transfiriendo filtros, 484-485
Función KEEPFILTERS, 461-462, 482-483, 484
relaciones
filtrado bidireccional, 3-4
filtrado unidireccional, 4
contextos de filtro de sombra, 457-462
mesas, 381
CALCULAR función y, 445-447
filtros de columna versus, 444-447
diferencias entre filtros de tabla y expandido
mesas, 453-454
Función DISTINCTCOUNT, 699-704
en medidas, 447-450
O condiciones, 381-384
filtros de tabla y relaciones activas, 450-453
transfiriendo filtros, 480-481
Función CALCULAR, 482
CONTIENE función, 481-482
Función FILTRO, 481-482, 484-485
Función INTERSECT, 483-484
Función TREATAS, 482-483, 484
Función FILTROS
filtrar contextos, 322-324
Función VALORES versus, 322-324
Función FIRSTDATE, cálculos de inteligencia de tiempo,
269, 270
Función FIRSTNONBLANK, cálculos de inteligencia
de tiempo, 256-257, 270-271
Función FORMAT, 51
cadenas de formato
elementos de cálculo y, 289-291
definido 291
Función SELECTEDMEASUREFORMATSTRING,
291
formatear el código DAX, 39, 41-42
DAXFormatter.com, 41
editar texto, 42
expresiones, 39-40, 42
fórmulas, 42
ayuda, 42
variables, 40-41
fórmulas
Sobresalir, 6
formateo 42
IN función, tablas y, 387-388
funciones
Función ADDCOLUMNS, 223-224, 366-369, 371-
372
Función ADDMISSINGITEMS
consultas de autoría, 419-420, 432-433
función de autoexistencia (consultas), 432-433
funciones de agregación, consultas xmSQL, 625-627
agregadores, 42, 44, 45-46
Función PROMEDIO, 43-44
Función PROMEDIO, 44
Función COUNT, 46
Función CONTAR, 46
Función CONTAR.BLANCO, 46
Función COUNTROWS, 46
Función DISTINCTCOUNT, 46
Función DISTINCTCOUNTNOBLANK, 46
Función MAX, 43
Función MIN, 43
Función SUMA, 42-43, 44-45
Función SUMX, 45
TODAS las funciones, 464-465
Función ALLEXCEPT versus, 326-328
CALCULAR función y, 164, 169-172
relaciones físicas calculadas y circulares
dependencias, 478
calcular los días no laborables entre dos fechas,
523-525
calcular porcentajes, 125-132
transiciones de contexto, 328-330
contextos de evaluación, 100-101
filtrar contextos, 324-326, 327-330
Función VALORES y, 327-328
TODAS * funciones, 462-464
Función ALLCROSSFILtered, 464, 465
Función ALLEXCEPT, 464, 465
TODAS las funciones versus, 326-328
calcular porcentajes, 135
filtrar contextos, 326-328
Función VALORES versus, 326-328
Función ALLNOBLANKROW, 464, 465, 478
Función ALLSELECTED, 455-457, 464, 465
CALCULAR función y, 171-172
devolviendo filas iteradas, 460-462
contextos de filtro de sombra, 459-462
Función PROMEDIO, promedios devueltos, 199
Función AVERAGEA, devolviendo promedios, 199
Función AVERAGEX
promedios informáticos, 199-201
filtrar contextos, 111-112
Condiciones booleanas, 123-124
Función CALCULAR, 115
TODAS las funciones, 125-132, 164, 169-172
Función ALLSELECTED, 171-172
Condiciones booleanas, 119-120
relaciones físicas calculadas y circulares
dependencias, 478-480
elementos de cálculo, que se aplican a expresiones, 291-299
dependencias circulares, 161-164
calcular porcentajes, 124-135
transiciones de contexto, 148, 151-160
Función CROSSFILTER, 168
contextos de evaluación, 79
orden de evaluación, 144-148
filtrar argumentos, 118-119, 122, 123, 445-447
filtrar contextos, 148-151
filtrar una sola columna, 138-140
filtrar varias columnas, 140-143
Función KEEPFILTERS, 135-138, 139-143, 164,
168-169
Función KEEPFILTERS y, 146-148
medias móviles, 201-202
secuencias de numeración de eventos (cálculos),
537-538
sobrescribir filtros, 120-122
Grupo de cálculo de precedencia, 299-304
Relaciones basadas en rangos (calculadas físicas
relaciones), 474-476
Función RELACIONADA y, 443-444
contextos de fila, 148-151
reglas para, 172-173
semántica de, 122-123
sintaxis de, 118, 119-120
filtros de mesa, 445-447
tablas como filtros, 382-384
cálculos de inteligencia de tiempo, 228-232
transfiriendo filtros, 482-483, 484-485
Función UNION y, 376-378
Función USERELATIONSHIP, 164-168
Función CALCULATABLE, 115, 363
relaciones activas, 451-453
Función FILTRO versus, 363-365
funciones de inteligencia del tiempo, 259, 260-261
Función CALENDARIO, tablas de fechas, 222
Función CALENDARAUTO, tablas de fechas, 222-224
Función CallbackDataID
Analysis Services 2012/2014 y, 644
Optimización de DAX, 690-693
paralelismo y, 641
VertiPaq y, 640-644
Función COMBINEVALUES, varias columnas
relaciones (relaciones físicas calculadas),
472-473
Función CONCATENATEX
iteradores y, 194-196
tablas como valores escalares, 74
CONTIENE función
mesas y, 387-388
transfiriendo filtros, 481-482, 484-485
CONTAINSROW función, tablas y, 387-388
funciones de conversión, 51
Función COUNTROWS
filtrar contextos y relaciones, 107-108
contextos de fila anidados en la misma tabla, 92-95
tablas como valores escalares, 73
Función CROSSFILTER
relaciones bidireccionales, 109
CALCULAR función y, 168
Función CROSSJOIN, tablas y, 372-374, 383-384
Función MONEDA, 51
Función DATABLE, creando tablas estáticas, 392-393
Función FECHA, 51, 52
Función DATEADD, cálculos de inteligencia de tiempo,
237-238, 262-269
Función DATESINPERIOD, totales anuales móviles,
243-244
Función DATESMTD, cálculos de inteligencia de tiempo,
259, 276-277
Función DATESQTD, cálculos de inteligencia de tiempo,
259, 276-277
Función DATESYTD
elementos de cálculo, que se aplican a expresiones, 293-296
cálculos de inteligencia de tiempo, 259, 260, 261-262,
276-277
Función DATEVALUE, 51
Función DETAILROWS, reutilizando expresiones de tabla,
388-389
Función DISTINCT
relaciones físicas calculadas y circulares
dependencias, 477-478
filtrar contextos, 111-112
Relaciones basadas en rangos (calculadas físicas
relaciones), 476
Función UNION y, 375-378
Función DISTINCTCOUNT
evitando los filtros de mesa, 699-704
calcular las ventas en la misma tienda, 535-536
Optimización de DAX, 699-704
Función DIVIDE, optimización DAX, 684-687
Función ANTERIOR, contextos de evaluación, 97-98
Sobresalir, 6-7
EXCEPTO función, tablas y, 379-381
Función FILTRO
Función CALCULATABLE versus, 363-365
contextos de evaluación, 98-101
contextos de fila anidados en la misma tabla, 92-93, 94-
95
Relaciones basadas en rangos (calculadas físicas
relaciones), 474-476
cálculos de inteligencia de tiempo, 228-232
transfiriendo filtros, 481-482, 484-485
Función FILTROS
filtrar contextos, 322-324
Función VALORES versus, 322-324
Función FIRSTDATE, cálculos de inteligencia de tiempo,
269, 270
Función FIRSTNONBLANK, inteligencia de tiempo
cálculos 256-257, 270-271
Función FORMAT, 51
IN función, tablas y, 387-388
Función GENERAR, creación de consultas, 414-417
Función GENERATEALL, creación de consultas, 417
Función GENERATESERIES, tablas y, 393-394
Función GROUPBY
consultas de autoría, 420-423
Función RESUMEN y, 420-423
Función HASONEVALUE
filtrar contextos, 314-318
tablas como valores escalares, 73
funciones de información, 48-49
Función INT, 51
Función INTERSECT
mesas y, 378-379
transfiriendo filtros, 483-484
Función ISCROSSFILjected, contextos de filtro, 319-
322
Función ISEMPTY, contextos de filtro, 330-332
Función ESFILTERIZADA
filtrar contextos, 319, 320-322
cálculos de inteligencia de tiempo, 268-269
Función ISNUMBER, 48-49
Función ISONORAFTER
consultas de autoría, 417-419
Función TOPN y, 417-419
Función ISSELECTEDMEASURE,
incluyendo / excluyendo medidas de los elementos de
cálculo, 304-306
Función ESSUBTOTAL y función RESUMEN,
402-403
Función KEEPFILTERS, 461-462
CALCULAR función y, 135-138, 142-143,
146-148, 164, 168-169
orden de evaluación, 146-148
transfiriendo filtros, 482-483, 484
Función LASTDATE, cálculos de inteligencia de tiempo,
248-249, 254, 255, 269-270
Función LASTNONBLANK, 250-254, 255, 270-271
funciones lógicas
SI función, 46-47
Función SIERROR, 47
Función INTERRUPTOR, 47-48
Función LOOKUPVALUE, 444, 473
funciones matemáticas, 49
Función NATURALINNERJOIN, creación de consultas,
423-425
Función NATURALLEFTOUTERJOIN, creación
consultas, 423-425
funciones anidadas, orden de llamada de inteligencia de tiempo
funciones, 245-246
Función NEXTDAY, orden de llamada del tiempo anidado
funciones de inteligencia, 245-246
Función PARALLELPERIOD, inteligencia de tiempo
cálculos 238-239
Función PREVIOUSMONTH, inteligencia de tiempo
cálculos 239
Función RANK.EQ, 210
Función RANKX, secuencia de numeración de eventos
(cálculos), 538-539
Función RELACIONADA
CALCULAR función y, 443-444
columnas calculadas, 443-444
transiciones de contexto en tablas expandidas, 455
tablas ampliadas, 441-444
filtrar contextos y relaciones, 109
contextos de filas anidadas en diferentes tablas, 92
contextos y relaciones de fila, 103-105
filtros de tabla y tablas expandidas, 454
Función RELATEDTABLE
filtrar contextos y relaciones, 109
contextos de filas anidadas en diferentes tablas, 91-92
contextos y relaciones de fila, 103-105
funciones relacionales, 53-54
Función ROLLUP, 401-402, 403
Función FILA
creando tablas estáticas, 391-392
medidas de prueba, 400-401
Función SAMEPERIODLASTYEAR
orden de llamada de funciones de inteligencia de tiempo anidadas,
245-246
calcular las ventas del año anterior hasta las ventas del último día
(cálculos), 540-544
cálculos de inteligencia de tiempo, 237
Función SAMPLE, creación de consultas, 427-428
Función SELECTCOLUMNS, 390-391, 393-394
Función SELECTEDMEASURE, que incluye / excluye
medidas de elementos de cálculo, 304-306
Función SELECTEDMEASUREFORMATSTRING,
291
Función SELECTEDVALUE
relaciones físicas calculadas y circulares
dependencias, 479-480
calcular las ventas en la misma tienda, 533-534
transiciones de contexto en tablas expandidas, 454-455
filtrar contextos, 318-319
tablas como valores escalares, 73-74
Función STARTOFQUARTER, inteligencia de tiempo
cálculos 256-257
Función SUSTITUIR CON ÍNDICE, creación
consultas, 425-427
Función SUMA en columnas calculadas, 88-89
Función RESUMEN
consultas de autoría, 401-403, 433-434
función de autoexistencia (consultas), 433-434
columnas (tablas) y, 401
filtrar contextos, 112
Función GROUPBY y, 420-423
Función ISSUBTOTAL y, 402-403
Función ROLLUP y, 401-402, 403
filtros de tabla y tablas expandidas, 453-454
mesas y, 369-372, 373-374, 383-384
transfiriendo filtros, 484-485
Función SUMMARIZECOLUMNS
consultas de autoría, 403-409, 429-434
función de autoexistencia (consultas), 429-434
filtrar argumentos, 406-409
IGNORAR modificador, 403-404
Modificador ROLLUPADDISSUBTOTAL, 404-406
Modificador ROLLUPGROUP, 406
Función TREATAS y, 407-408
funciones de tabla, 57
TODAS las funciones, 63-sesenta y cinco, 66-67
Función ALLEXCEPT, sesenta y cinco-66
Función ALLSELECTED, 74-76
columnas calculadas y, 59
tablas calculadas, 59
Función DISTINCT, 68, 70-71
Función FILTRO, 57-58, 60-63
medidas y, 59
anidando 58-59
Función RELATEDTABLE, 58-59
Función VALORES, 67-74
funciones de texto, 50-51
Función HORA, 51, 52
funciones de inteligencia de tiempo (anidadas), orden de llamada de,
245-246
Función TOPN
consultas de autoría, 409-414
Función ISONORAFTER y, 417-419
Orden de clasificación, 410
Función TOPNSKIP, creación de consultas, 420
Función TREATAS, 378
linaje de datos, 467-468
filtrar contextos y linaje de datos, 334-336
Función SUMMARIZECOLUMNS y, 407-408
transfiriendo filtros, 482-483, 484
Función UNION y, 377-378
funciones trigonométricas, 50
Función UNION
CALCULAR función y, 376-378
Función DISTINCT y, 375-378
mesas y, 374-378
Función TREATAS y, 377-378
Función USERELATIONSHIP
relaciones activas, 450-451
CALCULAR función y, 164-168
relaciones no activas y ambigüedad, 516-517
Función VALOR, 51
Función VALORES
TODAS las funciones y, 327-328
Función ALLEXCEPT versus, 326-328
relaciones físicas calculadas y circulares
dependencias, 477-480
calcular porcentajes, 133-134
filtrar contextos, 322-324, 327-328
Función FILTROS versus, 322-324
Relaciones basadas en rangos (calculadas físicas
relaciones), 474-476
GRAMO
Función GENERAR, creación de consultas, 414-417
Función GENERATEALL, creación de consultas, 417
Función GENERATESERIES, tablas y, 393-394
generar errores (manejo de errores), 38-39
granularidad
cálculos e iteradores, 211-214
relaciones (modelos de datos), 507-512
Función GROUPBY
consultas de autoría, 420-423
Función RESUMEN y, 420-423
H
codificación hash (compresión VertiPaq), 555-556
Función HASONEVALUE
filtrar contextos, 314-318
tablas como valores escalares, 73
ayuda, formatear el código DAX, 42
jerarquías, 345, 362
jerarquías de atributos (optimización del modelo de datos),
incapacitante 604
Columnas Columna Tamaño de jerarquías (VertiPaq
Analizador), 582
DAX, 13-14
MDX, 13-14
Jerarquías P / C (padre / hijo), 350-361, 362
porcentajes, computación, 345
SI condiciones, 349
Medidas de PercOnCategory, 348
Medidas de PercOnParent, 346-349
relación a los cálculos de los padres, 345
SSAS y, 561-562
Use la columna Tamaño de jerarquías (Analizador VertiPaq), 582
I
SI condiciones
calcular porcentajes sobre jerarquías, 349
Optimización de DAX, 678-679
DIVIDIR función y, 684-687
iteradores, 687-690
en medidas, 679-683
SI función, 36, 37, 46-47
Función SIERROR, 35-36, 37-38, 47
Modificador IGNORE, función SUMMARIZECOLUMNS,
403-404
funciones de información, 48-49
Función INT, 51
Tipo de datos entero, 21
Función INTERSECT
mesas y, 378-379
transfiriendo filtros, 483-484
relaciones intrainsulares, 489
relaciones no válidas, filas en blanco y, 68-71
Función ESBLANCO, 36
Función ISCROSSFILjected, contextos de filtro, 319-322
Función ISEMPTY, contextos de filtro, 330-332
Función ISERROR, 36, 38
Función ESFILTERIZADA
filtrar contextos, 319, 320-322
cálculos de inteligencia de tiempo, 268-269
Función ISNUMBER, 48-49
Función ISONORAFTER
consultas de autoría, 417-419
Función TOPN y, 417-419
Función ISSELECTEDMEASURE, que incluye / excluye
medidas de los elementos de cálculo, 304-306
Función ISSUBTOTAL, 402-403
iteradores, 8, 43, 44, 209-215
Iteradores ADDCOLUMNS, 196-199
promedios (medias)
computación con función AVERAGEX, 199-201
medias móviles, 201-202
regresando con la función PROMEDIO, 199
regresando con la función AVERAGEA, 199
Iteradores AVERAGEX, 188
comportamiento de, 91
granularidad de cálculo, 211-214
cardinalidad 188-190
Función CONCATENATEX y, 194-196
transiciones de contexto, apalancamiento, 190-194
Optimización de DAX
SI condiciones, 687-690
iteradores anidados, 693-699
Función FILTRO como, 60-61
iteradores anidados
Optimización de DAX, 693-699
aprovechando las transiciones de contexto, 190-194
parámetros de, 187-188
Función RANK.EQ, 210
Iteradores RANKX, 188, 202-210
Iteradores ROW CONTEXT, 187-188
contextos de fila y, 90-91
Iteradores SELECTCOLUMNS, 196, 197-199
Iteradores SUMX, 187-188
mesas, regresando, 196-199
J
operadores de unión, consultas xmSQL, 628-630
K
Función KEEPFILTERS, 461-462
CALCULAR función y, 135-138, 139-143, 164,
168-169
orden de evaluación, 146-148
filtrar varias columnas, 142-143
transfiriendo filtros, 482-483, 484
L
ventas del último día (cálculos), calculando las ventas del año
anterior hasta, 539-544
Función LASTDATE, cálculos de inteligencia de tiempo,
248-249, 254, 255, 269-270
Función LASTNONBLANK, cálculos de
inteligencia de tiempo, 250-254, 255, 270-271
evaluaciones perezosas, variables, 181-183
cálculos a nivel de hoja
DAX, 14
MDX, 14
error de año bisiesto, 22
lista de valores. Ver filtros de argumentos
funciones lógicas
SI función, 46-47
Función SIERROR, 47
Función INTERRUPTOR, 47-48
operadores logicos, 23
planes de consultas lógicas, 612, 614, 650-651
Función LOOKUPVALUE, 444, 473
METRO
mantenimiento (código), función FILTRO, 62-63
relaciones multilaterales (modelos de datos), 2, 3
relaciones de muchos a muchos. Ver MMR
Marcar como tabla de fechas, 232-233
materialización (consultas), 568-571
funciones matemáticas, 49
Función MAX, 43
MDX (Expresiones multidimensionales)
DAX y, 12
jerarquías, 13-14
cálculos a nivel de hoja, 14
espacio multidimensional versus tabular, 12
como lenguaje de programación, 12-13
como lenguaje de consulta, 12-13
consultas, 546
jerarquías de atributos (optimización del modelo de datos),
incapacitante 604
DAX y, 613
ejecutando 546
consultas de reproducción, creación, 663-664
medios (promedios)
promedios de cálculo, función AVERAGEX, 199-201
medias móviles, 201-202
promedios de retorno
Función PROMEDIO, 199
Función AVERAGEA, 199
MEASURE palabra clave, DEFINE secciones (consultas de
creación), 399
medidas, 26-28
TODAS las funciones y, 63-64
columnas calculadas, 42
elegir entre columnas calculadas y
medidas, 29-30
diferencias entre columnas calculadas y
medidas, 29
usando medidas en columnas calculadas, 30
elementos de cálculo, incluidas / excluidas medidas
de, 304-306
columnas en, contextos de evaluación, 89-90
transiciones de contexto, 157-160
DEFINE MEASURE cláusulas en EVALUATE
declaraciones, 59
definiendo en tablas, 29
expresiones, 29
IF condiciones, optimización DAX, 679-683
Función ISSELECTEDMEASURE,
incluyendo / excluyendo medidas del cálculo
elementos, 304-306
Medidas de PercOnCategory, cálculo de porcentajes
sobre jerarquías, 348
Medidas de PercOnParent, calculando porcentajes sobre
jerarquías, 346-349
medidas de consulta, 399, 662-663
Función SELECTEDMEASURE, que incluye / excluye
medidas de elementos de cálculo, 304-306
filtros de mesa en, 447-450
funciones de tabla, 59
pruebas, 399-401
Función VALORES y, 67-68
tamaño de memoria, selección de hardware VertiPaq, 574, 576
velocidad de memoria, selección de hardware VertiPaq, 574, 575-
576
Función MIN, 43
MMR (relaciones de muchos a muchos), 489, 490, 494, 507
mesas de puente, 494-499
dimensionalidad común, 500-504
relaciones débiles, 504-506
moviendo totales anuales, computación, 243-244
medias móviles, función CALCULAR, 201-202
Cálculos de MTD (mes hasta la fecha), cálculos de
inteligencia de tiempo, 235-236, 259-262, 276-277
comentarios de varias líneas, 18
varias columnas
Función DISTINCT y, 71
relaciones de varias columnas (calculadas físicas
relaciones), 471-473
Función VALORES y, 71
Variable MultipleItemSales, 58
norte
Grupo de cálculo de nombre, 288
Elemento de cálculo de nombre, 288
nombrar variables, 182
cálculos de tablas de estrechamiento, 384-386
Función NATURALINNERJOIN, creación de consultas,
423-425
Función NATURALLEFTOUTERJOIN, creación de
consultas, 424-425
funciones anidadas, orden de llamada de funciones de inteligencia de tiempo,
245-246
iteradores anidados
Optimización de DAX, 693-699
aprovechando las transiciones de contexto, 190-194
anidando
filtrar contextos, en variables, 184-185
Funciones de FILTRO, 61-62
varias filas, en variables, 184
contextos de fila
en diferentes mesas, 91-92
en la misma mesa, 92-97
funciones de tabla, 58-59
Declaraciones VAR / RETURN, 179-180
nuevos clientes, informática (tablas), 380-381, 386-387
Función NEXTDAY, orden de llamada de funciones de
inteligencia de tiempo anidadas, 245-246
relaciones no activas, ambigüedad, 515-517
días no laborables entre dos fechas, computación, 523-
525
secuencias de numeración de eventos (cálculos), 536-539
números, conversiones, 19-21
O
relaciones unilaterales (modelos de datos), 2, 3
relaciones de uno a muchos. Ver SMR
Relaciones uno a uno. Ver SSR
saldos de apertura / cierre (cálculos de
inteligencia de tiempo), 254-258
operadores, 23
operadores aritméticos, 23
división por cero, 32-33
valores vacíos / faltantes, 33-35
manejo de errores, 32-35
operadores de comparación, 23
operadores logicos, 23
sobrecarga 19-20
operadores de paréntesis, 23
operadores de concatenación de texto, 23
optimizando
columnas
columnas de alta cardinalidad, 603
optimización dividida, 602-603
optimización del almacenamiento, 602-603
modelos de datos con VertiPac, 579
agregaciones, 587-588
filtrado cruzado, 590
desnormalizar datos, 584-591
recopilación de información del modelo de datos, 579-584
cardinalidad de la relación, 586-587
DAX, 657
cuellos de botella, 668
Función CallbackDataID, 690-693
implementación de cambios, 668
declaraciones condicionales, 708-709
transiciones de contexto, 672-678
Función DISTINCTCOUNT, 699-704
expresiones, identificando una sola expresión DAX para
mejoramiento, 658-661
condiciones de filtrado, 668-672
SI condiciones, 678-683, 684-690
evaluaciones múltiples, evitando con variables, 704-
708
iteradores anidados, 693-699
planes de consulta, 664-667
consultas de reproducción, creación, 661-664
Cuellos de botella SE / FE, identificación, 667-668
tiempos del servidor, 664-667
consultas de prueba, reejecución, 668
lista de quehaceres, 658
variables, 704-708
Condiciones de quirófano, tablas como filtros, 381-384
Cláusulas ORDER BY en declaraciones EVALUATE, 60
órdenes (ejemplo), duración de cálculo de, 26
Valores ordinales, elementos calculados, 289
sobrescritura de filtros, función CALCULAR, 120-122, 136
PAG
Jerarquías P / C (padre / hijo), 350-361, 362
paginación, selección de hardware VertiPaq, 576-577
paralelismo
Función CallbackDataID, 641
Consultas de VertiPaq SE, 641
Función PARALLELPERIOD, cálculos de inteligencia
de tiempo, 238-239
operadores de paréntesis, 23
particionamiento y SSAS, 562-563
Columna de número de particiones (Analizador VertiPaq), 582
porcentajes, computación, 135
TODAS las funciones, 63-64
Función ALLSELECTED, 75-76
Función CALCULAR, 124
TODAS las funciones, 125-132
Función ALLEXCEPT, 135
Función VALORES, 133-134
jerarquías, 345
SI condiciones, 349
Medidas de PercOnCategory, 348
Medidas de PercOnParent, 346-349
relación a los cálculos de los padres, 345
Medidas de PercOnCategory, calculando porcentajes sobre
jerarquías, 348
Medidas de PercOnParent, calculando porcentajes sobre
jerarquías, 346, 348-349
PercOnSubcategory medidas, calculando porcentajes
sobre jerarquías, 346-348
planes de consulta física, 612-613, 614-616, 651-652
relaciones fisicas
relaciones físicas calculadas, 471-473
dependencias circulares, 476-480
relaciones basadas en rangos, 474-476
cardinalidad 489-490
elegir 506-507
direcciones de filtro cruzado, 490
dirección de filtro cruzado bidireccional, 490, 491-493,
507
dirección de filtro cruzado único, 490
relaciones entre islas, 489
relaciones intrainsulares, 489
MMR, 489, 490, 494, 507
mesas de puente, 494-499
dimensionalidad común, 500-504
relaciones débiles, 504-506
SMR, 489, 490, 493, 507
SSR, 489, 490, 493-494
relaciones sólidas, 488
relaciones virtuales versus, 506-507
relaciones débiles, 488, 489, 504-506
Power BI
Fecha / hora automática, 218-219
DAX y, 14-15
DAX Studio y, 609-611
filtrar contextos, 84-85
Informes de Power BI y consultas DAX, 609-610
Power Pivot para Excel
columnas de fecha automáticas, 219
plantillas de tablas de fechas, 220
Grupo de cálculo de precedencia, 288, 299-304
precalcular valores (cálculos), calcular los días de
trabajo entre dos fechas, 525-527
ventas del año anterior hasta las ventas del último día
(cálculos), computación, 539-544
Función PREVIOUSMONTH, cálculos de inteligencia
de tiempo, 239
Columna de claves primarias / alternativas (tablas), 599
columna de claves primarias / alternativas (tablas), 600
mesas de procesamiento, 550
Cálculos de PYTD (año anterior hasta la fecha), elementos de
cálculo y recursividad lateral, 307-308
Q
Cálculos QTD (trimestre hasta la fecha), cálculos de
inteligencia de tiempo, 235-236, 259-262, 276-277
columna de atributos cualitativos (tablas), 599, 600
columna de atributos cuantitativos (tablas), 599, 600-601
consultas
Consultas DAX
capturando 609-611
Función DISTINCTCOUNT, 634-635
ejecutando 546
Planes de consulta DAX, 612-613
DirectQuery, 546, 548, 549, 617
Consultas de DirectQuery SE
modelos de datos compuestos, 646-647
leyendo, 645-646
Árboles de expresión, 612
FE, 546, 547
cachés de datos, 547
operadores de, 547
implementación de un solo subproceso, 547
materialización, 568-571
Consultas MDX, 546
DAX y, 613
deshabilitar jerarquías de atributos (modelo de datos
mejoramiento), 604
ejecutando 546
medidas de consulta, creando con DAX Studio, 662-663
consultas de reproducción, creando
crear medidas de consulta con DAX Studio, 662-
663
en DAX, 661-662
en MDX, 663-664
SE, 546, 616-617
agregaciones, 548
cachés de datos, 547
DirectQuery, 548
operadores de, 547
implementaciones paralelas, 548
VertiPaq, 547-549, 550-577
consultas de prueba, reejecución (optimización de DAX), 668
VertiPaq, 546, 547-548, 550. Ver también modelos de datos,
optimizar con VertiPaq
agregaciones, 571-573
bases de datos en columnas, 550-553
compresión, 553-562
cachés de datos, 549
DMV, 563-565
selección de hardware, 573-577
codificación hash, 555-556
jerarquías, 561-562
materialización, 568-571
implementaciones multiproceso, 548
fraccionamiento, 562-563
mesas de procesamiento, 550
recodificación, 559
relaciones (modelos de datos), 561-562, 565-568
RLE, 556-559
operaciones de escaneo, 549
segmentación, 562-563
ordenar órdenes, 560-561
codificación de valor, 554-555
Consultas de VertiPaq SE, 624
modelos de datos compuestos, 646-647
cachés de datos y paralelismo, 635-637
Función DISTINCTCOUNT, 634-635
tiempo de escaneo, 632-634
consultas xmSQL y, 624-632
consultas xmSQL, 624
funciones de agregación, 625-627
operaciones aritméticas, 627
eventos por lotes, 630-632
operaciones de filtrado, 628-630
unirse a los operadores, 630
consultas, autoría, 395
Función ADDMISSINGITEMS, 419-420, 432-433
función de autoexistencia, 428-434
Estudio DAX, 395
DEFINIR secciones
MEASURE palabra clave en, 399
VAR palabra clave en, 397-399
EVALUAR declaraciones
Función ADDMISSINGITEMS, 419-420, 432-
433
ejemplo de, 396
variables de expresión y, 398
Función GENERAR, 414-417
Función GENERATEALL, 417
Función GROUPBY, 420-423
Función ISONORAFTER, 417-419
Función NATURALINNERJOIN, 423-425
Función NATURALLEFTOUTERJOIN, 423-425
variables de consulta y, 398
Función FILA, 400-401
Función MUESTRA, 427-428
Función SUSTITUIR CON ÍNDICE, 425-427
Función RESUMEN, 401-403, 433-434
Función SUMMARIZECOLUMNS, 403-409,
429-434
sintaxis de, 396-399
Función TOPN, 409-414
Función TOPNSKIP, 420
variables de expresión, 397-399
Función GENERAR, 414-417
Función GENERATEALL, 417
Función GROUPBY, 420-423
Función ISONORAFTER, 417-419
MEDIR en las secciones DEFINIR, 399
medidas
medidas de consulta, 399
pruebas, 399-401
Función NATURALINNERJOIN, 423-425
Función NATURALLEFTOUTERJOIN, 423-425
variables de consulta, 397-399
Función FILA, medidas de prueba, 400-401
Función MUESTRA, 427-428
contextos de filtro de sombra, 457-462
Función SUSTITUIR CON ÍNDICE, 425-427
Función RESUMEN, 401-403, 433-434
Función SUMMARIZECOLUMNS, 403-409, 429-
434
Función TOPN, 409-414
Función TOPNSKIP, 420
VAR en las secciones DEFINE, 397-399
Eventos de fin de consulta (SQL Server Profiler), 621
planes de consulta
capturando consultas
Estudio DAX, 617-620
Analizador de SQL Server, 620-623
coleccionismo 613-614
Optimización de DAX, 664-667
planes de consultas lógicas, 612, -614, 650-651
planes de consulta física, 612-613, 614-616, 651-652
leyendo, 649-655
variables de consulta, 397-399
R
relaciones basadas en rangos (relaciones
físicas calculadas), 474-476
Función RANK.EQ, 210
Función RANKX, secuencias de numeración de
eventos (cálculos), 538-539
Iteradores RANKX, 188, 202-210
relación a los cálculos de los padres, calcular los porcentajes sobre
las jerarquías, 345
legibilidad (código), función FILTRO, 62-63
recursividad (lateral), elementos de cálculo, 306-311
recodificar
SSAS y, 559
VertiPaq, 559
hacer referencia a columnas en tablas, 17-18
actualización de datos, SSAS (SQL Server Analysis Services),
549-550
Función RELACIONADA
CALCULAR función y, 443-444
columnas calculadas, 443-444
transiciones de contexto en tablas expandidas, 455
tablas ampliadas, 441-444
filtrar contextos, relaciones y, 109
contextos de filas anidadas en diferentes tablas, 92
contextos y relaciones de fila, 103-105
filtros de tabla y tablas expandidas, 454
Función RELATEDTABLE, 58-59
filtrar contextos, relaciones y, 109
contextos de filas anidadas en diferentes tablas, 91-92
contextos y relaciones de fila, 103-105
funciones relacionales, 53-54
relaciones (modelos de datos), 2
Relaciones 1: 1, 2
relaciones activas
ambigüedad, 514-515
Función CALCULATABLE, 451-453
tablas expandidas y, 450-453
Función USERELATIONSHIP, 450-451
ambigüedad, 512-513
relaciones activas, 514-515
relaciones no activas, 515-517
filtrado bidireccional, 3-4
relaciones bidireccionales, 106, 109
relaciones físicas calculadas, 471
dependencias circulares, 476-480
relaciones de varias columnas, 471-473
relaciones basadas en rangos, 474-476
cardinalidad 489-490, 586-587, 590-591
cadenas 3
columnas, 3
direcciones de filtro cruzado, 3, 490
dirección de filtro cruzado bidireccional, 490, 491-493,
507
dirección de filtro cruzado único, 490
relaciones entre islas, 489
DAX y SQL, 9
direcciones de, 3-4
contextos de evaluación y, 101-102
filtrar contextos, 106-109
contextos de fila, 102-105
tablas ampliadas, 437-441
granularidad, 507-512
relaciones intrainsulares, 489
relaciones inválidas y filas en blanco, 68-71
relaciones multilaterales, 2, 3
MMR, 489, 490, 494, 507
mesas de puente, 494-499
dimensionalidad común, 500-504
relaciones débiles, 504-506
relaciones no activas, ambigüedad, 515-517
relaciones unilaterales, 2, 3
rendimiento, 507
relaciones fisicas
relaciones físicas calculadas, 471-480
cardinalidad 489-490
elegir 506-507
direcciones de filtro cruzado, 490-493
relaciones entre islas, 489
relaciones intrainsulares, 489
MMR, 489, 490, 494-506, 507
SMR, 489, 490, 493, 507
SSR, 489, 490, 493-494
relaciones sólidas, 488
relaciones virtuales versus, 506-507
relaciones débiles, 488, 489, 504-506
Informes de relaciones (VertiPaq Analyzer), 584
Columna Tamaño de relación (Analizador VertiPaq), 582
relaciones, tablas expandidas, 437-441
relaciones superficiales en eventos por lotes (xmSQL
consultas), 630-632
SMR, 489, 490, 493, 507
SSAS y, 561-562
SSR, 489, 490, 493-494
relaciones sólidas, 488
transfiriendo filtros, 480-481
Función CALCULAR, 482
CONTIENE función, 481-482
Función FILTRO, 481-482, 484-485
Función INTERSECT, 483-484
Función TREATAS, 482-483, 484
filtrado unidireccional, 4
Función USERELATIONSHIP, no activa
relaciones y ambigüedad, 516-517
VertiPaq y, 565-568
relaciones virtuales, 480, 507
segmentación dinámica, 485-488
relaciones físicas versus, 506-507
transfiriendo filtros, 480-485
relaciones débiles, 2, 439, 488, 489, 504-506
consultas de reproducción, creando
en DAX, 661-662
en MDX, 663-664
medidas de consulta, creando con DAX Studio, 662-663
reutilizando expresiones de tabla, 388-389
RLE (codificación de longitud de ejecución), VertiPaq, 556-559
Función ROLLUP, 401-402, 403
Modificador ROLLUPADDISSUBTOTAL, función
SUMMARIZECOLUMNS, 404-406
Modificador ROLLUPGROUP, función
SUMMARIZECOLUMNS, 406
Iteradores ROW CONTEXT, 187-188
contextos de fila, 80
CALCULAR función y, 148-151
referencias de columna, 87
ejemplos de, 86-87
filtrar contextos versus, 85
iteradores y, 90-91
contextos de filas anidadas
en diferentes mesas, 91-92
en la misma mesa, 92-97
relaciones y, 102-105
Función FILA
tablas estáticas, creando, 391-392
medidas de prueba, 400-401
filas (tablas)
Función ALLNOBLANKROW, 464, 465
filas en blanco, relaciones no válidas, 68-71
CONTAINSROW función, 387-388
Función DETAILROWS, 388-389
anidando en variables, 184
Función MUESTRA, 427-428
Función TOPN, 409-414
Columna de filas (Analizador VertiPaq), 581, 583
S
Ventas
información de presupuesto / ventas (cálculos), mostrando
juntos, 527-530
ventas del año anterior hasta las ventas del último día (cálculos),
informática, 539-544
ventas en la misma tienda (cálculos), computación, 530-536
ventas en la misma tienda (cálculos), computación, 530-536
Función SAMEPERIODLASTYEAR
calcular las ventas del año anterior hasta las ventas del último día
(cálculos), 540-544
funciones de inteligencia de tiempo anidadas, orden de llamada de, 245-
246
cálculos de inteligencia de tiempo, 237
Función SAMPLE, creación de consultas, 427-428
expresiones escalares, 57-58
valores escalares
almacenar en variables, 176, 181
tablas como, 71-74
SE (motores de almacenamiento), 546
agregaciones, 548
cuellos de botella, identificación, 667-668
cachés de datos, 547
DirectQuery, 548, 549
operadores de, 547
implementaciones paralelas, 548
consultas, 616-617
Consultas SE, copie las entradas de consultas VertiPaq SE
VertiPaq, 547-548, 550. Ver también modelos de datos,
optimizar con VertiPaq
agregaciones, 571-573
bases de datos en columnas, 550-553
compresión, 553-562
cachés de datos, 549
DMV, 563-565
selección de hardware, 573-577
codificación hash, 555-556
jerarquías, 561-562
materialización, 568-571
implementaciones multiproceso, 548
fraccionamiento, 562-563
mesas de procesamiento, 550
recodificación, 559
relaciones (modelos de datos), 561-562, 565-568
RLE, 556-559
operaciones de escaneo, 549
segmentación, 562-563
ordenar órdenes, 560-561
codificación de valor, 554-555
Consultas de VertiPaq SE, 624-632
segmentación
segmentación dinámica y relaciones virtuales, 485-
488
SSAS y, 562-563
Columna de número de segmentos (analizador VertiPaq), 582
Función SELECTCOLUMNS, 390-391, 393-394
Iteradores SELECTCOLUMNS, 196, 197-199
Función SELECTEDMEASURE, que incluye / excluye
medidas de los elementos de cálculo, 304-306
Función SELECTEDMEASUREFORMATSTRING, 291
Función SELECTEDVALUE
relaciones físicas calculadas, circular
dependencias, 479-480
transiciones de contexto en tablas expandidas, 454-455
filtrar contextos, 318-319
ventas en la misma tienda (cálculos), computación, 533-534
tablas como valores escalares, 73-74
cálculos semi-aditivos, cálculos de inteligencia de tiempo,
246-248
secuencias de eventos (cálculos), numeración, 536-539
tiempos del servidor, optimización DAX, 664-667
contextos de filtro de sombra, 457-462
relaciones superficiales en eventos por lotes (consultas xmSQL),
630-632
recursividad lateral, elementos de cálculo, 306-311
filtros simples
filtros de forma arbitraria versus, 337
definido 337
dirección de filtro cruzado único (relaciones físicas), 490
modelos de datos únicos
Modo DirectQuery, 488
Modo VertiPaq, 488
comentarios de una sola línea, 18
SMR (relaciones de uno a varios), 489, 490, 493, 507
orden de clasificación, determinante, cláusulas ORDER BY, 60
órdenes de clasificación
SSAS y, 560-561
VertiPaq, 560-561
SQL (lenguaje de consulta estructurado)
condiciones, 11
DAX y, 9
como lenguaje declarativo, 10
manejo de errores, valores vacíos / faltantes, 35
subconsultas, 11
Analizador de SQL Server
Eventos de DirectQuery End, 621
Eventos de fin de consulta, 621
planes de consulta, captura de información de perfiles, 620-623
Eventos de coincidencia de caché de consultas de VertiPaq SE, 621
Eventos VertiPaq SE Query End, 621
Función SQRT, 36
SSAS (servicios de análisis de SQL Server)
actualización de datos, 549-550
DMV, 563-565
jerarquías, 561-562
fraccionamiento, 562-563
mesas de procesamiento, 550
recodificación, 559
relaciones (modelos de datos), 561-562
segmentación, 562-563
ordenar órdenes, 560-561
SSR (relaciones de un solo individuo), 489, 490, 493-494
esquemas en estrella, desnormalización de datos y optimización de
modelos de datos, 586
Función STARTOFQUARTER, cálculos de inteligencia
de tiempo, 256-257
tablas estáticas, creando
Función DATABLE, 392-393
Función FILA, 391-392
almacenar
blockz, en variables, 176, 181
columnas (tablas), 601-602
resultados parciales de cálculos, en variables, 176-177
valores escalares, en variables, 176, 181
tablas, en variables, 58
conversiones de cadenas, 19-21
relaciones sólidas, 488
ejemplo de subcategorías / categorías, TODAS las funciones y,
66-67
subconsultas
DAX, 11
SQL, 11
Función SUSTITUIR CON ÍNDICE, crear consultas,
425-427
Función SUMA, 42-43, 44-45, 88-89
Función RESUMEN
consultas de autoría, 401-403, 433-434
función de autoexistencia (consultas), 433-434
columnas (tablas) y, 401
filtrar contextos, 112
Función GROUPBY y, 420-423
Función ISSUBTOTAL y, 402-403
Función ROLLUP y, 401-402, 403
filtros de tabla y tablas expandidas, 453-454
mesas y, 369-372, 373-374, 383-384
transfiriendo filtros, 484-485
Función SUMMARIZECOLUMNS
consultas de autoría, 403-409, 429-434
función de autoexistencia (consultas), 429-434
filtrar argumentos, 406-409
IGNORAR modificador, 403-404
Modificador ROLLUPADDISSUBTOTAL, 404-406
Modificador ROLLUPGROUP, 406
Función TREATAS y, 407-408
Función SUMX, 45
Iteradores SUMX, 187-188
Función INTERRUPTOR, 47-48
T
constructores de mesas, 24
expresiones de tabla, declaraciones EVALUAR, 59-60
filtros de tabla, función DISTINCTCOUNT, 699-704
funciones de tabla, 57
TODAS las funciones
columnas y, 64-sesenta y cinco
calcular porcentajes, 63-64
medidas y, 63-64
sintaxis de, 63
ejemplo de categorías / subcategorías principales, 66-67
Función VALORES versus, 67
Función ALLEXCEPT, sesenta y cinco-66
Función ALLSELECTED, 74-76
columnas calculadas y, 59
tablas calculadas, 59
Función DISTINCT, 71
filas en blanco y relaciones no válidas, 68, 70-71
columnas calculadas, 68
varias columnas, 71
Función VALORES versus, 68
Función FILTRO, 57-58
mantenimiento / legibilidad del código, 62-63
como iterador, 60-61
anidando 61-62
sintaxis de, 60
medidas y, 59
anidando 58-59
Función RELATEDTABLE, 58-59
Función VALORES, 71
TODAS las funciones versus, 67
filas en blanco y relaciones no válidas, 68-71
columnas calculadas, 68
tablas calculadas, 68
Función DISTINTA versus, 68
medidas y, 67-68
varias columnas, 71
tablas como valores escalares, 71-74
Columna de% de tamaño de tabla (analizador VertiPaq), 582
Columna Tamaño de tabla (analizador VertiPaq), 581
variables de tabla, 181-182
mesas, 363
Función ADDCOLUMNS, 366-369, 371-372
filas en blanco, relaciones no válidas, 68-71
mesas puente, MMR, 494-499
Función CALCULAR, tablas como filtros, 382-384
columnas calculadas, 25-26, 42
elegir entre columnas calculadas y
medidas, 29-30
diferencias entre columnas calculadas y
medidas, 29
expresiones, 29
usando medidas en columnas calculadas, 30
tablas calculadas, 59
creando 390-391
Función DISTINCT, 68
Función SELECTCOLUMNS, 390-391
Función VALORES, 68
Función CALCULATABLE, 363-365
columnas
Función ADDCOLUMNS, 366-369, 371-372
Columnas calculadas booleanas, 597-598
columnas calculadas y optimización del modelo de datos,
595-599
columnas calculadas, función RELACIONADA, 443-444
cardinalidad 603
cardinalidad y optimización del modelo de datos, 591-592
Columna de fecha, 592-595
definido 2
columna de atributos descriptivos (tablas), 600, 601-
602
filtración, 444-447
optimizar columnas de alta cardinalidad, 603
Columna de claves primarias / alternativas (tablas), 599
columna de claves primarias / alternativas (tablas), 600
columna de atributos cualitativos (tablas), 599, 600
columna de atributos cuantitativos (tablas), 599, 600-
601
referenciando, 17-18
relaciones, 3
Función SELECTCOLUMNS, 390-391, 393-394
optimización del almacenamiento, 602-603
almacenamiento 601-602
Función SUSTITUIR CON ÍNDICE, 425-427
Función RESUMEN y, 401
Función SUMMARIZECOLUMNS, 403-409,
429-434
columna de atributos técnicos (tablas), 600, 602
Columna de tiempo, 592-595
Analizador VertiPaq, 580-583
computación de nuevos clientes, 380-381, 386-387
CONTIENE función, 387-388
CONTAINSROW función, 387-388
Función CROSSJOIN, 372-374, 383-384
tablas de fechas
Función ADDCOLUMNS, 223-224
edificio, 220-224
Función CALENDARIO, 222
Función CALENDARAUTO, 222-224
plantillas de tablas de fechas (Power Pivot para Excel), 220
plantillas de fecha, 224
duplicando, 227
cargando desde otras fuentes de datos, 221
gestionar varias fechas, 224-228
Marcar como tabla de fechas, 232-233
múltiples tablas de fechas, 226-228
múltiples relaciones con tablas de fechas, 224-226
nombrar 221
definido 2
Función DETAILROWS, 388-389
EXCEPTO función, 379-381
tablas expandidas
relaciones activas, 450-453
filtros de columna versus filtros de tabla, 444-447
transiciones de contexto, 454-455
diferencias entre filtros de tabla y expandido
mesas, 453-454
filtrar contextos, 439-441
filtración, 444-447, 450-453
Función RELACIONADA, 441-444
relaciones, 437-441
filtros de mesa en medidas, 447-450
filtros de tabla versus filtros de columna, 444-447
expresiones, reutilización, 388-389
Función FILTRO versus CALCULATABLE
función, 363-365
filtración
CALCULAR función y, 445-447
filtros de columna versus, 444-447
en medidas, 447-450
como filtros, 381-384
Función GENERATESERIES, 393-394
En función, 387-388
Función INTERSECT, 378-379
iteradores, devolviendo tablas con, 196-199
medidas, definiendo en tablas, 29
estrechamiento de cálculos, 384-386
Función NATURALINNERJOIN, 423-425
Función NATURALLEFTOUTERJOIN, 423-425
Procesando, 550
registros, 2
reutilizando expresiones, 388-389
filas
Función ALLNOBLANKROW, 464, 465
CONTAINSROW función, 387-388
Función DETAILROWS, 388-389
Función MUESTRA, 427-428
Función TOPN, 409-414
como valores escalares, 71-74
Función SELECTCOLUMNS, 390-391, 393-394
tablas estáticas
creando con la función DATABLE, 392-393
creando con la función FILA, 391-392
almacenar en variables, 176, 181
Función RESUMEN, 369-372, 373-374, 383-384
tablas temporales en eventos por lotes (consultas xmSQL),
630-632
Función TOPN, 409-414
Función UNION, 374-378
variables, almacenando tablas en, 58
Modelo tabular
grupos de cálculo, creación, 281-288
Motores DAX y, 545-546
Consultas DAX, ejecutando, 546
DirectQuery, 546
Consultas MDX, ejecutando, 546
VertiPaq, 546
columna de atributos técnicos (tablas), 600, 602
plantillas
plantillas de tablas de fechas (Power Pivot para Excel), 220
plantillas de fecha, 224
tablas temporales en eventos por lotes (consultas xmSQL), 630-
632
consultas de prueba, reejecución (optimización de DAX), 668
texto
operadores de concatenación, 23
editar, formatear código DAX, 42
funciones de texto, 50-51
Columna de tiempo, optimización del modelo de datos, 592-595
Función HORA, 51, 52
cálculos de inteligencia de tiempo, 217
Fecha / hora automática (Power BI), 218-219
columnas de fecha automática (Power Pivot para Excel), 219
cálculos básicos, 228-232
funciones básicas, 233-235
Función CALCULAR, 228-232
Función CALCULATABLE, 259, 260-261
transiciones de contexto, 260
calendarios personalizados, 272
Función DATESYTD, 276-277
semanas, 272-275
tablas de fechas
Función ADDCOLUMNS, 223-224
edificio, 220-224
Función CALENDARIO, 222
Función CALENDARAUTO, 222-224
plantillas de tablas de fechas (Power Pivot para Excel), 220
plantillas de fecha, 224
duplicando, 227
cargando desde otras fuentes de datos, 221
gestionar varias fechas, 224-228
Marcar como tabla de fechas, 232-233
múltiples tablas de fechas, 226-228
múltiples relaciones con tablas de fechas, 224-226
nombrar 221
Función DATEADD, 237-238, 262-269
Función DATESINPERIOD, 243-244
Función DATESMTD, 259, 276-277
Función DATESQTD, 259, 276-277
Función DATESYTD, 259, 260, 261-262, 276-277
diferencias con respecto a períodos anteriores, computación, 241-
243
operaciones de obtención de detalles, 271
Función FILTRO, 228-232
Función FIRSTDATE, 269, 270
Función FIRSTNONBLANK, 256-257, 270-271
Función LASTDATE, 248-249, 254, 255, 269-270
Función LASTNONBLANK, 250-254, 255, 270-271
funciones de mezcla, 239-241
moviendo totales anuales, computación, 243-244
Cálculos de MTD, 235-236, 259-262, 276-277
funciones anidadas, orden de llamada de, 245-246
Función SIGUIENTE, 245-246
saldos de apertura / cierre, 254-258
Función PARALLELPERIOD, 238-239
períodos hasta la fecha, 259-262
Función PREVIOUSMONTH, 239
Cálculos de QTD, 235-236, 259-262, 276-277
Función SAMEPERIODLASTYEAR, 237, 245-246
cálculos semi-aditivos, 246-248
Función STARTOFQUARTER, 256-257
períodos de tiempo, computando a partir de períodos anteriores, 237-239
Cálculos hasta la fecha, 235-236, 259-262, 276-277
períodos de tiempo, computando a partir de períodos anteriores, 237-239
ejemplo de categorías / subcategorías principales, TODAS las funciones y,
66-67
Función TOPN
consultas de autoría, 409-414
Función ISONORAFTER y, 417-419
Orden de clasificación, 410
Función TOPNSKIP, creación de consultas, 420
transfiriendo filtros, 480-481
Función CALCULAR, 482
CONTIENE función, 481-482
Función FILTRO, 481-482, 484-485
Función INTERSECT, 483-484
Función TREATAS, 482-483, 484
Función TREATAS, 378
linaje de datos, 467-468
filtrar contextos y linaje de datos, 334-336
Función SUMMARIZECOLUMNS y, 407-408
transfiriendo filtros, 482-483, 484
Función UNION y, 377-378
funciones trigonométricas, 50
U
operadores unarios, jerarquías P / C (padre / hijo), 362
filtrado unidireccional (relaciones), 4
Función UNION
CALCULAR función y, 376-378
Función DISTINCT y, 375-378
mesas y, 374-378
Función TREATAS y, 377-378
Use la columna Tamaño de jerarquías (Analizador VertiPaq), 582
Función USERELATIONSHIP
relaciones activas, 450-451
CALCULAR función y, 164-168
relaciones no activas y ambigüedad, 516-517
V
codificación de valor (compresión VertiPaq), 554-555
Función VALOR, 51
valores, lista de. Ver filtros de argumentos
Función VALORES, 71
TODAS las funciones y, 327-328
TODAS las funciones versus, 67
Función ALLEXCEPT versus, 326-328
filas en blanco y relaciones inválidas, 68-71
columnas calculadas, 68
relaciones físicas calculadas
dependencias circulares, 477-480
relaciones basadas en rangos, 474-476
tablas calculadas, 68
calcular porcentajes, 133-134
Función DISTINTA versus, 68
filtrar contextos, 322-324, 327-328
Función FILTROS versus, 322-324
medidas y, 67-68
varias columnas, 71
tablas como valores escalares, 71-74
Palabra clave VAR, secciones DEFINE (consultas de autoría),
397-399
variables, 30-31, 175
como una constante, 177-178
definiendo, 176, 178-180
documentar el código, 183-184
manejo de errores, 37
variables de expresión, 397-399
formateo 40-41
evaluaciones perezosas, 181-183
evaluaciones múltiples, evitando con variables, 704-
708
Variable MultipleItemSales, 58
nombres 182
anidando
filtrar contextos, 184-185
varias filas, 184
variables de consulta, 397-399
valores escalares, 58
ámbito de aplicación de, 178-180
almacenar
resultados parciales de los cálculos, 176-177
valores escalares, 176, 181
mesas, 176, 181
variables de tabla, 181-182
mesas, almacenamiento, 58
Sintaxis VAR, 175-177
Bloques VAR / RETURN, 175-177, 180
Declaraciones VAR / RETURN, anidamiento, 179-180
Tipo de datos de variante, 22
VertiPaq, 546, 547-548, 550
agregaciones, 571-573, 604-607
cachés, 637-640
Función CallbackDataID, 640-644
bases de datos en columnas, 550-553
compresión, 553-554
codificación hash, 555-556
recodificación, 559
RLE, 556-559
codificación de valor, 554-555
optimización del modelo de datos, 579
agregaciones, 587-588, 604-607
columnas calculadas, 595-599
elegir columnas para el almacenamiento, 599-602
cardinalidad de columna, 591-592
filtrado cruzado, 590
Columna de fecha, 592-595
desnormalizar datos, 584-591
deshabilitar jerarquías de atributos, 604
recopilación de información del modelo de datos, 579-584
optimizar el almacenamiento de la columna, 602-603
optimizar los atributos de obtención de detalles, 604
cardinalidad de la relación, 586-587, 590-591
Columna de tiempo, 592-595
cachés de datos, 549
DMV, 563-565
selección de hardware, 573
mejores prácticas, 577
Modelo de CPU, 574-575
Rendimiento de E / S de disco, 574, 576-577
tamaño de la memoria, 574, 576
velocidad de memoria, 574, 575-576
numero de nucleos, 574, 576
como una opción, 573-574
paginación 576-577
estableciendo prioridades, 574-576
jerarquías, 561-562
materialización, 568-571
implementaciones multiproceso, 548
fraccionamiento, 562-563
mesas de procesamiento, 550
relaciones (modelos de datos), 561-562, 565-568
seguridad a nivel de fila, 639
operaciones de escaneo, 549
segmentación, 562-563
ordenar órdenes, 560-561
Analizador VertiPaq
columnas (tablas), 580-583
recopilación de información del modelo de datos, 579-584
VertiPaq Analyzer, informes de relaciones, 584
Modo VertiPaq, 488-489
modelos de datos compuestos, 488
modelos de datos únicos, 488
Consultas de VertiPaq SE, 624
modelos de datos compuestos, 646-647
cachés de datos, paralelismo y, 635-637
Función DISTINCTCOUNT, 634-635
tiempo de escaneo, 632-634
consultas xmSQL y, 624
funciones de agregación, 625-627
operaciones aritméticas, 627
eventos por lotes, 630-632
operaciones de filtrado, 628-630
unirse a los operadores, 630
Eventos de coincidencia de caché de consultas de VertiPaq SE (SQL
Server Profiler), 621
Eventos de fin de consulta de VertiPaq SE (SQL Server Profiler), 621
relaciones virtuales, 480, 507
segmentación dinámica, 485-488
relaciones físicas versus, 506-507
transfiriendo filtros, 480-481
Función CALCULAR, 482
CONTIENE función, 481-482
Función FILTRO, 481-482, 484-485
Función INTERSECT, 483-484
Función TREATAS, 482-483, 484
W
relaciones débiles, 2, 439, 488, 489, 504-506
semanas (calendarios personalizados), cálculos de inteligencia de tiempo,
272-275
días laborables entre dos fechas, computación, 519-523
días no laborables, 523-525
precalcular valores (cálculos), 525-527
X
xmSQL
Función CallbackDataID
paralelismo y, 641
VertiPaq y, 640-644
Consultas VertiPaq, 548
consultas xmSQL, 624
funciones de agregación, 625-627
operaciones aritmeticas, 627
eventos por lotes, 630-632
operaciones de filtrado, 628-630
unirse a los operadores, 630
Y
Elemento de cálculo YOY (año tras año), 289-290
Elemento de cálculo del% YOY (porcentaje año tras año),
289-290
Cálculos YTD (año hasta la fecha)
precedencia del grupo de cálculo, 299-303
elementos de cálculo
aplicando a expresiones, 294
recursividad lateral, 307
cálculos de inteligencia de tiempo, 235-236, 259-262,
276-277
Marco Russo y Alberto Ferrari son los fundadores de
sqlbi.com, donde publican regularmente artículos sobre
Microsoft Power BI, Power Pivot, DAX y SQL Server Analysis
Services. Han trabajado con DAX desde la primera versión
beta de Power Pivot en 2009 y, durante estos años, sqlbi.com
se convirtió en una de las principales fuentes de artículos y
tutoriales de DAX. Sus cursos, tanto presenciales como en
línea, son la principal fuente de aprendizaje para muchos
entusiastas de DAX.
Ambos brindan consultoría y tutoría sobre inteligencia
empresarial (BI) utilizando tecnologías de Microsoft. Han
escrito varios libros y artículos sobre Power BI, DAX y Analysis
Services. Ayudan constantemente a la comunidad de
usuarios de DAX a proporcionar contenido para los sitios web
daxpatterns.com, daxformatter.com y dax.guide.