# data[].attributes.body
CALCULATE es una de las funciones más versátiles en Power BI. Te permite filtrar tus datos, desde Filtros sencillos, hasta funciones de inteligencia de tiempo y más. Eso significa que normalmente vas a utilizar CALCULATE para poder hacer comparaciones de tus datos.

La función básica de un switch es la de unir o conectar dispositivos en red. Es importante tener claro que un switch NO proporciona por si solo conectividad con otras redes, y obviamente, TAMPOCO proporciona conectividad con Internet. Para ello es necesario un router.

la función RELATED() permite acceder a cualquier columna de una tabla relacionada.
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"

# data[].attributes.body
CALCULATE: Evalúa una expresión en un contexto de filtro modificado. También está la función CALCULATETABLE. Hace exactamente lo mismo, salvo que modifica el contexto de filtro aplicado a una expresión que devuelve un objeto de tabla.

RELATED: Devuelve un valor relacionado de otra tabla. 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.

Switch: evalúa una expresión y devuelve un resultado u otro en función del valor resultante de la evaluación, valor que se encontrará entre una lista de opciones.

# data[].attributes.attachment_link.readable_text
Devuelve un valor relacionado de otra tabla.

Sintaxis

Parámetros

Valor devuelto

Valor único que está relacionado con la fila actual.

Notas

La función RELATED requiere que haya una relación entre la tabla actual y la tabla con información relacionada. Especifique la columna que contiene los datos que quiere; la función seguirá una relación de varios a uno existente para capturar el valor de la columna especificada en la tabla relacionada. Si no existe ninguna relación, debe crear una.

Cuando la función RELATED realiza una búsqueda, examina todos los valores de la tabla especificada, independientemente de los filtros que se puedan haber aplicado.

La función RELATED necesita un contexto de fila; por lo tanto, solo se puede usar en una expresión de columna calculada, en la que el contexto de la fila actual es inequívoco, o bien como una función anidada en una expresión que usa una función de recorrido de tabla. Una función de recorrido de tabla, como SUMX, obtiene el valor de la fila actual y, después, busca instancias de ese valor en otra tabla.

La función RELATED no se puede utilizar para capturar una columna a través de una relación limitada.

Ejemplo

En el ejemplo siguiente, se crea la medida Ventas por Internet fuera de EE. UU. para generar un informe de ventas que excluya las ventas en Estados Unidos. Para crear la medida, la tabla InternetSales_USD se debe filtrar para excluir todas las ventas que pertenecen a Estados Unidos de la tabla SalesTerritory. Los Estados Unidos, como país, aparece cinco veces en la tabla SalesTerritory; una vez para cada una de las siguientes regiones: Northwest, Northeast, Central, Southwest y Southeast.

El primer enfoque para filtrar las ventas por Internet, con el fin de crear la medida, podría ser agregar una expresión de filtro similar a la siguiente:

FILTER('InternetSales_USD' , 'InternetSales_USD'[SalesTerritoryKey]<>1 && 'InternetSales_USD'[SalesTerritoryKey]<>2 && 'InternetSales_USD'[SalesTerritoryKey]<>3 && 'InternetSales_USD'[SalesTerritoryKey]<>4 && 'InternetSales_USD'[SalesTerritoryKey]<>5)

Pero este enfoque es contradictorio, propenso a errores tipográficos y podría no funcionar si alguna de las regiones existentes se divide en el futuro.

Un mejor enfoque sería usar la relación existente entre InternetSales_USD y SalesTerritory, y establecer explícitamente que el país debe ser diferente de Estados Unidos. Para ello, cree una expresión de filtro similar a la siguiente:

FILTER( 'InternetSales_USD', RELATED('SalesTerritory'[SalesTerritoryCountry])<>"United States")

Esta expresión usa la función RELATED para buscar el valor de país en la tabla SalesTerritory, empezando por el valor de la columna de clave, SalesTerritoryKey, en la tabla InternetSales_USD. La función de filtro usa el resultado de la búsqueda para determinar si la fila InternetSales_USD está filtrada o no.

