[go: up one dir, main page]

0% encontró este documento útil (0 votos)
2K vistas95 páginas

Guia Definitiva DAX 2° Edicion 1101 - 1195.en - Es

Este documento describe diferentes formas de calcular un simulador de reembolso en Power BI y sus implicaciones para el rendimiento. Presenta una medida "rápida" que optimiza el rendimiento eliminando iteradores anidados, a costa de reducir la reutilización de lógica empresarial. También explica cómo evitar filtros de tabla para funciones no aditivas como DISTINCTCOUNT para mejorar el rendimiento.

Cargado por

Adalberto Torres
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
2K vistas95 páginas

Guia Definitiva DAX 2° Edicion 1101 - 1195.en - Es

Este documento describe diferentes formas de calcular un simulador de reembolso en Power BI y sus implicaciones para el rendimiento. Presenta una medida "rápida" que optimiza el rendimiento eliminando iteradores anidados, a costa de reducir la reutilización de lógica empresarial. También explica cómo evitar filtros de tabla para funciones no aditivas como DISTINCTCOUNT para mejorar el rendimiento.

Cargado por

Adalberto Torres
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 95

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.

También podría gustarte