Register now to learn Fabric in free live sessions led by the best Microsoft experts. From Apr 16 to May 9, in English and Spanish.
Hola a todos -
Tengo la fecha y hora de la parada y las horas de inicio de las subidas que se realizan en un hospital. Estoy tratando de averiguar cuántas cirugías están sucediendo en el hospital por minuto. Tiene que ser por minuto. ¿Alguien tiene alguna experiencia trabajando con un rango de fechas y horas y encontrando concurrencia por minuto? Esperaba poder expandir la tabla por el rango de fecha y hora para crear una fila por cada minuto.
Todas y cada una de las ideas son apreciadas!!! Gracias por la ayuda - Adam
Solved! Go to Solution.
Echa un vistazo a esta demo
En pasos:
1) Comenzó con una tabla básica:
2) En power query se rompió la fecha y las horas:
3) Cambió las fechas y horas originales a decimales.
4) Se crearon columnas personalizadas que multiplican los decimales de inicio y fin por 24 * 60. (1 día es igual a 1, por lo que devuelve un número entero de minutos desde 30 de diciembre de 1899. )
M completo:
let
Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45WMlTSUTI00jcw1DcyMDJSMLC0MjDAEDI2UIrViVYyAkkYIyQsQBIoQoYGIO0gtcZoamHmIqk1BKuNBQA=", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [SurgeryId = _t, #"DateTime Start" = _t, #"DateTime End" = _t]),
ChangedType = Table.TransformColumnTypes(Source,{{"SurgeryId", Int64.Type}, {"DateTime Start", type datetime}, {"DateTime End", type datetime}}),
AddDateStart = Table.AddColumn(ChangedType, "Date Start", each DateTime.Date([DateTime Start])),
AddDateEnd = Table.AddColumn(AddDateStart, "Date End", each DateTime.Date([DateTime End])),
AddTimeStart = Table.AddColumn(AddDateEnd, "Time Start", each DateTime.Time([DateTime Start])),
AddTimeEnd = Table.AddColumn(AddTimeStart, "Time End", each DateTime.Time([DateTime End])),
ChangedType2 = Table.TransformColumnTypes(AddTimeEnd,{{"DateTime Start", type number}, {"DateTime End", type number}}),
AddMinuteStartStamp = Table.AddColumn(ChangedType2, "MinuteStartStamp", each [DateTime Start]*24*60),
AddMinuteEndStamp = Table.AddColumn(AddMinuteStartStamp, "MinuteEndStamp", each [DateTime End] * 24 * 60),
ChangedType3 = Table.TransformColumnTypes(AddMinuteEndStamp,{{"MinuteStartStamp", Int64.Type}, {"MinuteEndStamp", Int64.Type}}),
RemovedOtherColumns = Table.SelectColumns(ChangedType3,{"SurgeryId", "Date Start", "Date End", "Time Start", "Time End", "MinuteStartStamp", "MinuteEndStamp"})
in
RemovedOtherColumns
6) Utilice el siguiente DAX para crear una tabla con grano minúsculo:
ExpandedTable =
GENERATE (
OriginalTable,
VAR CurrentStart = OriginalTable[MinuteStartStamp]
VAR CurrentEnd = OriginalTable[MinuteEndStamp]
RETURN
GENERATESERIES( CurrentStart, CurrentEnd, 1 )
)
7) Cambie el nombre de la columna VALOR a "Sello de minutos".
Me gustaría poder hacer todo eso en PowerQuery, pero no puedo hacer que funcione en este momento. Se actualizará si lo ordeno.
Hola @bcdobbs ,
Muchas gracias por su ayuda y respuesta detallada. Solo lo estoy viendo ahora y voy a revisar la información que proporcionó y lo intentaré. Súper emocionado de tratar de resolver este problema, ya que será de gran ayuda para nuestro hospital.
Gracias
Adán
No se hace en el grano minuto, pero a menudo se expande el inicio / final del día a una mesa en el grano del día que se hace utilizando:
TableExpanded =
GENERATE (
OriginalTable,
DATESBETWEEN('Calendar'[Date], OriginalTable[Start Date], OriginalTable[End Date] )
)
Creo que si creas un horario en el grano de minutos, podrás expandirlo.
Si puede proporcionar algunos datos de demostración, podríamos intentar resolverlo.
En realidad, no hay una función MINUTESBETWEEN, por lo que es necesario pensar un poco más. Pensar generaeries podría ayudar, pero necesita tener una obra de teatro.
Echa un vistazo a esta demo
En pasos:
1) Comenzó con una tabla básica:
2) En power query se rompió la fecha y las horas:
3) Cambió las fechas y horas originales a decimales.
4) Se crearon columnas personalizadas que multiplican los decimales de inicio y fin por 24 * 60. (1 día es igual a 1, por lo que devuelve un número entero de minutos desde 30 de diciembre de 1899. )
M completo:
let
Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45WMlTSUTI00jcw1DcyMDJSMLC0MjDAEDI2UIrViVYyAkkYIyQsQBIoQoYGIO0gtcZoamHmIqk1BKuNBQA=", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [SurgeryId = _t, #"DateTime Start" = _t, #"DateTime End" = _t]),
ChangedType = Table.TransformColumnTypes(Source,{{"SurgeryId", Int64.Type}, {"DateTime Start", type datetime}, {"DateTime End", type datetime}}),
AddDateStart = Table.AddColumn(ChangedType, "Date Start", each DateTime.Date([DateTime Start])),
AddDateEnd = Table.AddColumn(AddDateStart, "Date End", each DateTime.Date([DateTime End])),
AddTimeStart = Table.AddColumn(AddDateEnd, "Time Start", each DateTime.Time([DateTime Start])),
AddTimeEnd = Table.AddColumn(AddTimeStart, "Time End", each DateTime.Time([DateTime End])),
ChangedType2 = Table.TransformColumnTypes(AddTimeEnd,{{"DateTime Start", type number}, {"DateTime End", type number}}),
AddMinuteStartStamp = Table.AddColumn(ChangedType2, "MinuteStartStamp", each [DateTime Start]*24*60),
AddMinuteEndStamp = Table.AddColumn(AddMinuteStartStamp, "MinuteEndStamp", each [DateTime End] * 24 * 60),
ChangedType3 = Table.TransformColumnTypes(AddMinuteEndStamp,{{"MinuteStartStamp", Int64.Type}, {"MinuteEndStamp", Int64.Type}}),
RemovedOtherColumns = Table.SelectColumns(ChangedType3,{"SurgeryId", "Date Start", "Date End", "Time Start", "Time End", "MinuteStartStamp", "MinuteEndStamp"})
in
RemovedOtherColumns
6) Utilice el siguiente DAX para crear una tabla con grano minúsculo:
ExpandedTable =
GENERATE (
OriginalTable,
VAR CurrentStart = OriginalTable[MinuteStartStamp]
VAR CurrentEnd = OriginalTable[MinuteEndStamp]
RETURN
GENERATESERIES( CurrentStart, CurrentEnd, 1 )
)
7) Cambie el nombre de la columna VALOR a "Sello de minutos".
Me gustaría poder hacer todo eso en PowerQuery, pero no puedo hacer que funcione en este momento. Se actualizará si lo ordeno.
Versión enteramente en PowerQuery que creo que es más ordenada.
Solo necesitaba agregar una columna adicional en power query con lo siguiente:
List.Numbers([MinuteStartStamp], [MinuteEndStamp]-[MinuteStartStamp] + 1, 1)
Esa columna puede expandirse a nuevas filas.
Covering the world! 9:00-10:30 AM Sydney, 4:00-5:30 PM CET (Paris/Berlin), 7:00-8:30 PM Mexico City
Check out the April 2024 Power BI update to learn about new features.
User | Count |
---|---|
1 | |
1 | |
1 | |
1 | |
1 |
User | Count |
---|---|
2 | |
2 | |
1 | |
1 | |
1 |