Nota

Si el ejemplo no funciona, puede que tenga que crear una relación entre las tablas.

= SUMX(FILTER( 'InternetSales_USD' , RELATED('SalesTerritory'[SalesTerritoryCountry]) <>"United States" ) ,'InternetSales_USD'[SalesAmount_USD])

En la tabla siguiente se muestran solo los totales de cada región, para demostrar que la expresión de filtro de la medida, Ventas por Internet fuera de EE. UU., funciona según lo previsto.

En la tabla siguiente se muestra lo que podría obtener si ha usado esta medida en un objeto visual de tabla de informe:

Vea también

# data[].attributes.attachment_link.description
Devuelve un valor relacionado de otra tabla. Valor único que está relacionado con la fila actual. La función RELATED requiere que haya una relación entre la tabla actual y la tabla con información relacionada. Especifique la columna que contiene los datos que quiere; la función seguirá una relación de varios a uno existente para capturar el valor de la columna especificada en la tabla relacionada.

# data[].attributes.attachment_link.readable_text
En el siguiente ejemplo se evalúa el país al que se asocia la venta para generar una columna personalizada que contenga el continente:

Los valores con los que se compara el resultado de la evaluación de la expresión y los valores devueltos no tienen por qué ser del mismo tipo. En el siguiente ejemplo se calcula el coste de transporte como un porcentaje del valor de venta, porcentaje que varía para cada país:

Para probar la función no ya con valores, sino con expresiones condicionales, supongamos que definimos la medida

Ventas = SUM(FactSales[SalesAmount])

...sumando las ventas en el contexto actual. Si llevamos el campo conteniendo la lista de subcategorías y esta medida a una tabla, el resultado es el siguiente:

Si quisiéramos clasificar cada categoría según la cifra total de ventas con una escala del 1 al 3 (indicándolo con símbolos "$", por ejemplo), podríamos hacerlo usando la función SWITCH de la siguiente manera:

Clasificación = SWITCH(
TRUE(),
[Ventas]>1000000000, "$$$",
[Ventas]>100000000, "$$",
[Ventas]>0, "$",
BLANK()
)

En esta medida, comparamos las ventas totales (en el contexto actual) con una cifra, y devolvemos un valor u otro en función de que la comparación se cumpla o no. El resultado es el siguiente:

Es de destacar que el resultado devuelto por la función es el primero para el que se cumpla la condición. Así, si la medida [Clasificación] se definiese de la siguiente forma (cambiando el orden de las comparaciones):

Clasificación = SWITCH(
TRUE(),
[Ventas]>0, "$",
[Ventas]>100000000, "$$",
[Ventas]>1000000000, "$$$",
BLANK()
)

...el resultado sería el siguiente:

Como vemos, al cumplirse la primera condición para todas las subcategorías mostradas ([Ventas]>0), la función SWITCH devuelve siempre el resultado "$", que no es lo que buscamos.

# data[].attributes.attachment_link.description
En el siguiente ejemplo se evalúa el país al que se asocia la venta para generar una columna personalizada que contenga el continente: Los valores con los que se compara el resultado de la evaluación de la expresión y los valores devueltos no tienen por qué ser del mismo tipo.

# data[].attributes.attachment_link.readable_text
Evalúa una expresión en un contexto de filtro modificado.

Nota

También está la función CALCULATETABLE. Hace exactamente lo mismo, salvo que modifica el contexto de filtro aplicado a una expresión que devuelve un objeto de tabla.

Sintaxis

CALCULATE(<expression>[, <filter1> [, <filter2> [, ...]]])

Parámetros

expression

Expresión que se va a evaluar.

filter1, filter2,...

(Opcional) Expresiones booleanas o expresiones de tabla que definen filtros o funciones de modificador de filtro.

La expresión usada como primer parámetro es esencialmente la misma que una medida.

Los filtros pueden ser:

Expresiones de filtro booleanas

