CROSSFILTER
Se aplica a:Columna calculadaTabla calculadaMedidaCálculo visual
Especifica la dirección de filtrado cruzado que se va a usar en un cálculo de una relación que existe entre dos columnas.
Sintaxis
CROSSFILTER(<columnName1>, <columnName2>, <direction>)
Parámetros
Término | Definición |
---|---|
columnName1 | Nombre de una columna existente, con la sintaxis DAX estándar y completo, que normalmente representa el lado "varios" de la relación que se va a usar. Si los argumentos se proporcionan en orden inverso, la función los intercambia antes de usarlos. Este argumento no puede ser una expresión. |
columnName2 | Nombre de una columna existente, con la sintaxis DAX estándar y completo, que normalmente representa el lado "uno" o de búsqueda de la relación que se va a usar. Si los argumentos se proporcionan en orden inverso, la función los intercambia antes de usarlos. Este argumento no puede ser una expresión. |
Dirección | Dirección del filtro cruzado que se va a usar. Debe ser una de las siguientes: None: no se produce ningún filtrado cruzado en esta relación. Both: todos los filtros se aplican a ambos lados. OneWay: los filtros de un lado o el lado de búsqueda de una relación filtra el otro lado. Esta opción no se puede usar con una relación uno a uno. No use esta opción en una relación de varios a varios porque no está claro cuál es el lado de la búsqueda. use OneWay_LeftFiltersRight o OneWay_RightFiltersLeft en su lugar. OneWay_LeftFiltersRight: los filtros del lado de <columnName1> filtran el lado de <columnName2>. Esta opción no se puede usar con una relación uno a uno ni varios a uno. OneWay_RightFiltersLeft: los filtros del lado de <columnName2> filtran el lado de <columnName1>. Esta opción no se puede usar con una relación uno a uno ni varios a uno. |
Valor devuelto
La función no devuelve ningún valor; solo establece la dirección del filtrado cruzado de la relación indicada mientras dura la consulta.
Observaciones
En el caso de una relación 1:1, no hay ninguna diferencia entre las direcciones one y both.
CROSSFILTER solo se puede usar en funciones que toman un filtro como argumento, por ejemplo: funciones CALCULATE, CALCULATETABLE, CLOSINGBALANCEMONTH, CLOSINGBALANCEQUARTER, CLOSINGBALANCEYEAR, OPENINGBALANCEMONTH, OPENINGBALANCEQUARTER, OPENINGBALANCEYEAR, TOTALMTD, TOTALQTD y TOTALYTD.
CROSSFILTER usa las relaciones existentes en el modelo y las identifica por sus columnas de punto final.
En CROSSFILTER, la configuración del filtrado cruzado de una relación no es importante; es decir, independientemente de si la relación está establecida para filtrar una o ambas direcciones del modelo, esto no afecta al uso de la función. CROSSFILTER invalidará cualquier configuración de filtrado cruzado existente.
Se devuelve un error si alguna de las columnas denominadas como argumento no forma parte de una relación o los argumentos pertenecen a relaciones diferentes.
Si las expresiones de CALCULATE están anidadas y más de una expresión de CALCULATE contiene una función CROSSFILTER, la instancia de CROSSFILTER más interna es la que prevalece en caso de conflicto o ambigüedad.
Esta función no se admite para su uso en el modo DirectQuery cuando se utiliza en columnas calculadas o en reglas de seguridad de nivel de fila (RLS).
Ejemplo
En el siguiente diagrama de modelo, tanto DimProduct como DimDate tienen una relación de dirección única con FactInternetSales.
De forma predeterminada, no se puede obtener el número de productos vendidos por año:
Hay dos maneras de obtener el número de productos por año:
Active el filtrado cruzado bidireccional en la relación. Esto cambiará el modo en que funcionan los filtros para todos los datos entre estas dos tablas.
Use la función CROSSFILTER para cambiar el modo en que funcionan las relaciones solo para esta medida.
Al usar DAX, podemos utilizar la función CROSSFILTER para cambiar el comportamiento de la dirección del filtro cruzado entre dos columnas definidas por una relación. En este caso, la expresión DAX tiene el siguiente aspecto:
BiDi:= CALCULATE([Distinct Count of ProductKey], CROSSFILTER(FactInternetSales[ProductKey], DimProduct[ProductKey] , Both))
Mediante el uso de la función CROSSFILTER en nuestra expresión de medida, obtenemos los resultados esperados: