Forum Discussion
Formato de fecha
Hola
Tengo un conjunto de datos que se actualiza todos los días y columnas con fechas en ellos, sin embargo, el formato de estas fechas cambia de vez en cuando. Por ejemplo, en algún momento toda la columna puede estar en el formato "MM/DD/AAAA", mientras que a veces el formato puede ser "DD/MM/AAAA". Nunca sé cuándo va a cambiar el formato, así que no puedo simplemente "Cambiar tipo" o "Cambiar tipo usando configuración regional". ¿Hay algún tipo de captura de errores que puedo hacer para cambiar el tipo usando la configuración regional si el tipo de cambio no funciona? Necesito 3 columnas para ser convertidas juntas.
¡Gracias!
No de la parte superior de mi cabeza. Si puede encontrar algún tipo de lógica de negocios, puedo ayudar con el lado de Power Query, pero no puedo pensar en una manera para que PQ solo sepa cuándo 4/1/2020 es el 4 de enero o el 1 de abril.
5 Replies
- v-yingjl
Community Support
Hola @studentt1205 ,
Puede intentar utilizar format() por formatos de fecha y hora personalizados:
FORMAT(<value>, <format_string>)Consulte:
- Formatos de fecha y hora personalizados para la función FORMAT
- Formatos de fecha y hora predefinidos para la función FORMAT
Mejores looks,
Yingjie LiSi este post ayuda, por favor considere Aceptarlo como la solución para ayudar a los otros miembros a encontrarlo más rápidamente.
- amitchandak
Super User
@studentt1205 , Puede convertir una fecha DD/MM/AAAA en MM/DD/AAAA
date(year(DD__MM__YY[Version_Id],4)), month(mid(DD__MM__YY[Version_Id],4,2)) ,day(left(DD__MM__YY[Version_Id],2)))
Pero, ¿cómo identificaría qué formato es?
O tal vez todas las fechas están en formato DD/MM/AAAA es sólo por días <-12 , parece que es MM/DD/AAAA
- edhans
Community Champion
Pruebe esto en Power Query @studentt1205
Esto convertirá todo el texto a fechas (formatear las fechas como texto primero, o simplemente eliminar cualquier tipo de cambio anterior para esa columna como PQ asumirá texto para archivos planos) y luego contar los errores. Si hay errores, se convertirá mediante una localización.
La forma en que funciona es que cuenta el número de errores en el paso anterior que tienen una conversión genérica Date.FromText([Date]). Si no hay errores, entonces lo deja en eso.
Si hay errores, cambia a una conversión de localización, Date.FromText([Date], "en-BS") que es inglés/Bahamas. Tendrás que elegir tu propia localización. La forma más fácil de hacerlo es hacerlo manualmente en una columna y luego ir a robar el código de localización nn-XX que genera PQ.
Hay un problema con este método. Si sus fechas son sólo unas pocas, es posible equivocarse por ejemplo, un montón de filas como 5/1/2020, 4/1/2020, 3/1/2020, etc. no generarán errores. En formato estadounidense, es sólo el 1 de mayo, el 1 de abril y el 1 de marzo, pero en Europa, es decir, el 5 de enero, el 4, 3 de enero.
Pero si ese es el caso, entonces no lo sabrá. Sin embargo, si más adelante importa más datos y obtiene 18/1/2020, cambiará el ENTIRE COLUMN en esa actualización al formato localizado.
Esto es lo que parece (utilicé otro conjunto de datos para jugar aquí)
Coloque este código en una consulta en blanco:
1) En Power Query, seleccione Nuevo origen y, a continuación, Consulta en blanco
2) En la cinta inicio, seleccione el botón "Editor avanzado"
3) Retire todo lo que ve, luego pegue el código M que le he dado en ese cuadro.
4) Pulse Hecholet Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("Zc87DsIwDIDhu2RGws84GQviFYSgpQIE6v2vgU2XSizxP3xyks8nga4B1wQEaZX6FyIOHqeh5Np7VNXioxhhmlbO84I/OkNoHpsnYw7O5AdK0RnbAo8HqbDzaG8l3nhkVj/NcvlppIVuo0E9xeqGInsPQuAYReaXIC/49Vznh3f7ynbwUGOJO7LBP78fVeXocWmi9gpeamw3Ifvnt21mfsYf3ob4CA5iMQg5TdMX", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type text) meta [Serialized.Text = true]) in type table [Date = _t, #"Dimension 1" = _t, #"Dimension 2" = _t, #"Measure 1" = _t, #"Measure 2" = _t]), #"Changed Type" = Table.TransformColumnTypes(Source,{{"Date", type text}, {"Dimension 1", type text}, {"Dimension 2", type text}, {"Measure 1", Int64.Type}, {"Measure 2", Int64.Type}}), #"Added Custom" = Table.AddColumn(#"Changed Type", "Custom", each if Table.RowCount( Table.SelectRowsWithErrors( Table.AddColumn(#"Changed Type", "Custom", each Date.FromText([Date])) ) ) > 0 then Date.FromText([Date], "en-BS") else Date.FromText([Date]) ) in #"Added Custom"- AnonymousNot applicable
Hola @edhans,
Gracias, esto es muy útil. Sin embargo, el problema es con fechas como 4/1/2020 como usted mencionó. ¿Hay algo que se te ocurra para resolver eso?
- edhans
Community Champion
No de la parte superior de mi cabeza. Si puede encontrar algún tipo de lógica de negocios, puedo ayudar con el lado de Power Query, pero no puedo pensar en una manera para que PQ solo sepa cuándo 4/1/2020 es el 4 de enero o el 1 de abril.