Expresiones de filtro de tabla

Funciones de modificación de filtro

Cuando hay varios filtros, se pueden evaluar mediante el && AND (&&), lo que significa que todas las condiciones deben ser verdaderas, o bien el operador lógico OR (||), lo que significa que cualquiera de las condiciones puede ser true.

Expresiones de filtro booleanas

Un filtro de expresión booleana es una expresión que se evalúa como TRUE o FALSE. Hay varias reglas que deben cumplir lo siguiente:

Deben hacer referencia a columnas de una sola tabla.

No pueden hacer referencia a medidas.

No pueden usar una función CALCULATE anidada.

A partir de la versión de septiembre de 2021 de Power BI Desktop, también se aplica lo siguiente:

Expresión de filtro de tabla

Un filtro de expresión de tabla aplica un objeto de tabla como un filtro. Podría ser una referencia a una tabla de modelo, pero lo más probable es que sea una función que devuelva un objeto de tabla. Puede usar la función FILTER para aplicar condiciones de filtro complejas, incluidas las que no se pueden definir mediante una expresión de filtro booleana.

Funciones de modificador de filtro

Las funciones del modificador de filtro permiten hacer algo más que simplemente agregar filtros. Proporcionan un control adicional al modificar el contexto de filtro.

REMOVEFILTERS
Quitar todos los filtros, o los filtros de una o varias columnas de una tabla o de todas las columnas de una sola tabla.

Quitar los filtros de una o varias columnas, o de todas las columnas de una sola tabla.

KEEPFILTERS
Agregar un filtro sin quitar los existentes en las mismas columnas.

USERELATIONSHIP
Activar una relación inactiva entre las columnas relacionadas, en cuyo caso la relación activa se convertirá automáticamente en inactiva.

CROSSFILTER
Modificar la dirección del filtro (de ambas a única o de única a ambas) o deshabilitar una relación.

¹ La función ALL y sus variantes se comportan como modificadores de filtro y como funciones que devuelven objetos de tabla. Si la herramienta admite la función REMOVEFILTERS, es mejor usarla para quitar filtros.

Valor devuelto

Valor que es el resultado de la expresión.

Comentarios

Cuando se proporcionan expresiones de filtro, la función CALCULATE modifica el contexto de filtro para evaluar la expresión. Cuando la expresión de filtro no está incluida en la función KEEPFILTERS, para cada expresión de filtro hay dos posibles resultados estándar:

Si las columnas (o tablas) no están en el contexto de filtro, para evaluar la expresión se agregarán filtros nuevos al contexto de filtro.

Si las columnas (o tablas) ya están en el contexto de filtro, para evaluar la expresión CALCULATE los filtros nuevos sobrescribirán los existentes.

La función CALCULATE usada sin filtros alcanza un requisito específico. Realiza la transición del contexto de fila al contexto de filtro. Es necesario cuando una expresión (no una medida de modelo) que resume los datos del modelo debe evaluarse en el contexto de fila. Este escenario puede producirse en una fórmula de columna calculada o cuando se evalúa una expresión en una función de iterador. Tenga en cuenta que, cuando se usa una medida de modelo en el contexto de fila, la transición de contexto es automática.

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).

Ejemplos

La definición de medida de la tabla Sales siguiente genera un resultado de ingresos, pero solo para los productos en color azul.
Los ejemplos de este artículo se pueden agregar al modelo de ejemplo de Power BI Desktop. Para obtener el modelo, vea Modelo de ejemplo de DAX.
Blue Revenue = CALCULATE( SUM(Sales[Sales Amount]), 'Product'[Color] = "Blue" )

La función CALCULATE evalúa la suma de la columna Sales Amount de la tabla Sales en un contexto de filtro modificado. Se agrega un nuevo filtro a la columna Color de la tabla Product, o bien el filtro sobrescribe cualquier filtro que ya se haya aplicado a la columna.

La siguiente definición de medida de la tabla Sales genera una relación de ventas sobre ventas en todos los canales de ventas.

