DATEDIFF para CONSULTA DE ENERGÍA

Última actualización el 17/08/2025
Tiempo de leer: 3 minutos

¿Cómo realizar un DATEDIFF para POWER QUERY? El código para crear su función de Power Query personalizada se encuentra en este artículo.

  1. Copia el código de las 5 funciones
  2. Pégalos en 5 funciones personalizadas
  3. Llamar a la función DATEDIF personalizada

Copia cada código en una consulta diferente.

Para cada código siguiente, debe escribirlos en una consulta en blanco (Obtener datos > De otra fuente > Consulta en blanco)

Menú crear consulta en blanco

Y pegarás los códigos en el editor de Power Query (Inicio > Editor avanzado)

Pega el código en el Editor

El código de función DATEDIFF para Power Query

Los siguientes códigos devuelven las cinco opciones de la Función DATEDIFF (a, m, d, am, md).

Función fn_D

Este es el parámetro más fácil de construir.

(date1, date2) =>
let
    Source = Duration.Days(date2 - date1)
in
    Source

Función fn_Y

Acabo de aplicar los pasos estándar de Power Query para calcular el número de años.

  1. Diferencia entre las 2 fechas en días
  2. Convertir el tipo de la columna a Duración
  3. Devuelve el duración en años
(date1, date2) =>
let
    Source = Duration.Days(date2 - date1),
    TheDuration = (Duration.TotalDays(Duration.From(Source)) / 365),
    YearResult = Number.RoundDown(TheDuration)
in
    YearResult

Función fn_YM

Luego, calculamos el número de meses del año actual (parámetro YM). Aquí debemos considerar si el día y el mes son mayores o menores entre las 2 fechas.

(date1, date2)=>
let
    GapDay = Date.Day(date2) - Date.Day(date1),
    GapMonth = Date.Month(date2) - Date.Month(date1),
    NbMonth = if GapDay < 0 then GapMonth - 1 else GapMonth,
    YM = if NbMonth < 0 then (12 + NbMonth) else NbMonth
in
    YM

Función fn_MD

Aquí, devuelvo el número de días del mes actual (MD) y hay una diferencia con la función DATEDIF de Excel.

La lógica aquí es 'construir' una fecha con el último día del mes del fecha1. Si el primer día es menor que el segundo día, simplemente resto los 2 valores. Pero si Day1 es mayor, entonces calculo la diferencia entre el último día del mes y fecha1 y finalmente sumar el número de Day2

(date1, date2)=>
let
    Day1 = Date.Day(date1),
    Day2 = Date.Day(date2),
    DayEndMonth = Date.Day(Date.EndOfMonth(date1)),
    MD = if Day1 <= Day2 then Day2 - Day1 else (DayEndMonth-Day1)+Day2
in
    MD

Función fn_M

Para calcular el número de meses entre las 2 fechas, Necesito llamar a la función fn_Y y multiplicar por 12, y luego agregar el resultado de la función fn_YM.

(date1, date2) =>
let
    Step1 = fn_Y(date1, date2)*12,
    Step2 = Step1 + fn_YM(date1, date2)
in
    Step2

Función fn_YD

Aquí nuevamente podría haber una diferencia con la función DATEDIF pero este parámetro prácticamente nunca se usa (yo lo usé una vez en 20 años). De todos modos, la lógica aquí es construir una fecha con el año de fecha2 y el día y el mes de fecha1. Si la nueva fecha es mayor que la fecha2, reconstruyo una fecha del año anterior. Finalmente, solo necesito restar las 2 fechas para devolver el número de días del año.

(date1, date2)=>
let
    Year2 = Date.Year(date2),
    BuildDate = #date(Year2, Date.Month(date1), Date.Day(date1)),
    TestNewDate = if BuildDate <= date2 
                   then BuildDate
                   else #date(Year2 - 1, Date.Month(date1), Date.Day(date1)),
    YD = Duration.Days(date2 - TestNewDate)
in
    YD

FECHA SI para CONSULTA DE ENERGÍA

Finalmente, incluyo todas estas funciones dentro de otra función de Power Query llamada fn_DateDif

