Earn the coveted Fabric Analytics Engineer certification. 100% off your exam for a limited time only!
Hola
Tengo una pregunta bastante complicada que no puedo resolver yo mismo.
Tengo este tipo de grabaciones, que describen las franjas horarias :
Principio | Categoría | Duración (horas) |
23/01/2020 09:00 | Mejor | 6 |
23/01/2020 15:00 | blibli | 3 |
23/01/2020 18:00 | bloblo | 2 |
Tengo que crear informes que sólo toman 7,5 horas como máximo por día, por lo que me gustaría añadir una columna que vuelva a calcular las duraciones para que su total alcance los 7,5, empezando por los primeros. Así es como se vería:
Ejemplo:
Principio | Categoría | Duración (horas) | Duración (2) |
23/01/2020 09:00 | Mejor | 6 | 6 |
23/01/2020 15:00 | blibli | 3 | 1.5 |
23/01/2020 18:00 | bloblo | 2 | 0 |
Puedo hacerlo extrayendo los datos y usando Excel mais me encantaría que se mostraran directamente en PowerBi.
Gracias por su ayuda,
Solved! Go to Solution.
Hola @jpleac,
Para que funcione, reemplace la parte en negrita (es mi nombre de último paso).
Echa un vistazo a los tuyos pasos, obtén el nombre y reempláalo en la función.
Si es posible compartir el código m, por lo que puedo reemplazarlo con su nombre de último paso.
Hola
muchas gracias por su respuesta. DAX es una manera más fácil para mí para completar la tarea.
No tengo un índice, así que probé en la fecha de inicio de esta manera:
Medidas ?
var _previousduration- CALCULATETABLE(VALUES('Table'[Duración (horas)]),FILTER(ALL('Table'),'Table'[Beginning]<MAX('Table'[Beginning]))Return
IF(SUMX(FILTER(ALL('Table'),'Table'[Beginning]<-MAX('Table'[Beginning])),'Table'[Duración (horas)])<-7.5,MAX('Tabla'[Duración (horas)]),7.5-SUMX(_previousduration,'Table'[Duración (horas)]))
Hola @jpleac ,
Puede agregar un criterio en la función if para lograrlo.
Measure =
var _previousduration= CALCULATETABLE(VALUES('Table'[Duration (hours)]),FILTER(ALL('Table'),'Table'[Index]<MAX('Table'[Index])))Return
IF(MAX('Table'[Duration (hours)])>=7.5,7.5,IF(SUMX(FILTER(ALL('Table'),'Table'[Index]<=MAX('Table'[Index])),'Table'[Duration (hours)])<=7.5,MAX('Table'[Duration (hours)]),7.5-SUMX(_previousduration,'Table'[Duration (hours)])))
Duration (2) =
IF('Table'[Measure]>0,'Table'[Measure],0)
Finalmente verá:
Para el archivo .pbix modificado, pls haga clic aquí.
Hola @jpleac ,
También puede intentar utilizar la expresión dax para lograrlo:
Cree 2 medidas como se indica a continuación:
Measure =
var _previousduration= CALCULATETABLE(VALUES('Table'[Duration (hours)]),FILTER(ALL('Table'),'Table'[Index]<MAX('Table'[Index])))Return
IF(SUMX(FILTER(ALL('Table'),'Table'[Index]<=MAX('Table'[Index])),'Table'[Duration (hours)])<=7.5,MAX('Table'[Duration (hours)]),7.5-SUMX(_previousduration,'Table'[Duration (hours)]))
Duration (2) =
IF('Table'[Measure]>0,'Table'[Measure],0)
Finalmente verá:
Para el archivo .pbix relacionado, pls haga clic aquí.
Hola
muchas gracias por su respuesta. DAX es una manera más fácil para mí para completar la tarea.
No tengo un índice, así que probé en la fecha de inicio de esta manera:
Medidas ?
var _previousduration- CALCULATETABLE(VALUES('Table'[Duración (horas)]),FILTER(ALL('Table'),'Table'[Beginning]<MAX('Table'[Beginning]))Return
IF(SUMX(FILTER(ALL('Table'),'Table'[Beginning]<-MAX('Table'[Beginning])),'Table'[Duración (horas)])<-7.5,MAX('Tabla'[Duración (horas)]),7.5-SUMX(_previousduration,'Table'[Duración (horas)]))
Hola @jpleac ,
Pruebe este código para una columna personalizada en Power Query:
Dejar
_dateTime [Comienzo],
_currentValue de la tecla de campo [o"Duración (horas)"],
_day de tabla : Table.SelectRows(?"Changed Type",
Cada
Date.From([Beginning]) - Date.From(_dateTime) y
[Comienzo] < _dateTime
)[O"Duración (horas)"],
_result de la casa de los
List.Accumulate(_day, 7.5, (s,c) ?> s - c) en
si _result > 0, entonces _currentValue
otra si _result + _currentValue > 0 y luego _result + _currentValue
else 0
cambiar la parte en negrita para el nombre del último paso.
Hola, muchas gracias por su rápida respuesta.
Probé la solución, pero no puedo hacer que funcione.
Puedo agregar una columna personalizada con la fórmula que proporcionó, pero no entiendo con qué debo reemplazar "tipo cambiado", ni obtengo cómo usar la fórmula con "addTable" a continuación.
¿Podría ser un poco más descriptivo por favor?
Saludos
Hola @jpleac,
Para que funcione, reemplace la parte en negrita (es mi nombre de último paso).
Echa un vistazo a los tuyos pasos, obtén el nombre y reempláalo en la función.
Si es posible compartir el código m, por lo que puedo reemplazarlo con su nombre de último paso.
Hola Camargos,
Creo que tu solución funciona. Lo marcaré como una solución tan pronto como tenga una respuesta a la pregunta que le hice a la segunda persona que me propuso una solución (con DAX, que es un poco más fácil para el novato que soy).
Gracias de nuevo,
Hola @jpleac ,
Puede agregar un criterio en la función if para lograrlo.
Measure =
var _previousduration= CALCULATETABLE(VALUES('Table'[Duration (hours)]),FILTER(ALL('Table'),'Table'[Index]<MAX('Table'[Index])))Return
IF(MAX('Table'[Duration (hours)])>=7.5,7.5,IF(SUMX(FILTER(ALL('Table'),'Table'[Index]<=MAX('Table'[Index])),'Table'[Duration (hours)])<=7.5,MAX('Table'[Duration (hours)]),7.5-SUMX(_previousduration,'Table'[Duration (hours)])))
Duration (2) =
IF('Table'[Measure]>0,'Table'[Measure],0)
Finalmente verá:
Para el archivo .pbix modificado, pls haga clic aquí.
Hola
Muchas gracias. Funciona !