Revenue % Total Channel = DIVIDE( SUM(Sales[Sales Amount]), CALCULATE( SUM(Sales[Sales Amount]), REMOVEFILTERS('Sales Order'[Channel]) ) )

La función DIVIDE divide una expresión que suma el valor de la columna Sales Amount de la tabla Sales (en el contexto de filtro) entre la misma expresión en un contexto de filtro modificado. La función CALCULATE modifica el contexto de filtro mediante la función REMOVEFILTERS, que es una función de modificador de filtro. Quita los filtros de la columna Channel de la tabla Sales Order.

En la siguiente definición de columna calculada de la tabla Customer se clasifican los clientes en una clase de fidelidad. Se trata de un escenario muy sencillo: Cuando los ingresos que genera el cliente son inferiores a 2500 USD, se clasifican como Low; de lo contrario, como High.

Customer Segment = IF( CALCULATE(SUM(Sales[Sales Amount]), ALLEXCEPT(Customer, Customer[CustomerKey])) < 2500, "Low", "High" )

En este ejemplo, el contexto de fila se convierte en el contexto de filtro. Esto se conoce como transición de contexto. La función ALLEXCEPT quita los filtros de todas las columnas de la tabla Customer, excepto los de la columna CustomerKey.

Vea también

# data[].attributes.attachment_link.description
Evalúa una expresión en un contexto de filtro modificado. Nota También está la función CALCULATETABLE. Hace exactamente lo mismo, salvo que modifica el contexto de filtro aplicado a una expresión que devuelve un objeto de tabla. CALCULATE( [, [, [, ...]]]) expression Expresión que se va a evaluar. filter1, filter2,...

# data[].attributes.body
La función CALCULATE evalúa una expresión en un contexto que es modificado por los filtros que se incluyen como argumentos.

La función SWITCH evalúa una expresión y devuelve un resultado u otro en función del valor resultante de la evaluación, valor que se encontrará entre una lista de opciones.

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.

La funcion mas importante es CALCULATED porque es la única función que modifica el Filter Context. Se trata de una función con una sintaxis simple, aplicable a problemas sencillos pero que por su versatilidad puede también llegar a tener un alto nivel de complejidad.
El formato de la fórmula tendrá un primer argumento donde le diremos qué es lo que queremos calcular y un segundo donde aplicaremos un filtro a ese cálculo. En realidad le podemos pasar más filtros quedando la fórmula:

CALCULATE(expresión; filtro 1; filtro 2; …; filtro n) donde los filtros son opcionales.

Además debemos tener en cuenta un aspecto muy importante: todos los filtros que apliquemos dependen del contexto, es decir del resto de filtros que en cualquier momento hay aplicados en un informe, ya sea a nivel del informe, de la página, de un control de segmentación de datos (slicer) o bien del propio visual dónde coloquemos la medida.

# data[].attributes.body
¿Qué es la función CALCULATE?

La función CALCULATE evalúa una expresión en un contexto que es modificado por los filtros que se incluyen como argumentos.
debemos tener en cuenta un aspecto muy importante: todos los filtros que apliquemos dependen del contexto, es decir del resto de filtros que en cualquier momento hay aplicados en un informe, ya sea a nivel del informe, de la página, de un control de segmentación de datos (slicer) o bien del propio visual dónde coloquemos la medida.
Sintaxis:
CALCULATE(<expression>[, <filter1> [, <filter2> [, …]]])

¿Qué es la función Switch?

La función SWITCH evalúa una expresión y devuelve un resultado u otro en función del valor resultante de la evaluación, valor que se encontrará entre una lista de opciones.

Sintaxis:
SWITCH(
expression,
value, result
[, value, result]…
[, else]
)

¿Qué es la función Related?
La función RELATED devuelve el valor de la tabla remota relacionado con la fila de la tabla actual que se esté considerando.
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.

Sintaxis:
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])

