DateAdd devuelve valores en blanco

Un usuario Pregunto ✅

abaconsup

Hoy he estado luchando con la función DATEADD, esperaba que esta función pudiera alterar una fecha de modo que simplemente pueda sumar o restar días, meses o años.

Sin embargo, la función parece devolver solo las fechas que estaban en la columna de datos original. es decir, ingresé manualmente un conjunto de datos con 3 fechas y luego creé una columna calculada que agrega un solo día al valor. Esto devuelve los siguientes valores:

PowerBIDateAdd.jpg

Según la descripción de la función:

https://msdn.microsoft.com/en-us/library/ee634905.aspx

Esta función «Devuelve una tabla que contiene una columna de fechas, desplazada hacia adelante o hacia atrás en el tiempo por el número especificado de intervalos de las fechas en el contexto actual «.

Supongo que lo que estoy presenciando es que esta función solo puede devolver fechas en el «contexto actual», es decir, ¿esas fechas dentro de la columna original?

Esto me plantea un problema, si las fechas que quiero generar están fuera del contexto actual, ¿cuál es la mejor forma de crear una columna calculada que lo logre?

Por ahora, he usado EDATE para crear los valores requeridos, ya que solo necesito restar un solo año (12 meses) de la fecha original.

Mi versión de PowerBI Desktop es 2.37.4464.461 de 64 bits (julio de 2016)

KGrice

Tiene razón sobre DATEADD. Del artículo que vinculó: «La tabla de resultados incluye solo las fechas que existen en la columna de fechas».

Creo que DATEADD se usa generalmente para fórmulas de inteligencia de tiempo dentro de una medida, cuando solo busca cambiar su contexto a un alcance diferente de fechas que ya están en su modelo.

Si desea agregar un solo día a su columna Fecha usando una nueva columna, siempre puede tomar la columna Fecha y agregar 1:

Column = TestDates[Date] + 1

Si desea restar un solo año, probé esto al principio:

MinusOneYear = DATE(YEAR(TableName[Date])-1, MONTH(TableName[Date]), DAY(TableName[Date]))

Eso me da un error («Un argumento de la función ‘FECHA’ tiene el tipo de datos incorrecto o el resultado es demasiado grande o demasiado pequeño»), presumiblemente para años bisiestos, aunque no puedo deshacerme del error ni siquiera teniendo en cuenta años bisiestos con función IF. Si lo envuelvo todo en IFERROR, funciona y el 1/3/2015 se repite debido al año bisiesto, una vez para el 1/3/2016 y una vez para el 29/2/2016. Esto evita el error, pero tampoco veo ningún espacio en blanco, por lo que no estoy seguro de qué causó el error:

MinusOneYear = IFERROR(DATE(YEAR(TableName[Date])-1, MONTH(TableName[Date]), DAY(TableName[Date])), BLANK())

También puede probar esto en M en el Editor de consultas como una nueva columna allí:

Custom = Date.AddMonths([Date], -12)

Eso da como resultado que se repita el 28/2/2015 en lugar del 1/3/2015, por lo que deberá tener cuidado de cualquier manera.

cabboud

Otra solución es agregar una columna auxiliar year_month_id y trabajar con enteros. Si lo tiene, puede buscar un valor de + – x * MESES en la misma tabla.

El problema en mi caso fue que no tenía todas las fechas en el Ventas tabla.

Ejemplo para un turno de 5 meses:

shifted_date = LOOKUPVALUE(sales[date], sales[year_month_id],sales[year_month_id]-5).

KGrice

Tiene razón sobre DATEADD. Del artículo que vinculó: «La tabla de resultados incluye solo las fechas que existen en la columna de fechas».

Creo que DATEADD se usa generalmente para fórmulas de inteligencia de tiempo dentro de una medida, cuando solo busca cambiar su contexto a un alcance diferente de fechas que ya están en su modelo.

Si desea agregar un solo día a su columna Fecha usando una nueva columna, siempre puede tomar la columna Fecha y agregar 1:

Column = TestDates[Date] + 1

Si desea restar un solo año, probé esto al principio:

MinusOneYear = DATE(YEAR(TableName[Date])-1, MONTH(TableName[Date]), DAY(TableName[Date]))

Eso me da un error («Un argumento de la función ‘FECHA’ tiene el tipo de datos incorrecto o el resultado es demasiado grande o demasiado pequeño»), presumiblemente para años bisiestos, aunque no puedo deshacerme del error ni siquiera teniendo en cuenta años bisiestos con función IF. Si lo envuelvo todo en IFERROR, funciona y se repite el 3/1/2015 debido al año bisiesto, una vez para el 3/1/2016 y una vez para el 2/29/2016. Esto evita el error, pero tampoco veo ningún espacio en blanco, por lo que no estoy seguro de qué causó el error:

MinusOneYear = IFERROR(DATE(YEAR(TableName[Date])-1, MONTH(TableName[Date]), DAY(TableName[Date])), BLANK())

También puede probar esto en M en el Editor de consultas como una nueva columna allí:

Custom = Date.AddMonths([Date], -12)

Eso da como resultado que se repita el 28/2/2015 en lugar del 1/3/2015, por lo que deberá tener cuidado de cualquier manera.

abaconsup

En respuesta a KGrice

Comentarios fantásticos, esperaba que hubiera una alternativa sucinta.

Esperaba hacer cualquier transformación de datos desde el principio, por lo tanto, me gusta la opción M con la función AddMonths, probablemente usaré la función AddYears.

Los años / días bisiestos pueden requerir un análisis cuidadoso, pero es posible que no afecten el informe que estamos tratando de crear.

Esto es genial, gracias por tu ayuda.

KGrice

En respuesta a abaconsup

¡Gracias por la respuesta con información adicional! Busqué AddYears en la lista de fórmulas y debí haberlo pasado por alto, pero en este caso es más sencillo que meses.

Maneja el año bisiesto de la misma manera que AddMonths, y creo que si tengo que duplicar una fecha en cualquier lado, es mejor mantenerla en febrero. Tiene más sentido para las comparaciones de mes a mes.

Deja un comentario

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