Ayuda Notion

Soporte entre usuarios Notion


Registrate y participa

Es gratis y fácil

Recibe respuestas

Respuestas, votos y comentarios

Vota y selecciona respuestas

Recibe puntos, vota y da la solución

Pregunta

2votos

Calcular el % de opcupacion de una vivienda

Hola, tengo una base de datos donde esta la informacion de las reservas temporales de los departamentos que gestiono. Una columna llamada "reserva" tiene la fecha de check in y check out de la estadia. Necesito calcular el % de opcupacion de las noches de cada mes teniendo en cuenta que:

  • El check in puede ser en un mes y el check out en el siguiente (deberia saber los dias de ocupacion de cada mes)
  • El check in puede ser en enero y check out en marzo (febrero estaria al 100%)
  • Si se va el 1/5/2023, la noche ocupda corresponderia a abril.

Se me esta complicando. Entiedno que deberia agregar una columna por cada mes pero no llegue al calculo de dias por estas aristas.

2 Respuestas

2votos

Marcos Puntos500

Peter, ahi lo pude solucionar gracias a otra respuesta que tambien me diste en una pregunta. SOlo me queda cambiar la formula para los momentos que pasen de diciembre a enero. Pero creoq ue ya se como hacerlo. TE lo dejo por si te sirve o ves algun error.

Cree una propiedad por cada mes y puse las siguientes formulas. Ej:

Febrero:

if(and(month(start(prop("RESERVA"))) == 1, month(end(prop("RESERVA"))) == 1), prop("NOCHES"), if(and(month(start(prop("RESERVA"))) < 1, month(end(prop("RESERVA"))) > 1), 30, if(and(month(start(prop("RESERVA"))) < 1, month(end(prop("RESERVA"))) == 1), dateBetween(end(prop("RESERVA")), fromTimestamp(1.6752132e+12), "days"), if(and(month(start(prop("RESERVA"))) == 1, month(end(prop("RESERVA"))) > 1), dateBetween(fromTimestamp(1.677672e+12), start(prop("RESERVA")), "days"), 0))))

Marzo

if(and(month(start(prop("RESERVA"))) == 2, month(end(prop("RESERVA"))) == 2), prop("NOCHES"), if(and(month(start(prop("RESERVA"))) < 2, month(end(prop("RESERVA"))) > 2), 31, if(and(month(start(prop("RESERVA"))) < 2, month(end(prop("RESERVA"))) == 2), dateBetween(end(prop("RESERVA")), fromTimestamp(1.6776324e+12), "days"), if(and(month(start(prop("RESERVA"))) == 2, month(end(prop("RESERVA"))) > 2), dateBetween(fromTimestamp(1.6803504e+12), start(prop("RESERVA")), "days"), 0))))

Mil gracias por la ayuda. Ahora me queda aprender un poco mas en como organizar las bases de datos. Si se te ocurre algun video basico para recomendar o algun tip seria de ayuda.

0voto

Peter comentado

Que bueno que lo lograste y gracias por compartirlo, seguramente le ayuda a alguien más.

1voto

Peter Puntos112410

Con nuevas columnas de formulas para Notion podrías sacarlo. Una para sacar el mes y otras 12 para cada uno de los meses.

Tomando en cuenta que en la columna "Reservas" (con mayúscula) tienes la fecha de inicio y fin, crea una propiedad nueva que se llame "Mes" con la siguiente formula.

formatDate(prop("Reservas"), "MMMM")

Esta formula de Notion te va a dar simplemente el nombre del mes de acuerdo a las fechas para poder identificarlos en las siguientes columnas.

Te pongo como ejemplo Abril que tiene 30 días, tienes que hacer lo mismo cambiando la formula y el numero de días que tenga el mes.

Crea una nueva propiedad de formula que se llame "Abril" con la siguiente formula.

if(prop("Mes") == "April", dateBetween(end(prop("Reservas")), start(prop("Reservas")), "days") * 100 / 30, 0)

Esta formula de Notion revisa si la columna del mes es Abril y de ser así, cuenta los días entre la fecha de inicio y fin, en caso de no cumplir la regla, pone un cero.

Haz lo mismo con todos los meses y sus columnas.

Tienes que tomar en cuenta dos cosas.

1- Un día cuenta como 24 horas, entonces si alguien entra un lunes y sale el miércoles, son dos días y no tres. Entra el lunes, el martes se cumple 1 día y el miércoles se cumple el segundo día, aunque en las fechas se seleccionen 3 días.

