Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Argumentos de Filtro en CALCULATE - SQLBI
Argumentos de Filtro en CALCULATE - SQLBI
Marco Russo
NOTE: This article is about table filter arguments, and does not consider directive
arguments (such as ALL, USERELATIONSHIP, CROSSFILTER, …) that alter the filter
context without applying a list of values as a new filter.
UPDATE 2017-01-30 : Excel 2016, Power BI, and SSAS Tabular 2016 now have
SUMMARIZECOLUMNS, which should replace the use of SUMMARIZE described in this
article for DAX queries, but it cannot replace it in measures. Read more in Introducing
SUMMARIZECOLUMNS.
https://www.sqlbi.com/articles/filter-arguments-in-calculate/ 1/7
23/08/2023, 15:56 Argumentos de filtro en CALCULATE - SQLBI
1 CALCULATE (
2 <expression>,
3 table[column] = <value>
4 )
Copy Conventions#1
In reality the filter expression you wrote is transformed in:
1 CALCULATE (
2 <expression>,
3 FILTER (
4 ALL ( table[column] ),
5 table[column] = <value>
6 )
7 )
Copy Conventions#2
Este comportamiento es idéntico para todos los argumentos de filtro de CÁLCULO y
CALCULATETABLE. A partir de ahora, describiremos la sintaxis de los argumentos del
filtro en estas funciones, identificados por en la sintaxis general:
CALCULATE (
<scalar expression>,
<filter1>,
<filter2>,
...,
<filterN>
)
CALCULATETABLE (
<table expression>,
<filter1>,
<filter2>,
...,
<filterN>
)
Copiar Convenios#3
Una función de filtro puede ser una expresión lógica o una expresión de tabla:
https://www.sqlbi.com/articles/filter-arguments-in-calculate/ 2/7
23/08/2023, 15:56 Argumentos de filtro en CALCULATE - SQLBI
table[column] = <value>
FILTER ( ... )
ALL ( ... )
Copiar Convenios#4
Donde ... se permite cualquier otra expresión de tabla en un argumento de filtro.
Copiar Convenios#5
La sintaxis anterior se transforma internamente en la siguiente, que puede escribir de
manera explícita obteniendo el mismo comportamiento de su medida DAX.
Copiar Convenios#6
Sin embargo, no puede escribir un solo argumento de filtro que haga referencia a dos
columnas diferentes
Copiar Convenios#7
https://www.sqlbi.com/articles/filter-arguments-in-calculate/ 3/7
23/08/2023, 15:56 Argumentos de filtro en CALCULATE - SQLBI
En este caso, debe escribir una expresión de tabla explícita en lugar de confiar en la
conversión automática de una expresión lógica en una expresión de tabla hecha por
CÁLCULO y CALCULATETABLE cuando haces referencia a una sola columna. Tiene
varias opciones disponibles, produciendo resultados diferentes y potencialmente con un
rendimiento diferente. Leer más en Especificar múltiples condiciones de filtro en
CÁLCULO artículo.
Filtro de mesa
Puede escribir un filtro sobre dos columnas usando un filtro sobre toda la tabla que
contiene ambas columnas.
Copiar Convenios#8
Usando un filtro de tabla, hereda el argumento de filtro existente para la tabla de
Producto, por lo tanto, no incluirá un producto Rojo o de la marca Contoso si no estaba
presente en el filtro existente. Lo que es más importante, no anulará el filtro existente en
dicha columna. Por lo tanto, si tiene una rebanadora que filtra la marca Proseware, verá
el monto de las ventas de solo los productos Red que pertenecen a la marca Proseware,
ignorando cualquier producto de la marca Contoso.
https://www.sqlbi.com/articles/filter-arguments-in-calculate/ 4/7
23/08/2023, 15:56 Argumentos de filtro en CALCULATE - SQLBI
Copiar Convenios#9
En este caso, la cardinalidad del filtro puede ser menor que el producto cartesiano de los
valores que tiene en las columnas referenciadas. Para obtener dicha lista, el motor debe
ejecutar un escaneo de tabla. Esto podría ser costoso para columnas de baja
cardinalidad en una tabla grande.
El resultado de este filtro anulará cualquier filtro existente sobre las columnas
especificadas. Por ejemplo, si tiene una rebanadora que filtra la marca Proseware, verá
el monto de las ventas de los productos Red independientemente de la marca, sumado a
las ventas de toda la marca Contoso, independientemente del color –, pero los productos
de color rojo y la marca Contoso se sumarán solo una vez, sin duplicar su valor.
Copiar Convenios#10
En este caso, la cardinalidad del filtro es idéntica al producto cartesiano de los valores
que tiene en las columnas referenciadas. Para obtener dicha lista, el motor no realiza un
escaneo de tabla, sino que solo utiliza la lista de valores disponibles en las dos
columnas. Esto podría ser costoso para columnas de alta cardinalidad que tienen una
alta correlación, de modo que el número de combinaciones existentes en la tabla es
mucho menor que todas las combinaciones posibles.
https://www.sqlbi.com/articles/filter-arguments-in-calculate/ 5/7
23/08/2023, 15:56 Argumentos de filtro en CALCULATE - SQLBI
Copiar Convenios#11
Copiar Convenios#12
los RESUMEN La función genera una lista de las combinaciones existentes entre dos o
más columnas, y se puede usar con columnas que pertenecen a diferentes tablas si
están conectadas en una cadena de relaciones de muchos a uno.
https://www.sqlbi.com/articles/filter-arguments-in-calculate/ 6/7
23/08/2023, 15:56 Argumentos de filtro en CALCULATE - SQLBI
Copiar Convenios#13
En este caso, la cardinalidad del filtro se reduce en comparación con ALL / CROSSJOIN,
pero usted paga el costo de un escaneo de tabla para obtener las combinaciones
existentes de las columnas especificadas en RESUMEN. Esto podría ser costoso para
columnas de baja cardinalidad en una tabla grande. Podría ser potencialmente más
rápido que el escaneo de la tabla para una condición de filtro compleja, pero en términos
de rendimiento debe considerar si es alternativo MANTENER FILTROS la sintaxis podría
ser mejor, dependiendo de la distribución de datos.
Conclusiones
Tiene varias opciones para especificar un filtro complejo en un CÁLCULO declaración. El
resultado de un argumento de filtro es siempre una tabla con una o más columnas, y el
costo “ ” del filtro es el número de filas que tiene en dicha tabla. La tabla de filtros suele
ser la forma “ fácil ” de escribir una expresión de filtro compleja válida, pero podría tener
una gran gran granularidad para el FILTRO iterador y un mayor costo para el filtro en sí
CÁLCULO, considerando el costo relacionado de una tabla ampliada en un argumento
de filtro.
Para practicar con las diferentes sintaxis, puede descargar un libro de Excel con las
medidas descritas en este artículo aplicadas a una tabla de pivote con diferentes filtros y
rebanadores, comparando los diferentes resultados. Puede apreciar un rendimiento
diferente solo en modelos de datos más grandes.
https://www.sqlbi.com/articles/filter-arguments-in-calculate/ 7/7