Función USERELATIONSHIP (DAX)
Especifica la relación que se va a usar en un determinado cálculo como la única relación existente entre columnName1 y columnName2.
Sintaxis
USERELATIONSHIP(<columnName1>,<columnName2>)
Parámetros
columnName1
Nombre de una columna existente, que es un nombre completo en el que se usa la sintaxis estándar de DAX, que normalmente representa el lado "varios" de la relación que se va a usar; si los argumentos se especifican en el orden contrario, la función los intercambiará antes de usarlos. Este argumento no puede ser una expresión.columnName2
Nombre de una columna existente, que es un nombre completo en el que se usa la sintaxis estándar de DAX, que normalmente representa el lado "uno" o el lado de búsqueda de la relación que se va a usar; si los argumentos se especifican en el orden contrario, la función los intercambiará antes de usarlos. Este argumento no puede ser una expresión.
Valor devuelto
La función no devuelve ningún valor; la función solo permite la relación indicada mientras dura el cálculo.
Comentarios
USERELATIONSHIP solo se puede usar en funciones que toman un filtro como argumento; por ejemplo, las funciones CALCULATE, CALCULATETABLE, CLOSINGBALANCEMONTH, CLOSINGBALANCEQUARTER, CLOSINGBALANCEYEAR, OPENINGBALANCEMONTH, OPENINGBALANCEQUARTER, OPENINGBALANCEYEAR, TOTALMTD, TOTALQTD y TOTALYTD.
USERELATIONSHIP usa las relaciones existentes del modelo e identifica las relaciones según sus columnas extremo.
En USERELATIONSHIP, el estado de una relación no es importante; es decir, el hecho de que una relación esté o no activa no afecta al uso de la función. Aunque la relación esté inactiva, se usará y reemplazará a otras relaciones activas que podrían estar presentes en el modelo aunque no se mencionen en los argumentos de la función.
Se devuelve un error si alguna de la columnas denominadas como un argumento no forma parte de una relación o si los argumentos pertenecen a relaciones diferentes.
Si se necesitan varias relaciones para combinar en un cálculo las tablas A y B, cada relación debe indicarse en una función USERELATIONSHIP diferente.
Si se anidan las expresiones CALCULATE y varias expresiones CALCULATE contienen una función USERELATIONSHIP, la función USERELATIONSHIP más interior será la que prevalezca en caso de conflicto o ambigüedad.
Se pueden anidar un máximo de 10 funciones USERELATIONSHIP; sin embargo, la expresión podría tener un nivel mayor de anidamiento; por ejemplo, la siguiente expresión de ejemplo tiene tres niveles de anidamiento, pero solo dos para USEREALTIONSHIP: =CALCULATE(CALCULATE( CALCULATE( <cualquierExpresión>, USERELATIONSHIP( t1[colA], t2[colB])), t99[colZ]=999), USERELATIONSHIP( t1[colA], t2[colA])).
Ejemplo
Los siguientes ejemplos muestran cómo reemplazar la relación activa predeterminada entre las tablas Internet Sales y Date Time. La relación predeterminada existe entre la columna OrderDate, en la tabla InternetSales, y la columna Date, en la tabla DateTime.
Para calcular la suma de las ventas por Internet y permitir segmentarlas por ShippingDate en lugar de por OrderDate, necesita crear una medida, [InternetSales por ShippingDate] usando la siguiente expresión:
=CALCULATE(SUM(InternetSales[SalesAmount]), USERELATIONSHIP(InternetSales[ShippingDate], DateTime[Date]))
En PowerPivot: arrastre la nueva medida al área Valores en el panel derecho y, a continuación, arrastre la columna InternetSales[ShippingDate] al área Etiquetas de fila. Ahora tiene las ventas por Internet segmentadas por fecha de envío en lugar de por fecha de pedido, tal y como se solía mostrar en estos ejemplos.
Para trabajar con este ejemplo, deben existir relaciones entre InternetSales[ShipmentDate] y DateTime[Date] para trabajar y no deben ser la relación activa. Del mismo modo, la relación que hay entre InternetSales[OrderDate] y DateTime[Date] debe existir y debería ser la relación activa.