Forum Discussion
SUMPRODUCT DAX
Hola
Tengo un cálculo fila por fila en Excel que es;
(IF(SUMPRODUCT(($U$2:$U3-U3)*($T$2:$T3-T3))>1,0,1))*TotalCoreHours
(IF(SUMPRODUCT(($U$2:$U4-U4)*($T$2:$T4-T4))>1,0,1))*TotalCoreHours
(IF(SUMPRODUCT(($U$2:$U5-U5)*($T$2:$T5-T5))>1,0,1))*TotalCoreHours
etcetera..
Me preguntaba si había un equivalente en Power BI, ya que debe ser fila por fila, como no podía ver en subprocesos anteriores?
He visto acerca de SUMx, pero no estoy seguro de si eso funcionaría de la misma manera
Gracias
Liam
9 Replies
- amitchandak
Super User
Debe usarse como
sumx(Table, Table[Col1]*Table[Col2]) *[Measure2]
O
sumx(Table, Table[Col1]*Table[Col2]*Table[Col3])
- AnonymousNot applicable
Hola @amitchandak,
Con el aspecto SUMPRODUCT contando el texto en EXCEL, ¿cómo evitaría este error?
Gracias de antemano
Liam
- Geradav
Responsive Resident
Hola @lherbert502
Ayúdanos a entender un poco mejor tu función.
Su SUMPROD() es equivalente a un AND() lógico en el que se comparan todos los valores anteriores de una columna con el registro actual con el valor del registro actual para 2 columnas, la columna usted y la columna T.
Si ambos,
- un valor en un registro de la columna U hasta el registro actual es igual a la columna de registro actual U
Y
- un valor en el mismo registro de la columna T hasta el registro actual es igual a la columna de registro actual TEntonces
el resultado debe ser 0
Más
Es 1
En DAX es necesario identificar de forma única cada registro.
A continuación, crearía una medida que se vería así:
myMeasure = //Declare variables storing the value of the current row for the column U and T in the current row context VAR currentRowColU = myTable[colName_U] VAR currentRowColT = myTable[colName_T] RETURN IF ( COUNTROWS ( FILTER ( myTable, myTable[colName_U] = currentRowColU && myTable[colName_T] = currentRowColT ) ) > 1, 0, 1 * TotalCoreHours )Aunque es un poco difícil sin ver sus datos. ¿Podría proporcionar algunos datos de muestra para comprender mejor cómo podemos ayudar?
Mejor
David
- Geradav
Responsive Resident
En realidad, mi DAX debe actualizarse para filtrar primero la tabla hasta la fila actual antes de evaluar cada registro al valor de fila actual.
David
- AnonymousNot applicable
Hola @Geradav ,
Muchas gracias por volver. He adjuntado la hoja de cálculo desde la que estaría trabajando.
Esencialmente sólo tiene que ser fila por fila mostrando 1280 o 0 por ejemplo en Power BI, por lo que tiene que ser por columna calculada si es posible.
Espero que tenga sentido,
Gracias
Liam
- AnonymousNot applicable
- AnonymousNot applicable
@Geradav ,
Lo que ha dicho es esencialmente bang on, simplemente no sé si es posible tener una fórmula para el nivel de columna calculado?
Gracias
- Geradav
Responsive Resident
@lherbert502
Se me ocurrió una columna calculada DAX de la siguiente manera:NewBookableHours = VAR TotalBookableHours = 1280 VAR CurrentRoom = ClassRoomTable[Room] VAR CurrentBuilding = ClassRoomTable[Building Name] VAR CurrentID = ClassRoomTable[ID] VAR PreviousBookingTbl = FILTER ( ClassRoomTable, ClassRoomTable[ID] <= CurrentID ) VAR CountExistingRecords = COUNTROWS ( FILTER ( PreviousBookingTbl, [Room] = CurrentRoom && [Building Name] = CurrentBuilding ) ) RETURN IF ( CountExistingRecords > 1, 0, TotalBookableHours )Tenga en cuenta que en esta instrucción DAX utilicé la columna ID para filtrar a registros anteriores que imaginaban que preceden naturalmente al registro actual.
Sin embargo, podría tener una columna de fecha y hora que podría hacerlo mejor. Si ese es el caso, podría reemplazar la referencia a la columna ID con la columna de fecha y hora.
Espero que sea útilMejor
David