Date.AddDays
Veamos la función Date.AddDays, esta función suma o resta días a una fecha.
Sintaxis
Date.AddDays(dateTime as any, numberOfDays as number) as any
· El argumento DATETIME, es la fecha con la que vamos a trabajar, podemos escribir una fecha, o, seleccionar una columna que contenga fechas.
· El argumento numberOfDays, son los días para adelantar, o, retrasar, si el valor que ponemos es positivo, adelanta días, y, si es negativo, retrasa días.
Veamos un ejemplo, tenemos un modelo con una fecha, y, unos días de entrega, queremos calcular cual es la fecha de entrega.
Vamos a llevarnos el modelo a Power Query, para ello, con una celda dentro del modelo, vamos a la pestaña de datos, dentro del grupo obtener y transformar, hacemos clic en de una tabla o rango.
Si vamos a pasos aplicados, vemos el paso tipo cambiado, este lo paso se agrega de forma automática.
En la parte central vemos el modelo.
Vemos en la columna fecha, que aparece la hora, pero no tenemos hora, hacemos clic en el siguiente icono, y, seleccionamos fecha.
Se abre la ventana cambiar tipo de columna, donde se nos pregunta si queremos sustituir la columna actual, hacemos clic en sustituir.
Vamos a agregar una nueva columna, donde a la columna fecha, le vamos a sumar los días de la columna días de entrega.
Para ello, hacemos clic en el siguiente icono, para agregar un nuevo paso.
Aparece el último paso, pues, después del signo igual ponemos la función Table.AddColumn, para añadir la nueva columna.
Como argumento tabla, es el último paso.
=Table.AddColumn(#"Tipo cambiado"
El siguiente argumento es el nombre que le vamos a dar a la columna, le voy a poner fecha de entrega.
= Table.AddColumn(#"Tipo cambiado", "Fecha de entrega"
Coma, ponemos la palabra each (para cada).
= Table.AddColumn(#"Tipo cambiado", "Fecha de entrega", each
Ahora, ponemos la función Date.AddDays, abrimos un paréntesis, como argumento DATETIME, entre corchetes, ponemos la columna fecha.
= Table.AddColumn(#"Tipo cambiado", "Fecha de entrega", each Date.AddDays([Fecha])
Coma, como argumento numero de días, entre corchetes, ponemos la columna días de entrega.
Cerramos paréntesis, y, aceptamos.
= Table.AddColumn(#"Tipo cambiado", "Fecha de entrega", each Date.AddDays([Fecha], [Dias de entrega]))
Vemos en la nueva columna la columna fecha más los días de la columna días de entrega.
También, podemos hacerlo a través la pestaña agregar columna, haciendo clic en columna personalizada.
Se abre la ventana de columna personalizada, le podemos dar un nombre a la nueva columna, yo le voy a dejar el que aparece de forma predeterminada, y, en la ventana formula de columna personalizada, ponemos la función, abrimos un paréntesis, seleccionamos la columna fecha de la ventana columnas disponibles, ponemos coma, seleccionamos la columna días de entrega en columnas disponibles, cerramos paréntesis, y, aceptamos.
Vemos que tenemos los mismos resultados.
Date.DayOfWeekName
Tenemos otra función llamada Date.DayOfWeekName, que nos devuelve el día de la semana, esta función tiene dos argumentos, el primero de ellos es date, que es la fecha con la que vamos a trabajar, y, de forma opcional, tiene el argumento culture, que es las iniciales del país con el que estamos trabajando, por ejemplo, para España, seria “es-ES”.
Pues, vamos a añadir una nueva columna, para saber a qué día de la semana corresponde cada fecha de la columna fecha de entrega.
Añadimos un nuevo paso, después del signo igual, volvemos a usar la función TableAddColumn, abrimos un paréntesis, como argumento tabla, es el último paso.
= Table.AddColumn(#"Tipo cambiado1"
Coma, como nombre de columna, voy a poner día semana.
= Table.AddColumn(#"Tipo cambiado1", "Dia semana"
Coma, ponemos la palabra each.
= Table.AddColumn(#"Tipo cambiado1", "Dia semana", each
Ponemos la función Date.DayOfWeekName, abrimos un paréntesis, y, entre corchetes, ponemos la columna fecha de entrega.
Cerramos paréntesis, y, aceptamos.
= Table.AddColumn(#"Tipo cambiado1", "Dia semana", each Date.DayOfWeekName([Fecha de entrega]))
Obtenemos el día de la semana para cada fecha.
Nos dicen que, si el día de la semana es sábado, o, domingo, debemos de adelantar la fecha de entrega, dos días si es sábado, y, un día, si es domingo, para ello, vamos a usar la función IF, esta expresión selecciona un valor verdadero, o, falso, dependiendo según la pregunta (prueba lógica).
Esta función tiene el argumento condición, que es la prueba lógica, en otras palabras, la pregunta, después, debemos de poner la palabra THEN (entonces), después viene el argumento expresión si verdadero, quiere decir, la acción a realizar si la pregunta es verdadera, después, viene la palabra ELSE (en caso contrario), y, por último, el argumento expresión si falso, es decir, la acción a realizar, si la pregunta no se cumple.
Después de la palabra each, ponemos la función IF.
= Table.AddColumn(#"Tipo cambiado2", "Nueva fecha entrega", each if
Preguntamos si la columna Dia semana es igual a sábado.
= Table.AddColumn(#"Tipo cambiado2", "Nueva fecha entrega", each if [Dia semana]="sábado"
En ese caso, con la función Date.AddDays, añadimos dos días a la columna fecha de entrega.
= Table.AddColumn(#"Tipo cambiado2", "Nueva fecha entrega", each if [Dia semana]="sábado" then Date.AddDays([Fecha de entrega],2)
En caso contrario, preguntamos si la columna día semana es igual a domingo.
= Table.AddColumn(#"Tipo cambiado2", "Nueva fecha entrega", each if [Dia semana]="sábado" then Date.AddDays([Fecha de entrega],2) else if [Dia semana]="domingo"
En ese caso, con la función Date.AddDays, añadimos un día a la columna fecha de entrega.
= Table.AddColumn(#"Tipo cambiado2", "Nueva fecha entrega", each if [Dia semana]="sábado" then Date.AddDays([Fecha de entrega],2) else if [Dia semana]="domingo" then Date.AddDays([Fecha de entrega],1)
En caso contrario, si ninguna de las condiciones se cumple, pues que devuelva la columna fecha de entrega.
= Table.AddColumn(#"Tipo cambiado2", "Nueva fecha entrega", each if [Dia semana]="sábado" then Date.AddDays([Fecha de entrega],2) else if [Dia semana]="domingo" then Date.AddDays([Fecha de entrega],1) else [Fecha de entrega])
Cerramos paréntesis, y, aceptamos.
= Table.AddColumn(#"Tipo cambiado2", "Nueva fecha entrega", each if [Dia semana]="sábado" then Date.AddDays([Fecha de entrega],2) else if [Dia semana]="domingo" then Date.AddDays([Fecha de entrega],1) else [Fecha de entrega])
Podemos ver que donde le día de la semana es sábado, se le ha sumado dos días a la fecha de entrega, y, cuando es domingo, se le ha sumado un día a la fecha de entrega.
Si queremos evitar la columna día semana, señalamos el paso personalizado1.
Encerramos la expresión Date.AddDays en la función Date.DayOfWeekName.
= Table.AddColumn(#"Tipo cambiado", "Fecha de entrega", each Date.DayOfWeekName(Date.AddDays([Fecha], [Dias de entrega])))
Eliminamos el paso personalizado2.
Date.AddMonths
Ahora, vamos a ver la función Date.AddMonths, esta función añade o retrasa meses, esta función tiene dos argumentos, el primero de ellos es DATETIME, que es la fecha con la que vamos a trabajar, y, el segundo de ellos es numero de meses, que son los meses para adelantar, o, retrasar, si el valor es positivo, los meses se adelantan, y, si es negativo, se retrasan.
Por ejemplo, tenemos el siguiente modelo, donde tenemos unas fechas, y, las iniciales del mes.
Vamos a llevarnos este modelo a Power Query, para ello, con una celda dentro del modelo, vamos a la pestaña de datos, dentro del grupo obtener y transformar, hacemos clic en de una tabla o rango.
Igual que antes, vamos a calcular la fecha de entrega, si el mes tiene 30 días, la fecha de entrega es sumar 1 al mes, en caso contrario, hay que sumar dos al mes.
Tenemos una función llamada Date.EndOfMonth, que nos devuelve el final de mes, el único argumento que tiene es la fecha con la que vamos a trabajar.
Vamos a calcular el final de mes para cada fecha, para ello, agregamos un paso, después del signo igual, usamos la función Table.AddColumn, para añadir una nueva columna.
Como argumento tabla, dejamos el paso que aparece, que es el último.
= Table.AddColumn(Origen
Coma, ahora, el nombre que le vamos a poner a la columna, le voy a poner meses a adelantar, entre comillas dobles.
= Table.AddColumn(Origen, "Meses a adelantar"
Coma ponemos la palabra each (para cada).
= Table.AddColumn(Origen, "Meses a adelantar", each
Ponemos la función Date.EndOfMonth, abrimos un paréntesis, entre corchetes, ponemos la columna fecha, cerramos paréntesis de Date.EndOfMonth, y, de Table.AddColumn.
= Table.AddColumn(Origen, "Meses a adelantar", each Date.EndOfMonth([Fecha]))
Aceptamos, y, vemos una nueva columna, con el ultimo día para cada fecha.
Necesitamos quedarnos con el día, para ello, tenemos una función llamada Date.Day, que solo tiene un argumento, que es la fecha con la que vamos a trabajar, vamos a la barra de fórmulas, y, encerramos la expresión Date.EndOfMonth([Fecha]) en la función Date.Day.
= Table.AddColumn(Origen, "Meses a adelantar", each Date.Day(Date.EndOfMonth([Fecha])))
Aceptamos, y, tenemos el ultimo día del mes para cada fecha.
Como he dicho, si el mes tiene 30 días, la fecha de entrega es un mes más, y, si tiene 31 días, la fecha de entrega es dos meses más, si no cumple ninguna de las condiciones, se queda la fecha sin cambios, para ello, volvemos a usar la función IF, la cual ponemos después de la palabra each.
= Table.AddColumn(Origen, "Meses a adelantar", each if
Como prueba lógica, preguntamos si el día es igual a 30.
= Table.AddColumn(Origen, "Meses a adelantar", each if Date.Day(Date.EndOfMonth([Fecha]))=30
Ponemos la palabra THEN, y, como argumento expresión si verdadero, ponemos 1.
= Table.AddColumn(Origen, "Meses a adelantar", each if Date.Day(Date.EndOfMonth([Fecha]))=30 then 1
Ponemos la palabra ELSE, es decir, en caso contrario, y, como argumento expresión si falso, ponemos 2.
= Table.AddColumn(Origen, "Meses a adelantar", each if Date.Day(Date.EndOfMonth([Fecha]))=30 then 1 else 2)
Aceptamos, y, tenemos los meses a adelantar.
Pero, vemos que, al mes de febrero, que no termina ni en 30 ni en 31, le ha asignado el valor de 2, cuando debería de haber dejado el valor que tenía, es decir, el ultimo día del mes, porque a esta fecha no le vamos a sumar meses.
Vamos a tener que usar un IF anidado, para ello, volvemos a la barra de fórmulas, después del primer ELSE, ponemos otro IF.
= Table.AddColumn(Origen, "Meses a adelantar", each if Date.Day(Date.EndOfMonth([Fecha]))=30 then 1 else if
Preguntamos si el ultimo día del mes es igual a 31.
= Table.AddColumn(Origen, "Meses a adelantar", each if Date.Day(Date.EndOfMonth([Fecha]))=30 then 1 else if Date.Day(Date.EndOfMonth([Fecha]))=31
En ese caso, que ponga el valor 2.
= Table.AddColumn(Origen, "Meses a adelantar", each if Date.Day(Date.EndOfMonth([Fecha]))=30 then 1 else if Date.Day(Date.EndOfMonth([Fecha]))=31 then 2
Ponemos la palabra ELSE, y, ponemos el valor cero, es decir, que, si no se cumple ni la primera, ni la segunda condición, que ponga cero.
= Table.AddColumn(Origen, "Meses a adelantar", each if Date.Day(Date.EndOfMonth([Fecha]))=30 then 1 else if Date.Day(Date.EndOfMonth([Fecha]))=31 then 2 else 0 )
Vemos que ahora en los meses de febrero poner cero.
Ya sabemos los meses a adelantar, pues, ahora usamos la función Date.AddMonths, para ello, agregamos un nuevo paso, ponemos la función Table.AddColumn, abrimos un paréntesis, como argumento tabla, dejamos el último paso.
= Table.AddColumn(#"Tipo cambiado”
Coma, como nombre a la nueva columna, pongo fecha de entrega.
= Table.AddColumn(#"Tipo cambiado","Fecha de entrega”
Coma, ponemos la palabra each.
= Table.AddColumn(#"Tipo cambiado","Fecha de entrega", each
Ponemos la función Date.AddMonths, como argumento date, entre corchetes ponemos la columna fecha.
= Table.AddColumn(#"Tipo cambiado","Fecha de entrega", each Date.AddMonths([Fecha]
Coma, como argumento numero de meses, entre corchetes, ponemos la columna meses a adelantar.
= Table.AddColumn(#"Tipo cambiado","Fecha de entrega", each Date.AddMonths([Fecha], [Meses a adelantar]
Cerramos paréntesis y aceptamos.
= Table.AddColumn(#"Tipo cambiado","Fecha de entrega", each Date.AddMonths([Fecha], [Meses a adelantar]))
Vemos la fecha de entrega, pero vemos como para los meses de febrero, ha respetado las fechas de la columna fecha.
Esta función, dándole un año, un mes, y, un día, nos lo devuelve en formato de fecha.
Sintaxis
#date(year as number, month as number, day as number) as date
Tenemos el siguiente modelo, donde tenemos tres columnas, la primera de ellas es el año, la segunda el mes, y, la tercera el día.
Vamos a crear una nueva columna, donde usaremos la función #date para obtener la fecha, para ello, agregamos un nuevo paso, ponemos la función Table.AddColumn, abrimos un paréntesis, y, como argumento tabla, dejamos el último paso.
= Table.AddColumn(#"Tipo cambiado"
Coma, como nombre de columna ponemos fecha.
= Table.AddColumn(#"Tipo cambiado","Fecha"
Coma, ponemos la palabra each (para cada).
Ponemos la función #date, abrimos un paréntesis, como argumento año, entre corchetes, ponemos la columna año.
= Table.AddColumn(#"Tipo cambiado","Fecha", each #date([Año]
Coma, como argumento mes, entre corchetes, ponemos la columna mes.
= Table.AddColumn(#"Tipo cambiado","Fecha", each #date([Año],[Mes]
Coma, como argumento día, ponemos entre corchetes, la columna día.
= Table.AddColumn(#"Tipo cambiado","Fecha", each #date([Año],[Mes],[Dia]
Cerramos paréntesis de #date, y, de Table.AddColumn.
= Table.AddColumn(#"Tipo cambiado","Fecha", each #date([Año],[Mes],[Dia]))
Aceptamos, y, tenemos la columna con las fechas.
Por supuesto, lo podemos hacer desde la pestaña de agregar columna, haciendo clic en columna personalizada.
Se abre la ventana de columna personalizada, voy a dejar el nombre predeterminado, en la ventana formula de columna personalizada, ponemos la misma expresión que hemos puesto en la barra de fórmulas.
Aceptamos, y, tenemos la misma columna que la columna fecha.
Date.EndOfDay
Tenemos una función llamada Date.EndOfDay, que nos devuelve el final del día, por ejemplo, tenemos le siguiente modelo en Power Query, donde tenemos una fecha y una hora.
Vamos a calcular el final del día para cada fecha, para ello, añadimos un nuevo paso, ponemos la función Table.AddColumn, abrimos un paréntesis, y, como argumento tabla, dejamos el último paso.
= Table.AddColumn(#"Tipo cambiado"
Coma, como nombre de columna, ponemos fin día, entre comillas dobles.
= Table.AddColumn(#"Tipo cambiado", "Fin dia"
Coma, ponemos la palabra each.
= Table.AddColumn(#"Tipo cambiado", "Fin dia", each
Ponemos la función Date.EndOfDay, y, abrimos un paréntesis.
= Table.AddColumn(#"Tipo cambiado", "Fin dia", each Date.EndOfDay(
Entre corchetes, ponemos la columna fecha, cerramos paréntesis de Date.EndOfDay, y, de Table.AddColumn.
= Table.AddColumn(#"Tipo cambiado", "Fin dia", each Date.EndOfDay([Fecha]))
Tenemos una columna con el fin de día para cada fecha.
Pero, veo un problema, el final del día, seria las 23:59:59, no las 0:00:00, para solventarlo, voy a usar la función #duration, con esta función podemos añadir o restar días, horas, minutos o segundos.
Sintaxis
#duración( días como número, horas como número, minutos como número, segundos como número) como duración
En este caso, vamos a restar un minuto para ello, después de Date.EndOfDay, ponemos el símbolo de restar, la función #duration, abrimos un paréntesis, y, ponemos un segundo.
= Table.AddColumn(#"Tipo cambiado", "Fin dia", each Date.EndOfDay([Fecha])-#duration(0,0,0,1))
Ahora, si tenemos el final de cada día.
Date.IsInCurrentDay
Tenemos una función llamada Date.IsInCurrentDay, que nos devuelve VERDADERO, si en una fecha el día corresponde con el día actual, y, FALSO si no corresponde.
Tenemos el siguiente modelo, con dos fechas, una de ellas, es la fecha actual.
Añadimos nuevo paso, ponemos la función Table.AddColumn, abrimos un paréntesis, y, como argumento tabla, dejamos el último paso.
= Table.AddColumn(#"Tipo cambiado"
Coma, como nombre de columna ponemos día actual, entre comillas dobles.
= Table.AddColumn(#"Tipo cambiado", "Dia actual"
Coma, ponemos la palabra each.
= Table.AddColumn(#"Tipo cambiado", "Dia actual", each
Ponemos la función Date.IsInCurrentDay, abrimos un paréntesis, y, entre corchetes, ponemos la columna fecha.
= Table.AddColumn(#"Tipo cambiado", "Dia actual", each Date.IsInCurrentDay([Fecha]
Cerramos paréntesis, y, aceptamos.
= Table.AddColumn(#"Tipo cambiado", "Dia actual", each Date.IsInCurrentDay([Fecha]))
Vemos que para la primera fecha nos devuelve VERDADERO, y, para la segunda nos devuelve FALSO.
Si es VERDADERO, debe de poner en curso, y, si es FALSO, debe de poner expirado, para ello, vamos a usar la función IF, la cual ponemos antes de la función Date.IsInCurrentDay.
= Table.AddColumn(#"Tipo cambiado", "Dia actual", each if Date.IsInCurrentDay([Fecha])
Vemos que no hemos igualado la función a nada, es porque por defecto pone el valor de VERDADERO.
Después de la función, ponemos la palabra THEN, y, entre comillas dobles, ponemos en progreso.
= Table.AddColumn(#"Tipo cambiado", "Dia actual", each if Date.IsInCurrentDay([Fecha]) then "En progreso"
Ponemos la palabra ELSE, y, entre comillas dobles, ponemos expirado.
= Table.AddColumn(#"Tipo cambiado", "Dia actual", each if Date.IsInCurrentDay([Fecha]) then "En progreso" else "Expirado")
Aceptamos, y, vemos que, en la fecha actual, pone en progreso, y, la que no es la fecha actual, pone expirado.
Tenemos la misma función, pero para obtener el mes actual, el trimestre actual, la semana actual, o, el año actual.
Date.IsInCurrentMonth
Date.EstáEnElTrimestreActual
Date.IsInCurrentWeek
Date.IsInCurrentYear
Comments