(date1, date2, ParamDate)=>
let
    ValParam = Text.Upper(ParamDate),
    ResultFunction = if ValParam = "D" then fn_D(date1, date2)
                    else if ValParam = "Y" then fn_Y(date1, date2)
                    else if ValParam = "M" then fn_M(date1, date2)
                    else if ValParam = "YM" then fn_YM(date1, date2)
                    else if ValParam = "MD" then fn_MD(date1, date2)
                    else if ValParam = "YD" then fn_YD(date1, date2)
                    else "Wrong parameter"
in
    ResultFunction

Cuando hayas copiado todos los códigos, tendrás esto.

Proyecto de consulta de potencia completa

Aplicación en Excel

Ahora en Power Query, debe llamar a la función con el menú Agregar columna> Invocar función personalizada.

Menú Invocar función personalizada

Entonces llamas al fn_DateDiff función y complete los tres parámetros, como se muestra en este ejemplo.

Llame a la función DATEDIF con el parámetro Y

Y cuando cargas los datos en Excel, tienes este resultado.

Resultado de la función Power Query en Excel

La diferencia con la función DADOSI de Excel

Al probar la función Power Query con la función Excel, el parámetro 'MD' producirá resultados diferentes.

Diferencia con la función Excel DATEDIF para el parámetro MD

Esto se debe a que la lógica utilizada para calcular este parámetro difiere de la de Excel. En el primer ejemplo, Excel suma 12 años y 3 meses a la primera fecha. Por lo tanto, la "nueva fecha" es el 22/05/2017. En este caso, 09/06/2017 - 22/05/2017 = 18 días. La diferencia podría explicarse por... el número de años bisiestos.

3 Comentarios

  1. Lissy
    05/11/2024 a las 09:25

    Hola Frederic,

    Lo intenté, pero en mi caso la función fn_YD dice 366 si la primera fecha es el 25 de junio de 1954 y la segunda fecha es el 2 de junio de 25

    Responder

    • Frédéric LE GUEN
      05/11/2024 a las 10:51

      Gracias por el comentario. Verificaré la función de inmediato.

      Responder

    • Frédéric LE GUEN
      05/11/2024 a las 13:32

      Vale, es una actualización. En lugar de BuildDate < date2, he actualizado la prueba lógica BuildDate <= date2

      Responder

Deje un comentario

Su dirección de correo electrónico no será publicada. Las areas obligatorias están marcadas como requeridas *

DATEDIFF para CONSULTA DE ENERGÍA

Tiempo de leer: 3 minutos
Última actualización el 17/08/2025

¿Cómo realizar un DATEDIFF para POWER QUERY? El código para crear su función de Power Query personalizada se encuentra en este artículo.

  1. Copia el código de las 5 funciones
  2. Pégalos en 5 funciones personalizadas
  3. Llamar a la función DATEDIF personalizada

Copia cada código en una consulta diferente.

Para cada código siguiente, debe escribirlos en una consulta en blanco (Obtener datos > De otra fuente > Consulta en blanco)

Menú crear consulta en blanco

Y pegarás los códigos en el editor de Power Query (Inicio > Editor avanzado)

Pega el código en el Editor

El código de función DATEDIFF para Power Query

Los siguientes códigos devuelven las cinco opciones de la Función DATEDIFF (a, m, d, am, md).

Función fn_D

Este es el parámetro más fácil de construir.

(date1, date2) =>
let
    Source = Duration.Days(date2 - date1)
in
    Source

Función fn_Y

Acabo de aplicar los pasos estándar de Power Query para calcular el número de años.

  1. Diferencia entre las 2 fechas en días
  2. Convertir el tipo de la columna a Duración
  3. Devuelve el duración en años
(date1, date2) =>
let
    Source = Duration.Days(date2 - date1),
    TheDuration = (Duration.TotalDays(Duration.From(Source)) / 365),
    YearResult = Number.RoundDown(TheDuration)
in
    YearResult

Función fn_YM

Luego, calculamos el número de meses del año actual (parámetro YM). Aquí debemos considerar si el día y el mes son mayores o menores entre las 2 fechas.

(date1, date2)=>
let
    GapDay = Date.Day(date2) - Date.Day(date1),
    GapMonth = Date.Month(date2) - Date.Month(date1),
    NbMonth = if GapDay < 0 then GapMonth - 1 else GapMonth,
    YM = if NbMonth < 0 then (12 + NbMonth) else NbMonth
in
    YM

Función fn_MD

Aquí, devuelvo el número de días del mes actual (MD) y hay una diferencia con la función DATEDIF de Excel.

