Creación de un campo de texto a partir de un campo de fechas

En este sencillo escenario vamos a crear un campo con la versión de texto de otro campo de fechas (para convertir, por ejemplo, una fecha del tipo 21 de mayo de 2018 en "20180521", teniendo todos los valores de la nueva columna la misma longitud).

Supongamos que nuestro campo de fechas con formato datetime es Sales[Ship Date]:

Campo Sales[Ship Date]

Para formar nuestra nueva columna deberemos extraer el año, mes y día (podríamos hacerlo más complejo extrayendo la hora, etc.) con las funciones YEAR, MONTH y DAY. Una primera versión de la expresión para crear la nueva columna podría ser, sencillamente, la concatenación de dichos valores, pero podemos ver que no funcionaría con días o meses menores de 10, pues resultarían cadenas de texto de menos de 8 caracteres (en lugar de usar la función CONCATENATE vamos a usar el operador de concatenación &):

ShipDateKey = YEAR(Sales[Ship Date]) & MONTH(Sales[Ship Date]) & DAY(Sales[Ship Date])

Columna con al versión de texto de la fecha

Debemos asegurar que tanto el mes como el día tienen ceros a la izquierda en caso de ser necesario para mantener la longitud de 2 caracteres (el año -en nuestros datos- siempre tiene 4 caracteres de longitud). Para esto podemos utilizar la función FORMAT o añadir un cero a la izquierda del mes y del día (tanto si se necesita como si no) y extraer los dos caracteres de la derecha, alternativa que utilizaremos aquí por motivos pedagógicos. Si el cero no hacía falta, los dos caracteres que extraigamos serán los originales. Si, por el contrario, era necesario, estaremos extrayendo el cero y el valor original. Así, por ejemplo, si hemos extraído los meses 11 y 5, esta operación resultaría en las siguientes cadenas de texto:

"0" & "11" = "011" » "11"

"0" & "5" = "05" » "05"

Para extraer los dos caracteres de la derecha utilizaremos la función RIGHT, de forma que la versión final de la expresión sería:

ShipDateKey =

    YEAR(Sales[Ship Date]) &

    RIGHT("0" & MONTH(Sales[Ship Date]); 2) &

    RIGHT("0" & DAY(Sales[Ship Date]); 2)

El resultado, esta vez correcto, sería el mostrado en la siguiente imagen:

Columna con la versión de texto correcta del campo de fecha

Si utilizásemos la función FORMAT, el código quedaría de la siguiente forma:

ShipDateKey =

    YEAR(Sales[Ship Date]) &

    FORMAT(MONTH(Sales[Ship Date]); "00") &

    FORMAT(DAY(Sales[Ship Date]); "00"

)

Funciones DAX involucradas
Enviado por admin el Lun, 07/01/2019 - 21:41