En el mundo del análisis de datos con Power BI, la capacidad de crear medidas personalizadas y aplicarlas de manera efectiva a las visualizaciones es fundamental para obtener información valiosa. Un escenario común que surge es la necesidad de filtrar una medida específica por un producto y, al mismo tiempo, mostrar la comparación de esta medida contra todos los productos en las leyendas de un gráfico. Cuando se intenta aplicar un filtro a un producto en particular, el comportamiento predeterminado de Power BI a menudo filtra también las leyendas, limitando la visualización a la comparación del producto filtrado consigo mismo. Abordaremos este desafío, junto con la creación de medidas que consideren condiciones de margen de beneficio, para lograr un análisis más profundo y preciso.
Creación de Medidas Condicionales: Margen de Beneficio como Filtro
Una tarea frecuente en Power BI es la generación de una medida derivada de otra, basándose en condiciones específicas. En este caso, el objetivo es crear una medida que considere las "Ventas Totales" (una medida previa) pero que solo las muestre si están asociadas a productos con un "Margen de Beneficio" superior al 35%. Para aquellos productos que no cumplen esta condición, la medida debería devolver un valor de $0.
La fórmula que podría parecer intuitiva para lograr esto es:
Measure = CALCULATE([Ventas Totales], FILTER(Medidas, Medidas[Margen de Beneficio] >= 0.35))
Sin embargo, la experiencia demuestra que, bajo esta fórmula, a menudo se devuelven las "Ventas Totales" sin verse afectadas por el filtro de margen de beneficio deseado. Esto ocurre porque FILTER aplicado directamente sobre la tabla de medidas o la tabla de hechos sin un contexto de fila adecuado puede no modificar el contexto de filtro de la medida [Ventas Totales] de la manera esperada.
Para corregir esto y asegurar que la medida solo refleje las ventas de productos con un margen de beneficio superior al 35%, es necesario reestructurar la lógica. Una aproximación más efectiva implica utilizar CALCULATE para modificar el contexto de filtro y aplicar la condición directamente sobre la tabla que contiene la información del producto y su margen de beneficio.
Una medida corregida podría ser:
Ventas con Margen Mayor a 35% = CALCULATE([Ventas Totales], FILTER(TablaProductos, TablaProductos[Margen de Beneficio] >= 0.35))
Aquí, asumimos que TablaProductos es la tabla que contiene la columna [Margen de Beneficio] y que [Ventas Totales] es una medida ya existente que calcula las ventas. La función FILTER se aplica a TablaProductos para crear un contexto donde solo se consideren las filas de productos con un margen de beneficio mayor o igual a 0.35. Luego, CALCULATE aplica este nuevo contexto de filtro a la medida [Ventas Totales].
Si el objetivo es, además, que las ventas de productos que no cumplen la condición se muestren como $0, podemos refinar aún más la medida. Esto se puede lograr anidando una función IF dentro de CALCULATE.
Ventas con Margen Mayor a 35% (con Cero) =VAR MargenCumple = MAXX(SUMMARIZE(TablaProductos, TablaProductos[Producto], "Margen", AVERAGE(TablaProductos[Margen de Beneficio])), [Margen])RETURNIF(MargenCumple >= 0.35, [Ventas Totales], 0)
En esta versión, primero calculamos el margen de beneficio promedio por producto y luego, si ese margen es mayor o igual a 0.35, mostramos las [Ventas Totales]; de lo contrario, mostramos 0. Es importante notar que la forma exacta de calcular el margen por producto puede variar dependiendo de la estructura de las tablas y de cómo se definen las medidas de costos y ventas. Si el margen de beneficio ya está calculado a nivel de fila o se puede acceder fácilmente, la lógica se simplifica.
Consideremos una estructura donde tenemos una tabla de ventas y una tabla de productos, y la medida de margen de beneficio se calcula a partir de ambas.
Margen de Beneficio = DIVIDE([Ventas Totales] - [Costo Total], [Ventas Totales])
Si esta medida de [Margen de Beneficio] está disponible y podemos referenciarla en el contexto adecuado, la medida de ventas filtradas sería:
Ventas Productos Margen Alto =CALCULATE([Ventas Totales],FILTER(ALL(TablaProductos),CALCULATE(DIVIDE([Ventas Totales] - [Costo Total], [Ventas Totales])) >= 0.35))
Aquí, ALL(TablaProductos) es crucial. Elimina cualquier filtro existente sobre TablaProductos para que CALCULATE pueda evaluar la condición del margen de beneficio para todos los productos. Luego, CALCULATE(DIVIDE([Ventas Totales] - [Costo Total], [Ventas Totales])) evalúa el margen de beneficio para cada producto dentro del contexto modificado.
Superando la Limitación de las Leyendas Filtradas en Visualizaciones
El problema principal que se plantea es cómo mostrar una medida filtrada por un producto específico en las leyendas de una visualización, permitiendo la comparación con el resto de los productos, sin que las leyendas se filtren también.
Supongamos que tenemos una visualización (por ejemplo, un gráfico de barras o líneas) donde el eje X representa el tiempo o alguna otra dimensión, el eje Y representa [Ventas Totales], y la leyenda es TablaProductos[NombreProducto]. Cuando aplicamos un filtro para ver solo el "Producto A", la leyenda también se limita a mostrar solo "Producto A", impidiendo la comparación visual con otros productos.
Para resolver esto, necesitamos crear una medida que, independientemente del filtro aplicado a nivel de visualización, siempre pueda evaluar las ventas para todos los productos, pero que muestre un valor específico solo cuando el producto en la leyenda coincide con el producto filtrado.
Una técnica común para esto es usar ALLSELECTED o ALL.
Consideremos la siguiente medida:
Ventas Comparativa por Producto =VAR ProductoSeleccionado = SELECTEDVALUE(TablaProductos[NombreProducto])VAR VentasProductoActual =CALCULATE([Ventas Totales],TablaProductos[NombreProducto] = ProductoSeleccionado)VAR VentasTodosLosProductos =CALCULATE([Ventas Totales],ALLSELECTED(TablaProductos[NombreProducto]))RETURNIF(HASONEVALUE(TablaProductos[NombreProducto]) && VALUES(TablaProductos[NombreProducto]) = ProductoSeleccionado,VentasProductoActual,BLANK())
Esta medida intenta devolver las ventas del producto seleccionado si el contexto de la leyenda es exactamente ese producto, y BLANK() en caso contrario. Sin embargo, esto puede no ser exactamente lo que buscamos si queremos ver el producto seleccionado junto a los demás.
Una mejor aproximación implica crear una medida que devuelva las ventas totales, pero que se vea influenciada por el filtro de producto de manera que podamos aislar la contribución del producto filtrado.
Vamos a reformular el problema: queremos ver las [Ventas Totales] de todos los productos, pero resaltando o aislando las ventas del "Producto X" cuando este es seleccionado en un filtro externo.
Podemos crear una medida que, en el contexto de la leyenda, devuelva las ventas totales, pero que solo muestre un valor significativo si el producto en la leyenda es el producto que nos interesa ver filtrado.
Ventas con Filtro de Producto Destacado =VAR ProductoFiltrado = SELECTEDVALUE(TablaProductos[NombreProducto])VAR VentasActuales = [Ventas Totales]RETURNIF(HASONEVALUE(TablaProductos[NombreProducto]) && VALUES(TablaProductos[NombreProducto]) = ProductoFiltrado,VentasActuales,BLANK())
Esta medida, cuando se coloca en el eje Y de una visualización y TablaProductos[NombreProducto] está en la leyenda, solo mostrará barras (o puntos) para el ProductoFiltrado. Las leyendas seguirán mostrando todos los productos, pero solo el producto filtrado tendrá un valor asociado en esta medida.
Si lo que se busca es comparar las ventas del "Producto X" contra el total de las ventas (incluyendo el "Producto X"), pero la visualización debe mostrar todos los productos en la leyenda, la estrategia cambia. La medida anterior no es la correcta para esa comparación.
Para lograr la comparación deseada, donde el filtro externo selecciona un producto, y la visualización muestra todas las leyendas de producto, pero la medida calculada es sensible al producto seleccionado, necesitamos una medida que mantenga el contexto de todos los productos pero que pueda identificar la contribución del producto filtrado.
Consideremos una medida que calcule las ventas totales, pero que se pueda modificar para resaltar o comparar el producto seleccionado.
Ventas Totales con Comparativa =VAR ProductoEnFiltro = SELECTEDVALUE(TablaProductos[NombreProducto])VAR VentasDelProductoEnFiltro =CALCULATE([Ventas Totales],TablaProductos[NombreProducto] = ProductoEnFiltro)VAR VentasTotalesGeneral =CALCULATE([Ventas Totales],ALLSELECTED(TablaProductos[NombreProducto]))RETURNIF(HASONEVALUE(TablaProductos[NombreProducto]),IF(VALUES(TablaProductos[NombreProducto]) = ProductoEnFiltro,VentasDelProductoEnFiltro,BLANK()),VentasTotalesGeneral)
Esta medida es compleja y puede no ser intuitiva de usar directamente en una visualización donde la leyenda es el producto. El objetivo es que la visualización muestre todos los productos en la leyenda, y que la medida sea la que se adapte al filtro.
La clave está en cómo se utiliza CALCULATE y las funciones de modificación de contexto de filtro como ALL, ALLEXCEPT, ALLSELECTED, REMOVEFILTERS.
Si el filtro externo está aplicado a TablaProductos[NombreProducto], y queremos que la visualización muestre todos los productos en la leyenda, pero la medida solo calcule algo relevante para el producto filtrado, podemos hacer lo siguiente:
Medida para Visualización:
Valor para Visualización =VAR ProductoFiltrado = SELECTEDVALUE(TablaProductos[NombreProducto])VAR ProductoEnLeyenda = VALUES(TablaProductos[NombreProducto])RETURNIF(ProductoEnLeyenda = ProductoFiltrado,[Ventas Totales],BLANK())
Cuando esta medida se usa en un gráfico con TablaProductos[NombreProducto] en la leyenda, y un filtro externo selecciona "Producto A", solo la barra correspondiente a "Producto A" tendrá un valor (sus [Ventas Totales]). Las demás barras estarán en blanco. Esto efectivamente filtra la visualización para mostrar solo el producto seleccionado, pero mantiene la estructura de la leyenda con todos los productos.
Si lo que se desea es ver el "Producto X" contra los demás productos, donde los "demás productos" se refieren a todos los productos excepto el "Producto X", la lógica cambia.
Medida para Comparación (Producto X vs. Otros):
Ventas Producto Seleccionado vs. Resto =VAR ProductoSeleccionado = SELECTEDVALUE(TablaProductos[NombreProducto])VAR VentasDelProductoSeleccionado =CALCULATE([Ventas Totales],TablaProductos[NombreProducto] = ProductoSeleccionado)VAR VentasDelRestoDeProductos =CALCULATE([Ventas Totales],ALLSELECTED(TablaProductos[NombreProducto]),TablaProductos[NombreProducto] <> ProductoSeleccionado)RETURNIF(HASONEVALUE(TablaProductos[NombreProducto]),IF(VALUES(TablaProductos[NombreProducto]) = ProductoSeleccionado,VentasDelProductoSeleccionado,VentasDelRestoDeProductos),BLANK())
Esta medida funcionaría así:
- Si el producto en la leyenda es el
ProductoSeleccionado, devuelve sus[Ventas Totales]. - Si el producto en la leyenda es cualquier otro producto, devuelve la suma de las ventas de todos los demás productos (excluyendo el
ProductoSeleccionado).
Esto significa que en la leyenda, solo aparecerían dos "entradas" conceptuales: el "Producto Seleccionado" y "El Resto". Si la leyenda debe mostrar cada producto individualmente, esta medida no es la directa.
Para lograr que la leyenda muestre todos los productos, y el filtro externo seleccione uno, y la medida muestre las ventas de ese producto, y luego, en otra visualización o con otra medida, se pueda comparar, debemos ser claros sobre el objetivo final.
El escenario descrito: "Cuando filtro un X producto en el filtro, para ver cómo la medida cambia contra todos los productos, las leyendas también se filtran, por lo que solo puedo ver el producto filtrado contra sí mismo." Esto es el comportamiento estándar.
Para evitar que las leyendas se filtren, la medida debe ser capaz de "ver" todos los productos, incluso cuando un filtro está activo.
Consideremos una medida que devuelva las [Ventas Totales] para el producto seleccionado en el filtro, pero que en la visualización, la leyenda muestre todos los productos.
Medida para Mostrar el Producto Filtrado en Leyendas de Todos los Productos:
Ventas Producto Filtrado en Contexto Completo =VAR ProductoEnFiltro = SELECTEDVALUE(TablaProductos[NombreProducto])VAR ProductoEnLeyenda = VALUES(TablaProductos[NombreProducto])RETURNIF(ProductoEnLeyenda = ProductoEnFiltro,[Ventas Totales],BLANK())
Esta medida se coloca en el eje de valores de una visualización. Si TablaProductos[NombreProducto] está en la leyenda, y el filtro externo selecciona "Producto A", esta medida solo devolverá un valor para la barra/punto de "Producto A". Las otras barras/puntos estarán en blanco. Las leyendas seguirán mostrando todos los productos disponibles en TablaProductos[NombreProducto]. Esto cumple con mantener todas las leyendas visibles mientras se enfoca en el producto filtrado.

