USERELATIONSHIP
Se aplica a:Columna calculadaTabla calculadaMedidaCálculo visual
Especifica la relación que se va a usar en un cálculo concreto como la que existe entre columnName1 y columnName2.
Sintaxis
USERELATIONSHIP(<columnName1>,<columnName2>)
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. |
Valor devuelto
La función no devuelve ningún valor; solo habilita la relación indicada mientras dura el cálculo.
Notas
USERELATIONSHIP 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.
No se puede usar USERELATIONSHIP si se ha definido la seguridad de nivel de fila para la tabla en la que está incluida la medida. Por ejemplo,
CALCULATE(SUM([SalesAmount]), USERELATIONSHIP(FactInternetSales[CustomerKey], DimCustomer[CustomerKey]))
devuelve un error si se ha definido la seguridad de nivel de fila para DimCustomer.USERELATIONSHIP usa las relaciones existentes en el modelo y las identifica por sus columnas de punto final.
En USERELATIONSHIP, el estado de una relación no es importante; es decir, si la relación está activa o no, no afecta al uso de la función. Se usa aun cuando la relación esté inactiva e invalida cualquier otra relación activa que esté presente en el modelo, pero que no se mencione en los argumentos de la función.
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 se necesitan varias relaciones para combinar la tabla A con la tabla B en un cálculo, cada relación debe indicarse en una función USERELATIONSHIP diferente.
Si las expresiones de CALCULATE están anidadas y más de una expresión de CALCULATE contiene una función USERELATIONSHIP, la instancia de USERELATIONSHIP más interna es la que prevalece en caso de conflicto o ambigüedad.
Se pueden anidar hasta 10 funciones USERELATIONSHIP; pero es posible que la expresión tenga un nivel más profundo de anidamiento, es decir, que la siguiente expresión de ejemplo esté anidada a tres niveles de profundidad, pero solo a dos para USEREALTIONSHIP:
=CALCULATE(CALCULATE( CALCULATE( <anyExpression>, USERELATIONSHIP( t1[colA], t2[colB])), t99[colZ]=999), USERELATIONSHIP( t1[colA], t2[colA]))
.En el caso de las relaciones 1 a 1, USERELATIONSHIP solo activará la relación en una dirección. En concreto, los filtros solo podrán fluir de la tabla columnName2 a la tabla columnName1. Si se desea el filtrado cruzado bidireccional, se pueden usar dos USERELATIONSHIP con direccionalidad opuesta en el mismo cálculo. Por ejemplo,
CALCULATE(..., USERELATIONSHIP(T1[K], T2[K]), USERELATIONSHIP(T2[K], T1[K]))
.
Ejemplo
En el ejemplo siguiente se muestra cómo invalidar la relación predeterminada activa entre las tablas InternetSales y DateTime. La relación predeterminada existe entre la columna OrderDate de la tabla InternetSales y la columna Date de la tabla DateTime.
Para calcular la suma de las ventas por Internet y permitir la segmentación por ShippingDate en lugar del tradicional OrderDate, debe crear una medida, [InternetSales por ShippingDate] mediante la expresión siguiente:
= CALCULATE(SUM(InternetSales[SalesAmount]), USERELATIONSHIP(InternetSales[ShippingDate], DateTime[Date]))
Las relaciones entre InternetSales[ShipmentDate] y DateTime[Date] deben existir y no deben ser la relación activa; además, la relación entre InternetSales[OrderDate] y DateTime[Date] debe existir y debe ser la relación activa.