Forum Discussion
SUMPRODUCT DAX
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 T
Entonces
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
- Geradav6 years ago
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
- Anonymous6 years agoNot 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
- Anonymous6 years agoNot applicable
- Anonymous6 years agoNot 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
- Geradav6 years ago
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- Anonymous6 years agoNot applicable
Hola @Geradav ,
Muchas gracias por tomarse el tiempo para ayudar con esto, su muc h apreciado.
Después de introducir la consulta de columna calculada dice "Estamos trabajando en ella" durante unos 15 minutos. ¿Es posiblemente una consulta demasiado grande?
Esencialmente necesito horas reservables, pero si una fila tiene el mismo edificio y entrada de la habitación no quiero que lo cuente dos veces.
Me pregunto si es más adecuado para una medida, pero tendría que asegurarse de que sólo se cuenta una vez para ese edificio y habitación.