Skip to main content
cancel
Showing results for 
Search instead for 
Did you mean: 

Enhance your career with this limited time 50% discount on Fabric and Power BI exams. Ends August 31st. Request your voucher.

Reply
Syndicate_Admin
Administrator
Administrator

SUMX funciona, pero no CALCULATE SUM

Estoy seguro de que hay una explicación muy sencilla para esto. Simplemente no puedo entenderlo.

Esta es mi tabla de recursos:

Recurso
ResourceID (Id. de recurso)
Nombre

Grupo de recursos

Capacidad

Quiero sumar la capacidad del recurso visible, pero excluir a cualquiera con determinados valores de grupo de recursos. Así que probé esto:

jsangerman_2-1746543003485.png

Este es el resultado de eso (la tabla incluye la Suma de Capacidad sin modificar, pero la Tarjeta total tiene "Capacidad sin Administración":

jsangerman_0-1746542733405.png

Solo se muestran 64 filas, pero mi cálculo en la tarjeta parece tener un piso de 770 (el total sin segmentaciones aplicadas es de 774).

Así que probé SUMX:

jsangerman_3-1746543028744.png

Ahora obtengo el resultado que esperaba:

jsangerman_4-1746543118397.png

Pero no entiendo por qué. ¿Por qué CALCULATE SUM parece incluir filas que no están en la tabla, aunque tienen los mismos filtros?

2 REPLIES 2
Syndicate_Admin
Administrator
Administrator

Hola @jsangerman ,

La diferencia entre los dos enfoques de DAX se reduce a cómo CALCULATE y SUMX controlan el contexto de filtro. Cuando se utiliza CALCULATE con varios argumentos de filtro como Resource[Resource Group] <> "Management", <> "Leadership" y <> "Executive Assistance", cada condición se evalúa por separado, no como un conjunto combinado. Eso significa que las filas que no cumplen una condición aún pueden pasar otra, por lo que muchas filas no deseadas permanecen en el resultado. Esto crea un comportamiento lógico OR en lugar del AND que esperaba. Como resultado, CALCULATE incluye filas que no debería, lo que da lugar a una mayor capacidad total incluso cuando los filtros parecen correctos.

Por el contrario, SUMX funciona según lo esperado porque envuelve la lógica dentro de una función FILTER, que aplica la evaluación fila por fila y aplica todas las condiciones de filtro juntas. De este modo, se crea de forma eficaz la lógica AND prevista y se garantiza que solo se tengan en cuenta las filas correctas.

Esta es la versión que usa SUMX y FILTER, que devuelve el resultado correcto:

Capacity without Managers =
VAR _Capacity =
    SUMX(
        FILTER(
            Resource,
            Resource[Resource Group] <> "Management" &&
            Resource[Resource Group] <> "Leadership" &&
            Resource[Resource Group] <> "Executive Assistance"
        ),
        Resource[Capacity]
    )
VAR _Result = IF(_Capacity <> BLANK(), _Capacity, 0)
RETURN _Result

Si prefiere usar CALCULATE, debe encapsular la lógica de filtro dentro de una sola expresión FILTER(...) para evitar la desconexión lógica:

Capacity without Managers =
VAR _Capacity =
    CALCULATE(
        SUM(Resource[Capacity]),
        FILTER(
            Resource,
            Resource[Resource Group] <> "Management" &&
            Resource[Resource Group] <> "Leadership" &&
            Resource[Resource Group] <> "Executive Assistance"
        )
    )
VAR _Result = IF(_Capacity <> BLANK(), _Capacity, 0)
RETURN _Result

Sin envolver en FILTER, CALCULATE aplica filtros de forma independiente y pierde el efecto combinado, por lo que el número que vio era incorrecto. Esta es una trampa clásica del DAX en la que el diablo está en el contexto.

Saludos

Esa es una cosa increíblemente básica que debería entender completamente en este punto. Gracias por la ayuda.

Helpful resources

Announcements
July 2025 community update carousel

Fabric Community Update - July 2025

Find out what's new and trending in the Fabric community.

July PBI25 Carousel

Power BI Monthly Update - July 2025

Check out the July 2025 Power BI update to learn about new features.

Top Solution Authors
Top Kudoed Authors