Si el objetivo es ver el "Producto A" y compararlo con el total de ventas de todos los productos (incluido el "Producto A"), entonces la medida [Ventas Totales] ya lo hace. El problema es la visualización.
Para que la leyenda no se filtre, debemos asegurarnos de que la tabla utilizada en la leyenda no esté sujeta al filtro de la misma manera que la medida. Esto a menudo se logra usando ALL o ALLSELECTED en la definición de la leyenda o en la medida que define qué elementos deben aparecer en la leyenda.
Si la leyenda está definida por TablaProductos[NombreProducto], y queremos que siempre muestre todos los productos, independientemente de los filtros, podríamos intentar configurar la visualización para que la leyenda use una columna que no se filtre, o usar una medida que devuelva todos los nombres de producto. Sin embargo, esto es poco común.
La forma más común de abordar esto es mediante la medida. Si queremos ver el "Producto A" y compararlo con el total de ventas, y la leyenda debe mostrar todos los productos:
- Visualización Principal: Gráfico con
Eje X(ej. Fecha),Eje Y(Medida[Ventas Totales]),Leyenda(TablaProductos[NombreProducto]). - Filtro Externo: Slicer o filtro aplicado a
TablaProductos[NombreProducto].
Cuando se selecciona "Producto A" en el filtro:
- El gráfico muestra todas las líneas/barras de producto.
- Solo la línea/barra de "Producto A" tendrá un valor (sus ventas). Las demás estarán en blanco.
La medida Ventas Producto Filtrado en Contexto Completo descrita anteriormente logra esto.
Si la intención es ver "Producto A" vs. "Todos los demás productos combinados", se necesitaría una medida diferente para el eje Y:
Ventas Producto Seleccionado vs. Otros Productos =VAR ProductoEnFiltro = SELECTEDVALUE(TablaProductos[NombreProducto])VAR ProductoEnLeyenda = VALUES(TablaProductos[NombreProducto])RETURNIF(ProductoEnLeyenda = ProductoEnFiltro,CALCULATE([Ventas Totales], TablaProductos[NombreProducto] = ProductoEnFiltro),CALCULATE([Ventas Totales], ALLSELECTED(TablaProductos[NombreProducto]), TablaProductos[NombreProducto] <> ProductoEnFiltro))
Esta medida, si se usa en el eje Y con TablaProductos[NombreProducto] en la leyenda, mostrará:
- La barra/línea de "Producto A" con sus
[Ventas Totales]. - Una única barra/línea (o la suma de todas las demás) representando las ventas de todos los productos excepto "Producto A".
Esto podría llevar a confusión si la leyenda tiene muchos productos.
La forma más limpia para el escenario "filtrar un producto para ver cómo la medida cambia contra todos los productos, pero las leyendas se filtran" es usar ALLSELECTED dentro de la medida principal que se grafica.
Medida para Graficar (Evitando Filtro en Leyenda):
Ventas Totales (Comparativa con Todos) =CALCULATE([Ventas Totales],ALLSELECTED(TablaProductos[NombreProducto]))
Si esta medida se usa en el eje Y, y TablaProductos[NombreProducto] en la leyenda, y se aplica un filtro a TablaProductos[NombreProducto] para seleccionar "Producto A":
- El gráfico mostrará todas las leyendas de producto.
- La medida
Ventas Totales (Comparativa con Todos)calculará las ventas totales para cada producto en la leyenda, ignorando el filtro externo aplicado aTablaProductos[NombreProducto]. Es decir, cada línea/barra mostrará las ventas totales de ese producto específico, como si no hubiera filtro.
Esto tampoco es exactamente lo que se busca. El problema fundamental es cómo hacer que una medida sea sensible a un filtro externo aplicado a una dimensión, pero que esa misma dimensión en la leyenda no se vea afectada por ese filtro.
La solución más directa al problema de las leyendas filtradas es asegurarse de que la tabla que define la leyenda no esté completamente sujeta al filtro de la misma manera. Esto se puede lograr definiendo la leyenda con una columna que esté menos filtrada, o modificando la medida de valor.
Si el problema es que al seleccionar "Producto A" en un filtro, la leyenda del gráfico solo muestra "Producto A", entonces debemos asegurarnos de que la visualización, por diseño, use todos los productos para la leyenda.
En Power BI, cuando arrastras una columna a la sección "Leyenda" de una visualización, Power BI intenta mostrar todos los valores únicos de esa columna que son relevantes en el contexto de filtro actual. Para evitar que se filtre, necesitas que la medida que usas en el eje de valores sea capaz de "romper" ese filtro de contexto para la leyenda.
Consideremos la medida [Ventas Totales]. Si esta medida se usa en el eje Y y TablaProductos[NombreProducto] en la leyenda, y se aplica un filtro de segmentación a TablaProductos[NombreProducto] para "Producto A", la leyenda se filtrará.
Para evitar esto, la medida en el eje Y debe ser capaz de calcular el valor para cada producto en la leyenda, independientemente del filtro aplicado.
Medida Clave para Resolver el Problema de Leyenda:
Ventas con Leyenda Completa =VAR ProductoActualEnLeyenda = VALUES(TablaProductos[NombreProducto])VAR FiltroAplicado = ISFILTERED(TablaProductos[NombreProducto])VAR ProductoSeleccionadoEnFiltro = SELECTEDVALUE(TablaProductos[NombreProducto])RETURNIF(FiltroAplicado,IF(ProductoActualEnLeyenda = ProductoSeleccionadoEnFiltro,[Ventas Totales],BLANK()),[Ventas Totales])
Explicación:
ProductoActualEnLeyenda: Obtiene el nombre del producto que está siendo considerado en la leyenda actual (por ejemplo, para "Producto B" en un gráfico que muestra "Producto A", "Producto B", "Producto C").FiltroAplicado: Verifica si hay algún filtro activo en la columnaTablaProductos[NombreProducto].ProductoSeleccionadoEnFiltro: Obtiene el valor del producto seleccionado en el filtro externo.
Cómo funciona:
- Si hay un filtro aplicado: La medida compara el
ProductoActualEnLeyendacon elProductoSeleccionadoEnFiltro. Si coinciden, devuelve las[Ventas Totales]de ese producto. Si no coinciden, devuelveBLANK(). Esto significa que solo el producto seleccionado en el filtro tendrá un valor visible en la visualización. Las leyendas, sin embargo, seguirán mostrando todos los productos si la configuración de la visualización lo permite (a veces, la propia visualización ajusta las leyendas basándose en los valores no en blanco). - Si no hay filtro aplicado: La medida simplemente devuelve las
[Ventas Totales].
Para asegurar que la leyenda siempre muestre todos los productos, incluso cuando un filtro está activo, la configuración de la visualización es crucial. Sin embargo, la medida Ventas con Leyenda Completa fuerza a que solo el producto filtrado tenga un valor, lo cual es una forma de "seleccionar" qué producto mostrar contra el resto.
🚀 ¿Como Usar la Función ALLSELECTED?
Si el objetivo es ver el "Producto A" y además ver las ventas totales de todos los productos (sin filtrar la leyenda), se necesitarían dos medidas o una medida más compleja.
Medida para ver el Producto Seleccionado y el Total General:
Ventas Producto Seleccionado y Total General =VAR ProductoEnFiltro = SELECTEDVALUE(TablaProductos[NombreProducto])VAR ProductoEnLeyenda = VALUES(TablaProductos[NombreProducto])VAR VentasTotalesGenerales = CALCULATE([Ventas Totales], ALLSELECTED())RETURNIF(ProductoEnLeyenda = ProductoEnFiltro,[Ventas Totales],IF(ProductoEnLeyenda = "Total General",VentasTotalesGenerales,BLANK()))
Esta medida requeriría un ajuste en la leyenda para incluir una entrada como "Total General".
La forma más común y efectiva para el escenario descrito (filtrar un producto, querer ver la medida contra todos los productos, pero las leyendas se filtran) es utilizar ALLSELECTED en la medida principal.
Medida de Ejemplo (Aplicada en el Eje Y):
Ventas Totales para Comparativa =CALCULATE([Ventas Totales],ALLSELECTED(TablaProductos[NombreProducto]))
Si se aplica un filtro externo a TablaProductos[NombreProducto] para seleccionar "Producto A":
- La leyenda de la visualización (si está configurada para mostrar todos los productos) mostrará "Producto A", "Producto B", "Producto C", etc.
- La medida
Ventas Totales para Comparativase calculará para cada producto en la leyenda. Debido aALLSELECTED(TablaProductos[NombreProducto]), esta medida ignora el filtro de segmentación aplicado aTablaProductos[NombreProducto]y calcula las ventas totales para cada producto individualmente.
Esto significa que cada línea/barra en el gráfico mostrará las ventas totales del producto correspondiente, como si no hubiera filtro. Esto no es lo que se busca si se quiere ver el "Producto A" contra el resto.
El problema reside en que Power BI, por defecto, aplica el contexto de filtro a todas las partes de la visualización. Para evitar que la leyenda se filtre, la medida debe ser capaz de "ver" todos los elementos de la leyenda, incluso cuando un filtro externo está activo.
La medida Ventas con Leyenda Completa es la más cercana a resolver el problema de que las leyendas se filtren:
Ventas con Leyenda Completa =VAR ProductoActualEnLeyenda = VALUES(TablaProductos[NombreProducto])VAR FiltroAplicado = ISFILTERED(TablaProductos[NombreProducto])VAR ProductoSeleccionadoEnFiltro = SELECTEDVALUE(TablaProductos[NombreProducto])RETURNIF(FiltroAplicado,IF(ProductoActualEnLeyenda = ProductoSeleccionadoEnFiltro,[Ventas Totales],BLANK()),[Ventas Totales])
Con esta medida, si seleccionas "Producto A" en un filtro, la visualización (con TablaProductos[NombreProducto] en la leyenda) mostrará una barra/línea para "Producto A" con sus ventas. Las demás barras/líneas estarán en blanco. La leyenda puede seguir mostrando todos los productos si la configuración de la visualización lo permite. Si la leyenda se filtra automáticamente a solo "Producto A", entonces el problema es más profundo en la configuración de la visualización.
Para asegurar que las leyendas siempre muestren todos los productos, se puede intentar lo siguiente:
- En la configuración de la visualización, en la sección de Leyenda, asegúrate de que no haya filtros aplicados.
- Considera usar una columna de una tabla que no esté relacionada directamente con el filtro de producto o que tenga una relación "Both Directions" (con precaución) si es necesario.
Sin embargo, la solución más robusta suele ser a través de la medida. Si la medida devuelve BLANK() para todos los elementos de la leyenda excepto el que nos interesa, Power BI a menudo mostrará solo esos elementos con valores.
Si el objetivo es que la leyenda muestre "Producto A" y "Todos los demás productos combinados", entonces la medida Ventas Producto Seleccionado vs. Otros Productos es la adecuada.
Para el escenario específico: "filtrar un X producto en el filtro, para ver cómo la medida cambia contra todos los productos, las leyendas también se filtran".
La solución más directa para evitar que las leyendas se filtren cuando se aplica un filtro externo a la misma dimensión es usar ALLSELECTED dentro de la medida que se grafica.
Medida Final para el Eje de Valores:
Ventas Comparativa Total =CALCULATE([Ventas Totales],ALLSELECTED(TablaProductos[NombreProducto]))
Cuando esta medida se utiliza en una visualización donde TablaProductos[NombreProducto] está en la leyenda, y se aplica un filtro externo a TablaProductos[NombreProducto] (ej. seleccionando "Producto A"):
- La leyenda seguirá mostrando todos los productos ("Producto A", "Producto B", "Producto C", etc.).
- La medida
Ventas Comparativa Totalse calculará para cada producto en la leyenda. ElALLSELECTED(TablaProductos[NombreProducto])asegura que el filtro de segmentación aplicado aTablaProductos[NombreProducto]sea ignorado para el cálculo de esta medida en el contexto de cada elemento de la leyenda. - Por lo tanto, cada línea/barra en el gráfico mostrará las ventas totales correspondientes a ese producto específico, como si no hubiera filtro.
Si el objetivo es ver el "Producto A" seleccionado contra el resto de los productos, entonces la medida debería ser:
Ventas Producto Seleccionado y Resto =VAR ProductoSeleccionado = SELECTEDVALUE(TablaProductos[NombreProducto])VAR ProductoEnLeyenda = VALUES(TablaProductos[NombreProducto])RETURNIF(ProductoEnLeyenda = ProductoSeleccionado,CALCULATE([Ventas Totales], TablaProductos[NombreProducto] = ProductoSeleccionado),CALCULATE([Ventas Totales], ALLSELECTED(TablaProductos[NombreProducto]), TablaProductos[NombreProducto] <> ProductoSeleccionado))
Esta medida mostrará la barra del "Producto A" con sus ventas, y luego, conceptualmente, una barra que representa la suma de las ventas de todos los demás productos. Esto puede ser confuso si la leyenda muestra todos los productos individualmente.
La clave está en que la medida debe calcular el valor para cada elemento de la leyenda de forma independiente, ignorando el filtro aplicado a la misma dimensión. ALLSELECTED es fundamental para esto.
Si el problema persiste y la leyenda se filtra, puede ser necesario ajustar la configuración de la visualización o usar una tabla de dimensiones separada para la leyenda que esté menos sujeta a filtros. Sin embargo, la medida Ventas Comparativa Total con ALLSELECTED es la forma estándar de lograr que una medida sea visible para todos los elementos de una leyenda, independientemente de los filtros de segmentación aplicados a esa misma dimensión.
Para la condición de margen de beneficio:Ventas con Margen Mayor a 35% =CALCULATE([Ventas Totales],FILTER(ALL(TablaProductos),CALCULATE(DIVIDE([Ventas Totales] - [Costo Total], [Ventas Totales])) >= 0.35))
Esta medida calculará las [Ventas Totales] solo para aquellos productos cuyo margen de beneficio sea mayor o igual a 0.35. ALL(TablaProductos) se asegura de que la evaluación del margen se haga sobre todos los productos, independientemente de otros filtros.
Si se desea que los productos que no cumplen la condición muestren $0, la medida se refina:
Ventas Productos Margen Alto con Cero =VAR MargenCumple =CALCULATE(DIVIDE([Ventas Totales] - [Costo Total], [Ventas Totales]),ALL(TablaProductos),TablaProductos[NombreProducto] = VALUES(TablaProductos[NombreProducto]))RETURNIF(MargenCumple >= 0.35,CALCULATE([Ventas Totales]),0)
Esta versión evalúa el margen para el producto actual en el contexto de la fila/leyenda y, si cumple, muestra las [Ventas Totales] para ese producto; de lo contrario, muestra $0.
Combinando ambos problemas: mostrar ventas de productos con margen > 35%, y asegurar que la leyenda no se filtre.
Medida Final (Ventas con Margen > 35%, Leyenda Completa):
Ventas Margen Alto (Leyenda Completa) =VAR ProductoEnLeyenda = VALUES(TablaProductos[NombreProducto])VAR MargenProductoEnLeyenda =CALCULATE(DIVIDE([Ventas Totales] - [Costo Total], [Ventas Totales]),ALL(TablaProductos),TablaProductos[NombreProducto] = ProductoEnLeyenda)VAR VentasTotalesProducto =CALCULATE([Ventas Totales],TablaProductos[NombreProducto] = ProductoEnLeyenda)RETURNIF(MargenProductoEnLeyenda >= 0.35,VentasTotalesProducto,BLANK())
Esta medida se colocaría en el eje Y de una visualización. Si TablaProductos[NombreProducto] está en la leyenda, y hay filtros externos aplicados a TablaProductos[NombreProducto], esta medida evaluará el margen para cada producto en la leyenda. Si el margen es >= 0.35, mostrará las ventas de ese producto; de lo contrario, mostrará BLANK(). Esto asegura que solo los productos que cumplen la condición de margen se muestren con un valor, mientras que la leyenda puede seguir mostrando todos los productos (dependiendo de la configuración de la visualización). Si la leyenda se filtra, es probable que la configuración de la visualización o el uso de ALLSELECTED en la medida principal sea la solución.
Si el problema es que al filtrar por "Producto A", la leyenda solo muestra "Producto A", la solución más directa es usar ALLSELECTED en la medida que se está visualizando.
Medida para Evitar Filtro en Leyenda (Aplicada en Eje Y):
Ventas Totales con Leyenda Completa =CALCULATE([Ventas Totales],ALLSELECTED(TablaProductos[NombreProducto]))
Esta medida, cuando se usa en el eje Y de una visualización con TablaProductos[NombreProducto] en la leyenda, ignorará los filtros de segmentación aplicados a TablaProductos[NombreProducto], permitiendo que la leyenda muestre todos los productos y que la medida calcule las ventas para cada uno de ellos. Si se quiere aplicar la condición de margen además de esto, se integra:
Medida Combinada (Margen + Leyenda Completa):
Ventas Margen Alto y Leyenda Completa =VAR ProductoEnLeyenda = VALUES(TablaProductos[NombreProducto])VAR MargenProducto =CALCULATE(DIVIDE([Ventas Totales] - [Costo Total], [Ventas Totales]),ALL(TablaProductos),TablaProductos[NombreProducto] = ProductoEnLeyenda)RETURNIF(MargenProducto >= 0.35,CALCULATE([Ventas Totales],ALLSELECTED(TablaProductos[NombreProducto]),TablaProductos[NombreProducto] = ProductoEnLeyenda),BLANK())
Esta medida evalúa el margen para cada producto en la leyenda. Si el margen es >= 0.35, calcula las [Ventas Totales] para ese producto, asegurándose de que el cálculo ignore los filtros de segmentación aplicados a la columna de producto gracias a ALLSELECTED. Si el margen no cumple la condición, devuelve BLANK(). Esto asegura que solo los productos con margen alto se muestren, y que la leyenda no se filtre.
