RELATED

La función RELATED devuelve el valor relacionado con la fila siendo considerada de una columna de otra tabla (tabla remota), suponiendo que existe una relación entre la tabla en la que se esté trabajando (tabla actual) y la remota, que esta relación sea de tipo "varios-a-uno" o "uno-a-uno" y que la tabla remota sea la correspondiente al lado "uno" -es decir, que se trate de una tabla de dimensiones-.

Dicho con otras palabras, esta función permite, a partir de una tabla, extraer el campo asociado a cada registro en una tabla de dimensiones relacionada.

Sintaxis

RELATED(
    column
)

Parámetros
  • column: Columna de la tabla remota que se desea recuperar.
Valor devuelto

La función RELATED devuelve el valor de la tabla remota relacionado con la fila de la tabla actual que se esté considerando.

Información adicional

Esta función requiere que exista una relación entre la tabla actual y la tabla remota, y esta relación debe ser de tipo "varios" (en la tabla actual) a "uno" (en la tabla remota) para poder devolver un único valor (también es válida la relación "uno-a-uno"). A la hora de buscar el valor correcto a devolver, la función examina toda la tabla remota con independencia de los filtros que se hayan aplicado.

La función RELATED requiere un contexto de fila. Esto significa que solo puede ser usada en expresiones de columnas calculadas -donde el contexto de fila no supone ninguna ambigüedad- o como función anidada dentro de una expresión que use una función de escaneo de tabla, como SUMX.

Ejemplos

Si tenemos una tabla de ventas (Sales) que incluye una referencia al producto vendido, y otra tabla de productos (Product) conteniendo el detalle de cada producto, incluyendo su nombre en el campo ProductName, podemos añadir a la tabla Sales el campo calculado 'Product'[ProductName] con la siguiente expresión:

Product name = RELATED('Product'[ProductName])

Supongamos ahora que en el campo Country de la tabla Geography tenemos el país en el que se encuentra el revendedor que ha realizado cada venta. Veamos, en primer lugar, las ventas por país. Para esto llevamos, simplemente, la medida que suma las ventas (Sales) y el campo Country a una visualización tipo tabla:

Ventas por países

La medida Sales está sumando el campo que contiene la cifra de ventas, SalesAmount:

Sales = SUM(Sales[SalesAmount])

Supongamos ahora que deseamos ser capaces de analizar las ventas en todos los países que no sean Estados Unidos. Una primera opción sería utilizar la función CALCULATE para revaluar la medida Sales:

Non USA sales = CALCULATE([Sales], Geography[Country] <> "United States")

Podemos llevar esta nueva medida a una visualización tipo tarjeta para ver el resultado:

Ventas fuera de los Estados Unidos

La cifra es correcta, pero si llevamos esta medida a una tabla junto con el campo Country para mostrar las ventas fuera de los Estados Unidos segmentadas por país, el resultado es el siguiente:

Ventas por país usando la medida creada

Por supuesto, esto no es lo que deseábamos, pero la función CALCULATE está modificando el contexto para considerar siempre todos los países que no sean los Estados Unidos.

Lo que queremos es poder usar el campo SalesAmount que contiene la cifra de venta pero incluyendo solo aquellos registros de ventas que no se correspondan con revendedores situados en los Estados Unidos. Para empezar, podemos construir esta tabla que solo considere los países de interés usando la función FILTER. El pseudocódigo sería algo así como:

Tabla filtrada = FILTER(
      Sales,
      Países que no sean Estados Unidos
)

Si la tabla Sales incluyese un campo "Country", bastaría con añadir Country <> "United States" en lugar de "Países que no sean Estados Unidos", pero no lo incluye. Esta información relativa al país en el que se encuentra el revendedor está en otra tabla, la mencionada tabla de Geography, tabla que no es accesible directamente como argumento de la función FILTER. Es en esta situación en la que la función RELATED resulta de utilidad. Suponiendo que existe una relación (de tipo varios a uno, o uno a uno) entre la tabla de ventas y la de geografía, podemos acceder desde la primera a la columna Country de la segunda con la expresión:

RELATED(Geography[Country])

Ahora, el código de la tabla filtrada sería el siguiente:

Tabla filtrada = FILTER(
      Sales,
      RELATED(Geography[Country]) <> "United States"
)

Tal y como se ha comentado, la función RELATED requiere de un contexto de fila, lo que podemos conseguir usando una función de escaneo de tablas como SUMX, que es exactamente lo que buscamos para calcular el total de ventas:

Sales non USA =
    SUMX(
        FILTER(
            Sales,
            RELATED(Geography[Country]) <> "United States"
            ),
        Sales[SalesAmount]
    )

Lo que estamos haciendo es sumar el campo SalesAmount para cada una de las filas de la tabla filtrada, y ésta está compuesta por el conjunto de registros de ventas que no tienen asociado como país a los Estados Unidos, pero sin excluir otros posibles filtros que vengan dados por el contexto.

De esta forma, si llevamos esta medida a una tarjeta:

Ventas totales fuera de los Estados Unidos

...comprobamos que el total es correcto. Y si la llevamos a una tabla junto con el campo Country de Geography:

Ventas fuera de los Estados Unidos desglosadas por país

...vemos que la medida se adapta correctamente al contexto, tal y como queríamos.

Funciones relacionadas
Categoría
Filtro
Enviado por admin el Mié, 02/01/2019 - 21:49