# data[].attributes.headline
Respuesta Alejandro Calvo https://docs.microsoft.com/en-us/dax/switch-function-daxSWITCH(, , [, , ]…[, ]) Evaluates an expression against a list of values and returns one of multiple possible result expressions. SWITCH([Month], 1, "January", 2, "February", 3, "March", 4, "April"                 , 5, "May", 6, "June", 7, "July", 8, "August"                 , 9, "September", 10, "October", 11, "November", 12, "December"                 , "Unknown month number" )  https://docs.microsoft.com/en-us/dax/calculate-function-daxThere's also the CALCULATETABLE function.  It performs exactly the same functionality, except it modifies the filter context applied to an expression that returns a table object.CALCULATE([,  [,  [, …]]])Total sales on the last selected date =CALCULATE (    SUM ( Sales[Sales Amount] ),    'Sales'[OrderDateKey] = MAX ( 'Sales'[OrderDateKey] ))Function	PurposeREMOVEFILTERS	Remove all filters, or filters from one or more columns of a table, or from all columns of a single table.ALL 1, ALLEXCEPT, ALLNOBLANKROW	Remove filters from one or more columns, or from all columns of a single table.KEEPFILTERS	Add filter without removing existing filters on the same columns.USERELATIONSHIP	Engage an inactive relationship between related columns, in which case the active relationship will automatically become inactive.CROSSFILTER	Modify filter direction (from both to single, or from single to both) or disable a relationship.https://docs.microsoft.com/en-us/dax/related-function-daxReturn valueA single value that is related to the current row.FILTER('InternetSales_USD', 'InternetSales_USD'[SalesTerritoryKey]<>1 && 'InternetSales_USD'[SalesTerritoryKey]<>2 && 'InternetSales_USD'[SalesTerritoryKey]<>3 && 'InternetSales_USD'[SalesTerritoryKey]<>4 && 'InternetSales_USD'[SalesTerritoryKey]<>5)FILTER( 'InternetSales_USD', RELATED('SalesTerritory'[SalesTerritoryCountry])<>"United States")= SUMX(FILTER( 'InternetSales_USD'              ,  RELATED('SalesTerritory'[SalesTerritoryCountry])                 <>"United States"               )       ,'InternetSales_USD'[SalesAmount_USD]) 

# data[].attributes.subject
Respuesta Alejandro Calvo https://docs.microsoft.com/en-us/dax/switch-function-daxSWITCH(, , [, , ]…[, ]) Evaluates an expression against a list of values and returns one of multiple possible result expressions. SWITCH([Month], 1, "January", 2, "February", 3, "March", 4, "April"                 , 5, "May", 6, "June", 7, "July", 8, "August"                 , 9, "September", 10, "October", 11, "November", 12, "December"                 , "Unknown month number" )  https://docs.microsoft.com/en-us/dax/calculate-function-daxThere's also the CALCULATETABLE function.  It performs exactly the same functionality, except it modifies the filter context applied to an expression that returns a table object.CALCULATE([,  [,  [, …]]])Total sales on the last selected date =CALCULATE (    SUM ( Sales[Sales Amount] ),    'Sales'[OrderDateKey] = MAX ( 'Sales'[OrderDateKey] ))Function	PurposeREMOVEFILTERS	Remove all filters, or filters from one or more columns of a table, or from all columns of a single table.ALL 1, ALLEXCEPT, ALLNOBLANKROW	Remove filters from one or more columns, or from all columns of a single table.KEEPFILTERS	Add filter without removing existing filters on the same columns.USERELATIONSHIP	Engage an inactive relationship between related columns, in which case the active relationship will automatically become inactive.CROSSFILTER	Modify filter direction (from both to single, or from single to both) or disable a relationship.https://docs.microsoft.com/en-us/dax/related-function-daxReturn valueA single value that is related to the current row.FILTER('InternetSales_USD', 'InternetSales_USD'[SalesTerritoryKey]<>1 && 'InternetSales_USD'[SalesTerritoryKey]<>2 && 'InternetSales_USD'[SalesTerritoryKey]<>3 && 'InternetSales_USD'[SalesTerritoryKey]<>4 && 'InternetSales_USD'[SalesTerritoryKey]<>5)FILTER( 'InternetSales_USD', RELATED('SalesTerritory'[SalesTerritoryCountry])<>"United States")= SUMX(FILTER( 'InternetSales_USD'              ,  RELATED('SalesTerritory'[SalesTerritoryCountry])                 <>"United States"               )       ,'InternetSales_USD'[SalesAmount_USD]) 

