Redondee el tiempo HACIA ABAJO a los 5/15/30 minutos más cercanos

Un usuario Pregunto ✅

emrc1

No pude encontrar nada sobre redondear los intervalos de tiempo a la X más cercana.

Esto es necesario para agregar datos de tiempo.

MROUND solo redondea al múltiplo especificado más cercano (así que también redondea hacia arriba).

p.ej:
REDONDO( 00:07:00, 15) = 0
ROUND( 00:08:00, 15) = 15

Realmente queremos que cualquier momento entre 00:00:00 y 00:14:59 se redondee a 00:00:00, cualquier momento entre 00:15:00 y 00:29:59 se redondee a 00:15:00 , etc

jthomson

¿Agrupar los datos en una nueva columna usando intervalos de 15 minutos no funcionaría para lo que necesita hacer?

Anónimo

Para redondear hacia abajo a los 15 minutos, 30 minutos, 1 hora, etc. más cercanos.

=PISO([Time],»0:15″)

=PISO([Time],»0:30″)

=PISO([Time],»1:00″)

Para redondear, use TECHO(). Ambos wtrabajar con cualquier valor de Fecha/Hora. Obviamente, funcionan en un sentido más convencional, como piso/techo con un número al 10, 100, 50 más cercano, lo que sea…

=PISO(323,100) será 300

=TECHO(59204,10) será 59210

trinitykala

Todavía puede usar la función MROUND().

=ROUND( [Time]»0:15″ ) — esto se redondeará hacia arriba/abajo a 15 min.

Solo recuerda que Mround no reconocerá tu columna con el tiempo. Entonces, si ve un número decimal devuelto por MROUND(), no entre en pánico 🙂 simplemente cambie el tipo de datos a Tiempo en su nueva columna.

pauledmonds

En respuesta a trinitykala

Esta es la fórmula que funciona:

ColRndTime = MROUND(Consulta1[ColTime],tiempo(0,15,0))

Donde: Tipo de dato = Hora

Y: Formato = HH:mm

ColTime = Consulta1[READ_DATE]

Donde: Tipo de dato = Hora

Y: Formato = HH:mm

READ_DATE = Fecha y hora de los datos de origen

Donde: Tipo de dato = Fecha / Hora

Y: Formato = (G)

SteveCampbell

No estoy seguro de si estás hablando de una hora del día o de una medida de tiempo. El tiempo se almacena como un decimal entre 0 y 1, por lo que cada 15 minutos es igual a (1/24/60)*15, que es lo mismo que 1/96.

Por lo tanto:

PISO(VALOR([Time Val]), 1/96)

emrc1

En respuesta a SteveCampbell

@SteveCampbell En este caso, estaba tratando de hacer una tabla de ‘calendario’ para la hora del día.

No sabía exactamente cómo se almacenaba el tiempo antes. Eso también podría explicar por qué he tenido problemas con el relleno de arrastre en Excel.

SteveCampbell

En respuesta a emrc1

Si se usa para la hora del día, PISO(VALOR([Time Val]), 1/96) funcionará si configura la hora y selecciona el formato correcto. si es una medida de tiempo, clasificarlo como tiempo será difícil después de pasar las 24 horas. Aquí sería mucho mejor simplemente almacenar como un valor (como segundos).

Curiosamente, la fecha / hora es solo un número, siendo 0 las 12:00:00 am del 30/12/1899.

Cada día es un valor de 1, y el tiempo es solo el decimal de cuánto estamos a lo largo del día. El 27/11/17 a las 10:00:00 es 43066.4166666entonces 43066 días después del 30/12/1899, y .416666 a través del día actual

emrc1

En respuesta a SteveCampbell

Interesante forma de hacerlo. Sin embargo, creo que bins es la solución más simple en Power BI. Guardé la fecha como una columna separada para mis datos, por lo que solo puedo agrupar los datos por hora y filtrar por fechas por separado.

emrc1

Voy a intentar responder a mi propia pregunta aquí…

FLOOR parece funcionar para esto (inicialmente asumí que funcionaría como ROUND y trabajaría en la cantidad de dígitos):

TIME( 
     HOUR( Time[Time] ),
     FLOOR( Time[Time], 5 ),
     0
)

Esto se redondeará al nivel de 5 minutos.

Creo que esto funcionará con 1, 2, 3, 4, 5, 10, 20, 15 o 30. No creo que funcione con intervalos impares como 7 o 45 porque se restablecerá en la próxima hora. Para 45, obtendrías 0 para todo entre 00:00:00 y 00:44:59 y 45 para todo entre 00:45:00 y 00:59:59.

Otra alternativa es usar SWITCH( TRUE(), […]

por ejemplo, para intervalos de 5 minutos:

5 min = 
TIME( 
    HOUR( Time[Time] ),
    SWITCH(
	TRUE(),
        MINUTE( Time[Time] ) >= 55, 55,
	MINUTE( Time[Time] ) >= 50, 50,
        MINUTE( Time[Time] ) >= 45, 45,
	MINUTE( Time[Time] ) >= 40, 40,
        MINUTE( Time[Time] ) >= 35, 35,
	MINUTE( Time[Time] ) >= 30, 30,
	MINUTE( Time[Time] ) >= 25, 25,
	MINUTE( Time[Time] ) >= 20, 20,
        MINUTE( Time[Time] ) >= 15, 15,
	MINUTE( Time[Time] ) >= 10, 10,
        MINUTE( Time[Time] ) >= 5, 5,
	MINUTE( Time[Time] ) >= 0, 0
    ),
    0
)

¿Alguien tiene algún consejo aquí o es esto correcto?

Loriano

En respuesta a emrc1

Funciona de manera brillante y la declaración de cambio se puede usar en columnas calculadas de consulta directa, que es lo que necesitaba. Gracias.

danlibbesson

En respuesta a emrc1

Buena solución: esto funcionó mejor para mí, pero creo que te falta la función MINUTE() en la solución superior.

jthomson

¿Agrupar los datos en una nueva columna usando intervalos de 15 minutos no funcionaría para lo que necesita hacer?

emrc1

En respuesta a jthomson

@jthomson No he encontrado que los contenedores hayan funcionado para mis datos antes, pero creo que en este caso, podría tener razón. Tenía la sensación de que habría una forma más sencilla.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *