Sigue recibiendo «Expression.Error: no podemos aplicar el operador < a los tipos de fecha y fecha y hora" - por favor ayuda

Un usuario Pregunto ✅

ansa_naz

Tengo el siguiente código M en el Editor de consultas de power BI:

let
    Source = Sql.Database("DB", "DB", [CommandTimeout=#duration(0, 1, 0, 0)]),
    dbo_Calls = Source{[Schema="dbo",Item="Calls"]}[Data],
    #"Changed Type" = Table.TransformColumnTypes(dbo_Calls,{{"Completion Date", type date}}),
    EndDate = Date.From(DateTime.FixedLocalNow()),
    StartDate = Date.AddDays(Date.AddMonths(EndDate,-6),1),
    #"Filtered Rows" = Table.SelectRows(dbo_Calls,each [Completion Date]>=StartDate 
    and [Completion Date]<=EndDate)

in
    #"Filtered Rows"

Sin embargo, esto da como resultado el siguiente error:

Expression.Error: We cannot apply operator < to types Date and DateTime.
Details:
    Operator=<
    Left=26/12/2018
    Right=16/05/2017 00:00:00

¿Alguna idea de cómo puedo evitar esto?

muchas gracias por toda la ayuda

Gordonlilj

Hola,

Puede cambiar la columna de fecha y hora a la fecha o al revés.

O podría intentar agregar DateTime.From() a las columnas de fecha.

No sé cuál es la columna de fecha y hora, así que agregué la función a todas ellas.

#"Filtered Rows" = Table.SelectRows(dbo_ANSAPBICalls,each DateTime.From([Completion Date])>=DateTime.From(StartDate) 
    and DateTime.From([Completion Date])<=DateTime.From(EndDate))

tex628

Está comparando el formato de fecha con el formato de fecha y hora. ¡Cambie el formato de fecha y hora a fecha en su fecha de inicio y finalización antes de la declaración de filtro y debería funcionar bien!

/J

ansa_naz

En respuesta a tex628

Está arreglado ahora. Cambié todas las funciones de fecha a DateTime. También modifiqué el paso Filtered Rows para que usara SelectRows del paso #ChangedType, no de la fuente de datos original:

let
    Source = Sql.Database("DB", "DB", [CommandTimeout=#duration(0, 1, 0, 0)]),
    dbo_Calls = Source{[Schema="dbo",Item="Calls"]}[Data],
    #"Changed Type" = Table.TransformColumnTypes(dbo_Calls,{{"Completion Date", type date}}),
    EndDate = Date.From(DateTime.FixedLocalNow()),
    StartDate = Date.AddDays(Date.AddMonths(EndDate,-6),1),
    #"Filtered Rows" = Table.SelectRows(#"Changed Type",each DateTime.From([Completion Date])>=DateTime.From(StartDate) 
    and DateTime.From([Completion Date])<=DateTime.From(EndDate))
in
    #"Filtered Rows"

Eso ha hecho el truco, ¡salud por toda la ayuda!

tex628

Está comparando el formato de fecha con el formato de fecha y hora. ¡Cambie el formato de fecha y hora a fecha en su fecha de inicio y finalización antes de la declaración de filtro y debería funcionar bien!

/J

ansa_naz

En respuesta a tex628

Gracias a los dos

He modificado mi código M a continuación:

EndDate = Date.From(Date.FixedLocalNow()),
StartDate = Date.AddDays(Date.AddMonths(EndDate,-6),1),
#"Filtered Rows" = Table.SelectRows(dbo_Calls,each Date.From([Completion Date])>=Date.From(StartDate) 
and Date.From([Completion Date])<=Date.From(EndDate))

Sin embargo, ahora obtengo el siguiente error:

Expression.Error: The name 'Date.FixedLocalNow' wasn't recognized.  Make sure it's spelled correctly.

¿Estoy haciendo algo tonto aquí?

Gordonlilj

En respuesta a ansa_naz

No hay una función llamada Date.FixedLocalNow(), por lo que aparece un error. DateTime.FixedLocalNow() es el nombre de esa función.

tex628

En respuesta a ansa_naz

Realmente no puedo decir qué está mal, ¿puedes publicar el código de consulta completo?

ansa_naz

En respuesta a tex628

Está arreglado ahora. Cambié todas las funciones de fecha a DateTime. También modifiqué el paso Filtered Rows para que usara SelectRows del paso #ChangedType, no de la fuente de datos original:

let
    Source = Sql.Database("DB", "DB", [CommandTimeout=#duration(0, 1, 0, 0)]),
    dbo_Calls = Source{[Schema="dbo",Item="Calls"]}[Data],
    #"Changed Type" = Table.TransformColumnTypes(dbo_Calls,{{"Completion Date", type date}}),
    EndDate = Date.From(DateTime.FixedLocalNow()),
    StartDate = Date.AddDays(Date.AddMonths(EndDate,-6),1),
    #"Filtered Rows" = Table.SelectRows(#"Changed Type",each DateTime.From([Completion Date])>=DateTime.From(StartDate) 
    and DateTime.From([Completion Date])<=DateTime.From(EndDate))
in
    #"Filtered Rows"

Eso ha hecho el truco, ¡salud por toda la ayuda!

Gordonlilj

Hola,

Puede cambiar la columna de fecha y hora a la fecha o al revés.

O podría intentar agregar DateTime.From() a las columnas de fecha.

No sé cuál es la columna de fecha y hora, así que agregué la función a todas ellas.

#"Filtered Rows" = Table.SelectRows(dbo_ANSAPBICalls,each DateTime.From([Completion Date])>=DateTime.From(StartDate) 
    and DateTime.From([Completion Date])<=DateTime.From(EndDate))

Deja un comentario

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