# data[].attributes.body
CALCULATE

Evalúa una expresión en un contexto de filtro modificado.

CALCULATE(<expression>[, <filter1> [, <filter2> [, …]]])

Los filtros pueden ser:

·         Expresiones de filtro booleanas

·         Expresiones de filtro de tabla

·         Funciones de modificación de filtro

Total sales on the last selected date =

CALCULATE (

SUM ( Sales[Sales Amount] ),

'Sales'[OrderDateKey] = MAX ( 'Sales'[OrderDateKey] )

)

SWITCH

Evalúa una expresión en una lista de valores y devuelve una de varias expresiones de resultado posibles.

SWITCH(<expression>, <value>, <result>[, <value>, <result>]…[, <else>])

= SWITCH([Month], 1, "January", 2, "February", 3, "March", 4, "April"

, 5, "May", 6, "June", 7, "July", 8, "August"

, 9, "September", 10, "October", 11, "November", 12, "December"

, "Unknown month number" )

RELATED

Devuelve un valor relacionado de otra tabla.

RELATED(<column>)

= SUMX(FILTER( 'InternetSales_USD'

,  RELATED('SalesTerritory'[SalesTerritoryCountry])

<>"United States"

)

,'InternetSales_USD'[SalesAmount_USD])

# data[].attributes.body
Funciones DAX | Interactive Chaos

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.
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])

La función CALCULATE evalúa una expresión en un contexto que es modificado por los filtros que se incluyen como argumentos.

SINTAXIS

CALCULATE(
expression,
filter1,
filter2...
)

PARÁMETROS

expression: Expresión a evaluar.

filter1, filter2...: Argumentos opcionales. Lista de expresiones booleanas o expresiones de tabla que definen filtros a aplicar a expression.

VALOR DEVUELTO

La función CALCULATE devuelve el valor definido por expression tras modificar el contexto de acuerdo a los filtros incluidos como argumentos.

Si definimos la medida Ventas como la suma de la columna SalesAmount:

Ventas = SUM(FactSales[SalesAmount])

...podemos crear una nueva medida basada en la función CALCULATE que modifique el contexto de cálculo de forma que únicamente consideren las ventas del año 2008:

Ventas 2008 = CALCULATE([Ventas], DimDate[CalendarYear]=2008)

La función SWITCH evalúa una expresión y devuelve un resultado u otro en función del valor resultante de la evaluación, valor que se encontrará entre una lista de opciones.

SINTAXIS

Hay dos posibles sintaxis para esta función:

SWITCH(
expression,
value, result
[, value, result]…
[, else]
)

PARÁMETROS

expression: Expresión a evaluar. Debe devolver un escalar.

condition: Expresión a evaluar. Debe devolver un booleano.

value: Valor constante con el que se comparará el resultado de la evaluación de la expresión.

result: Valor a devolver por la función si value coincide con el resultado de la evaluación de expression o si se satisface la condición incluida en el argumento condition previo.

else: Argumento opcional. Resultado a devolver si el resultado de la evaluación de expression no coincide con ningún value o si no se satisface ninguna de las condiciones incluidas en condition.

VALOR DEVUELTO

Un valor escalar de entre la lista de valores incluidos en value o en else.

INFORMACIÓN ADICIONAL

Si no se incluye el argumento else y el resultado de la evaluación de expression no coincide con ningún value, SWITCH devuelve un Blank.

