Microsoft is giving away 50,000 FREE Microsoft Certification exam vouchers. Get Fabric certified for FREE! Learn more
Hola comunidad de Power BI,
Me enfrento a un problema con una medida que creé en Power BI y agradecería su ayuda. He creado una medida utilizando SUMX combinado con condiciones IF para calcular valores basados en criterios específicos. Mientras que las filas individuales de mi tabla muestran valores distintos de cero, el total de la columna se muestra como 0, lo que no parece correcto ya que la suma de las filas no debe ser cero.
Aquí hay una breve descripción de mi medida (simplificada):
Comissions =
var currentsales = max(Table_Contrats[OwnerId])
var _TableComission =
FILTER(
ALL('Données comissions'),
"filtering criteria"
)
RETURN
SUMX(
_TableComission,
IF(
[_prevCumulativeAmount]=[Cumulative Amount],
0,
IF(
Condition1,
Value1,
IF(
Condition2,
Value2,
.
.
.
)
)
El resultado
¡Gracias de antemano por su ayuda!
Gracias, @MFelix, por su respuesta.
Hola @Chateauunoirr,
Agradecemos su consulta a través del foro de la comunidad de Microsoft Fabric.
Según tengo entendido, cuando se usa la función SUMX en una tabla filtrada con condiciones IF anidadas, Power BI evalúa los totales de forma diferente. Falta el contexto de filtro en el nivel total, lo que hace que la comparación entre [_prevCumulativeAmount] y [Cantidad acumulada] se evalúe de manera diferente a lo esperado o que devuelva un valor en blanco.
A continuación encontrará la expresión DAX que puede ayudar a resolver el problema:
Comisiones =
SI(
HASONEVALUE('Table_Contrats'[YourUniqueRowColumn]),
VAR currentsales = MAX('Table_Contrats'[OwnerId])
VAR _TableComission =
FILTRO(
TODOS ('Données comissions'),
)
DEVOLUCIÓN
SUMX(
_TableComission,
SI(
[_prevCumulativeAmount] = [Importe acumulado],
0,
IF(Condición1, Valor1,
IF(Condición2, Valor2, 0))
)
),
SUMX(
VALUES('Table_Contrats'[ContractId]),
[Comisiones]
)
)
Si encuentra útil nuestra respuesta, márquela amablemente como la solución aceptada y felicite. Esto ayudará a otros miembros de la comunidad que se enfrentan a consultas similares.
Gracias.
Hola @v-pnaroju-msft , ¡muchas gracias por tomarse el tiempo para ayudarme!
¿Podría explicar qué hace la función HASONEVALUE() porque realmente no tengo una fila única?
Tengo mi tabla de usuario vinculada a mi tabla de contratos en el campo ID de propietario. Aquí es de donde obtengo el ID de ventas. (HASONEVALUE('Table_Contrats'[YourUniqueRowColumn]
var currentsales = max(Table_Contrats[OwnerId])
Hola @Chateauunoirr,
Esto está relacionado con la forma en que está calculando los valores y el contexto que se pasa, debe pasar el contexto de las columnas que está utilizando (Nombre, Annee e Mois) al SUMX para obtener el valor correcto para este cálculo, de lo contrario, considerará toda la tabla y el resultado es diferente.
Hola @MFelix , gracias por tu respuesta.
Entonces, ¿eso significa que tengo que poner
var currentsales = max(Table_Contrats[OwnerId])
var _TableComission =
FILTER(
ALL('Données comissions'),
"filtering criteria"
)
dentro del SUMX? Es decir
Comissions =
SUMX(
var currentsales = max(Table_Contrats[OwnerId])
var _TableComission =
FILTER(
ALL('Données comissions'),
"filtering criteria"
)
RETURN
_TableComission,
IF(
[_prevCumulativeAmount]=[Cumulative Amount],
0,
IF(
Condition1,
Value1,
IF(
Condition2,
Value2,
.
.
.
)
)
Hola @Chateauunoirr
Lo que quiero decir es que deberías hacer una medida similar a esta:
Comission final =
SUMX(
SUMMARIZE (Table_Contrats, Table_Contrats[Name], Calendar[Année], Calendar[Mois]), [Comissions])
Supongo que el mes y el año provienen de una tabla de calendario.
Hola @MFelix , funciona a las mil maravillas !
¡Muchas gracias por tu ayuda!
Honestamente, estoy teniendo problemas para entender la lógica. ¿Por qué recrear la misma tabla en la medición final de la comisión, cuando eso es exactamente lo que tengo en mi matriz?
Hola @Chateauunoirr ,
Esto está relacionado con el contexto cuando se está en el nivel de las filas, el contexto es el nombre, el año y el mes, por lo que la declaración IF funciona correctamente, sin embargo, cuando se está en el nivel de la fila total, el nombre, el año y el mes ya no están en el contexto y se obtienen los valores de la tabla completa o de los datos filtrados,
Esto significa que cuando evalúe la instrucción if, no considerará los valores línea por línea, sino todas las líneas. Al realizar este paso adicional, forzará el cálculo para que tenga el contexto correcto porque incluso a nivel total solo está considerando el nombre, el año, el mes.
Tendrás una tabla como esta:
Nombre | Año | Mes | Valor |
a | 2025 | Ene | 501 |
a | 2025 | Feb | |
a | 2025 | Estropear | 2472 |
... | ... | ... | ... |
a | 2025 | Dic |
Entonces haces la suma del valor.
Check out the April 2025 Power BI update to learn about new features.
Explore and share Fabric Notebooks to boost Power BI insights in the new community notebooks gallery.