2- A finales de este mes sale Notion en Español y si cambias el idioma, vas a tener que actualizar la formula para utilizar Abril en lugar de April.

Me parece que con esto puedes sacar exactamente lo que necesitas.

0voto

Marcos comentado

Peter gracias por la respuesta. Simplemente hay algo que creo que no serviria (puedo equivicarme ya que no soy experto). De esta manera, que pasa si una persona ingresa el 15 de abril y se va el 3 de mayo? Yo lo que necesitaria en ese caso es que en la columna "abril" me tome 15 "noches" y en la de mayo me tome 2 "noches". Segun creo en este caso solo toma en cuenta las reservas de un mismo mes. Estoy en lo correcto?

1voto

Peter comentado

Correcto, para sacar la ocupación del mes, tiene que ser por mes.

Si también quieres los totales puedes tener una columna de noches totales con la siguiente formula.

dateBetween(end(prop("Reservas")), start(prop("Reservas")), "days")

Esa formula no contempla el mes y te da el total de la ocupación sin afectar lo que quieres tener, que es la ocupación de cada mes por separado.

0voto

Marcos comentado

Peter, creo que no me explique o hay algo que no entiendo. Vamos a un ejemplo:

Fecha de reserva: 26/03/2023 --> 04/04/2023

Si agrego una prop que sea "mes" y pongo la formula que me decis, el resultado va a ser "March". (Aca el primer problema: Toma como que es marzo cuando hay dias de abril tambien.)

Si luego agrego las columnas que comentas, al ser "march" la columna, va a calcular la ocupacion en la columna de marzo (Segundo problema: No va a contabilizar nada en la columna de "abirl". Y segun la formula que me indicas, va a calcular la ocupacion segun 9 dias (Tercer problema: Marzo en realidad deberia tomar de ocupacion 6 noches).

Me explico? Hay algo que no estoy viendo? La pregunta va a un problema mas complejo. La duda esta en como separar por mes los dias ocupados.

1voto

Peter comentado

Es así y te entendí bien, pero yo me explique mal. :)

Si quieres contar ocupación por mes, tiene que ser de manera independiente. Entonces si el huésped es Carlos y cruza meses tendrías que hacer algo así.

Carlos > 26 de abril a 30 de abril.
Carlos > 1 mayo al 5 de mayo.

Dos entradas y salidas para la misma persona en cada uno de los meses, porque lo que te importa es el mes, no la persona. Entonces hay que hacer un registro de días por mes.

Es la única manera de sacar un porcentaje de ocupación por mes separado y exacto de forma sencilla.

0voto

Marcos comentado

Si claro pero ya se complica tener que separar por meses cada reserva. Sobre todo porque hya otra informacion de reserva como costos, limpieza y demas cuestiones que no puedo serparar. Espero encontrar alguna otra forma.

1voto

Peter comentado

Entonces dejaría de ser la ocupación mensual únicamente y tendrías que construir una super formula con expresiones regulares para que te calcule el año completo.

Que cuente el año entero por días y fechas, lo separe por meses, lo separe por semanas, lo separe por días, identifique cada mes, si varían los días que se ajuste al año (como febrero), que calcule, sume y reste dependiendo del mes que es, que le de formato a cada uno de ellos para el resultado, si coincide el mes que sume los días y que te de un total de ese mes a decidir con la suma general.

Eso multiplicado por 12 en donde en cada una de las columnas estableces uno de los meses en la formula para ver su total.

Entonces es posible, pero hay que desarrollar la formula completa desde cero para que haga todos los cálculos y los presente como quieres exactamente.

Creo que te conviene plantear de otra manera el sistema, porque estas intentando tener todo el sistema en una base de datos en lugar de dividir las cosas.

Por ejemplo:

1- base de datos de huéspedes
2- base de datos de ocupación
3- base de datos de costos

Con relaciones y rollups puedes sacar todo perfectamente como necesitas de forma separada y estructurada, pero como es el caso de la mega formula, hay que entender que se necesita y hacer todo el sistema a medida desde cero.

0voto

Marcos comentado

Peter, creo que tenes razon en el armado de la base. Al no tener demasiada experiencia en eso solo tengo una base con todo:

  • huesped
  • fechas de reservas
  • Precios, ingresos, descuentos
  • horarios de check in y check out
  • limpiezas
  • etc.

Voy a ver como puedo mejorar por ese lado. gracias!

Por favor, accede o regístrate para responder a esta pregunta.

...

En Ayuda Notion puedes preguntar, recibir soporte o responder dudas sobre como utilizar Notion. Comparte con otros usuarios como funciona Notion.

Conecta