Si se añade como primer argumento la función TRUE(), los argumentos value pueden sustituirse por expresiones condicionales, devolviéndose el primer argumento result para el que se cumpla la condición correspondiente (véase ejemplo más adelante).

En el siguiente ejemplo se evalúa el país al que se asocia la venta para generar una columna personalizada que contenga el continente:

Los valores con los que se compara el resultado de la evaluación de la expresión y los valores devueltos no tienen por qué ser del mismo tipo. En el siguiente ejemplo se calcula el coste de transporte como un porcentaje del valor de venta, porcentaje que varía para cada país:

Para probar la función no ya con valores, sino con expresiones condicionales, supongamos que definimos la medida

Ventas = SUM(FactSales[SalesAmount])

...sumando las ventas en el contexto actual. Si llevamos el campo conteniendo la lista de subcategorías y esta medida a una tabla, el resultado es el siguiente:

Si quisiéramos clasificar cada categoría según la cifra total de ventas con una escala del 1 al 3 (indicándolo con símbolos "$", por ejemplo), podríamos hacerlo usando la función SWITCH de la siguiente manera:

Clasificación = SWITCH(
TRUE(),
[Ventas]>1000000000, "$$$",
[Ventas]>100000000, "$$",
[Ventas]>0, "$",
BLANK()
)

En esta medida, comparamos las ventas totales (en el contexto actual) con una cifra, y devolvemos un valor u otro en función de que la comparación se cumpla o no. El resultado es el siguiente:

Es de destacar que el resultado devuelto por la función es el primero para el que se cumpla la condición. Así, si la medida [Clasificación] se definiese de la siguiente forma (cambiando el orden de las comparaciones):

Clasificación = SWITCH(
TRUE(),
[Ventas]>0, "$",
[Ventas]>100000000, "$$",
[Ventas]>1000000000, "$$$",
BLANK()
)

...el resultado sería el siguiente:

Como vemos, al cumplirse la primera condición para todas las subcategorías mostradas ([Ventas]>0), la función SWITCH devuelve siempre el resultado "$", que no es lo que buscamos.

# data[].attributes.body
Calculate: Evalúa una expresión en un contexto de filtro modificado.
CALCULATE(<expression>[, <filter1> [, <filter2> [, …]]])
Parámetros

expression | Expresión que se va a evaluar.
filter1, filter2,… | (Opcional) Expresiones booleanas o expresiones de tabla que definen filtros o funciones de modificador de filtro.

Ejemplo
Total sales on the last selected date =
CALCULATE (
SUM ( Sales[Sales Amount] ),
'Sales'[OrderDateKey] = MAX ( 'Sales'[OrderDateKey] )
)
----------------------
SWITCH
Evalúa una expresión en una lista de valores y devuelve una de varias expresiones de resultado posibles.
Sintax
SWITCH(<expression>, <value>, <result>[, <value>, <result>]…[, <else>])

Ejemplo
= SWITCH([Month], 1, "January", 2, "February", 3, "March", 4, "April"
, 5, "May", 6, "June", 7, "July", 8, "August"
, 9, "September", 10, "October", 11, "November", 12, "December"
, "Unknown month number" )

----------------------------

RELATED

Devuelve un valor relacionado de otra tabla.
RELATED(<column>)
columna | Columna que contiene los valores que quiere recuperar.
Ejemplo
FILTER('InternetSales_USD'
, 'InternetSales_USD'[SalesTerritoryKey]<>1 && 'InternetSales_USD'[SalesTerritoryKey]<>2 && 'InternetSales_USD'[SalesTerritoryKey]<>3 && 'InternetSales_USD'[SalesTerritoryKey]<>4 && 'InternetSales_USD'[SalesTerritoryKey]<>5)

https://docs.microsoft.com/es-es/dax/related-function-dax
https://docs.microsoft.com/es-es/dax/switch-function-dax
https://docs.microsoft.com/es-es/dax/calculate-function-dax

# data[].attributes.attachment_link.readable_text
Devuelve un valor relacionado de otra tabla.