La lógica aquí es 'construir' una fecha con el último día del mes del fecha1. Si el primer día es menor que el segundo día, simplemente resto los 2 valores. Pero si Day1 es mayor, entonces calculo la diferencia entre el último día del mes y fecha1 y finalmente sumar el número de Day2

(date1, date2)=>
let
    Day1 = Date.Day(date1),
    Day2 = Date.Day(date2),
    DayEndMonth = Date.Day(Date.EndOfMonth(date1)),
    MD = if Day1 <= Day2 then Day2 - Day1 else (DayEndMonth-Day1)+Day2
in
    MD

Función fn_M

Para calcular el número de meses entre las 2 fechas, Necesito llamar a la función fn_Y y multiplicar por 12, y luego agregar el resultado de la función fn_YM.

(date1, date2) =>
let
    Step1 = fn_Y(date1, date2)*12,
    Step2 = Step1 + fn_YM(date1, date2)
in
    Step2

Función fn_YD

Aquí nuevamente podría haber una diferencia con la función DATEDIF pero este parámetro prácticamente nunca se usa (yo lo usé una vez en 20 años). De todos modos, la lógica aquí es construir una fecha con el año de fecha2 y el día y el mes de fecha1. Si la nueva fecha es mayor que la fecha2, reconstruyo una fecha del año anterior. Finalmente, solo necesito restar las 2 fechas para devolver el número de días del año.

(date1, date2)=>
let
    Year2 = Date.Year(date2),
    BuildDate = #date(Year2, Date.Month(date1), Date.Day(date1)),
    TestNewDate = if BuildDate <= date2 
                   then BuildDate
                   else #date(Year2 - 1, Date.Month(date1), Date.Day(date1)),
    YD = Duration.Days(date2 - TestNewDate)
in
    YD

FECHA SI para CONSULTA DE ENERGÍA

Finalmente, incluyo todas estas funciones dentro de otra función de Power Query llamada fn_DateDif

(date1, date2, ParamDate)=>
let
    ValParam = Text.Upper(ParamDate),
    ResultFunction = if ValParam = "D" then fn_D(date1, date2)
                    else if ValParam = "Y" then fn_Y(date1, date2)
                    else if ValParam = "M" then fn_M(date1, date2)
                    else if ValParam = "YM" then fn_YM(date1, date2)
                    else if ValParam = "MD" then fn_MD(date1, date2)
                    else if ValParam = "YD" then fn_YD(date1, date2)
                    else "Wrong parameter"
in
    ResultFunction

Cuando hayas copiado todos los códigos, tendrás esto.

Proyecto de consulta de potencia completa

Aplicación en Excel

Ahora en Power Query, debe llamar a la función con el menú Agregar columna> Invocar función personalizada.

Menú Invocar función personalizada

Entonces llamas al fn_DateDiff función y complete los tres parámetros, como se muestra en este ejemplo.

Llame a la función DATEDIF con el parámetro Y

Y cuando cargas los datos en Excel, tienes este resultado.

Resultado de la función Power Query en Excel

La diferencia con la función DADOSI de Excel

Al probar la función Power Query con la función Excel, el parámetro 'MD' producirá resultados diferentes.

Diferencia con la función Excel DATEDIF para el parámetro MD

Esto se debe a que la lógica utilizada para calcular este parámetro difiere de la de Excel. En el primer ejemplo, Excel suma 12 años y 3 meses a la primera fecha. Por lo tanto, la "nueva fecha" es el 22/05/2017. En este caso, 09/06/2017 - 22/05/2017 = 18 días. La diferencia podría explicarse por... el número de años bisiestos.

3 Comentarios

  1. Lissy
    05/11/2024 a las 09:25

    Hola Frederic,

    Lo intenté, pero en mi caso la función fn_YD dice 366 si la primera fecha es el 25 de junio de 1954 y la segunda fecha es el 2 de junio de 25

    Responder

    • Frédéric LE GUEN
      05/11/2024 a las 10:51

      Gracias por el comentario. Verificaré la función de inmediato.

      Responder

    • Frédéric LE GUEN
      05/11/2024 a las 13:32

      Vale, es una actualización. En lugar de BuildDate < date2, he actualizado la prueba lógica BuildDate <= date2

      Responder

Deje un comentario

Su dirección de correo electrónico no será publicada. Las areas obligatorias están marcadas como requeridas *