Sintaxis

Parámetros

Valor devuelto

Valor único que está relacionado con la fila actual.

Notas

La función RELATED requiere que haya una relación entre la tabla actual y la tabla con información relacionada. Especifique la columna que contiene los datos que quiere; la función seguirá una relación de varios a uno existente para capturar el valor de la columna especificada en la tabla relacionada. Si no existe ninguna relación, debe crear una.

Cuando la función RELATED realiza una búsqueda, examina todos los valores de la tabla especificada, independientemente de los filtros que se puedan haber aplicado.

La función RELATED necesita un contexto de fila; por lo tanto, solo se puede usar en una expresión de columna calculada, en la que el contexto de la fila actual es inequívoco, o bien como una función anidada en una expresión que usa una función de recorrido de tabla. Una función de recorrido de tabla, como SUMX, obtiene el valor de la fila actual y, después, busca instancias de ese valor en otra tabla.

La función RELATED no se puede utilizar para capturar una columna a través de una relación limitada.

Ejemplo

En el ejemplo siguiente, se crea la medida Ventas por Internet fuera de EE. UU. para generar un informe de ventas que excluya las ventas en Estados Unidos. Para crear la medida, la tabla InternetSales_USD se debe filtrar para excluir todas las ventas que pertenecen a Estados Unidos de la tabla SalesTerritory. Los Estados Unidos, como país, aparece cinco veces en la tabla SalesTerritory; una vez para cada una de las siguientes regiones: Northwest, Northeast, Central, Southwest y Southeast.

El primer enfoque para filtrar las ventas por Internet, con el fin de crear la medida, podría ser agregar una expresión de filtro similar a la siguiente:

FILTER('InternetSales_USD' , 'InternetSales_USD'[SalesTerritoryKey]<>1 && 'InternetSales_USD'[SalesTerritoryKey]<>2 && 'InternetSales_USD'[SalesTerritoryKey]<>3 && 'InternetSales_USD'[SalesTerritoryKey]<>4 && 'InternetSales_USD'[SalesTerritoryKey]<>5)

Pero este enfoque es contradictorio, propenso a errores tipográficos y podría no funcionar si alguna de las regiones existentes se divide en el futuro.

Un mejor enfoque sería usar la relación existente entre InternetSales_USD y SalesTerritory, y establecer explícitamente que el país debe ser diferente de Estados Unidos. Para ello, cree una expresión de filtro similar a la siguiente:

FILTER( 'InternetSales_USD', RELATED('SalesTerritory'[SalesTerritoryCountry])<>"United States")

Esta expresión usa la función RELATED para buscar el valor de país en la tabla SalesTerritory, empezando por el valor de la columna de clave, SalesTerritoryKey, en la tabla InternetSales_USD. La función de filtro usa el resultado de la búsqueda para determinar si la fila InternetSales_USD está filtrada o no.

Nota

Si el ejemplo no funciona, puede que tenga que crear una relación entre las tablas.

= SUMX(FILTER( 'InternetSales_USD' , RELATED('SalesTerritory'[SalesTerritoryCountry]) <>"United States" ) ,'InternetSales_USD'[SalesAmount_USD])

En la tabla siguiente se muestran solo los totales de cada región, para demostrar que la expresión de filtro de la medida, Ventas por Internet fuera de EE. UU., funciona según lo previsto.

En la tabla siguiente se muestra lo que podría obtener si ha usado esta medida en un objeto visual de tabla de informe:

Vea también

# data[].attributes.attachment_link.description
Devuelve un valor relacionado de otra tabla. Valor único que está relacionado con la fila actual. La función RELATED requiere que haya una relación entre la tabla actual y la tabla con información relacionada. Especifique la columna que contiene los datos que quiere; la función seguirá una relación de varios a uno existente para capturar el valor de la columna especificada en la tabla relacionada.

# data[].attributes.body
Investigar sobre el uso y aplicacion de las funciones en Dax: Calculate, Switch y Related