将文本日期(2020 年 3 月 21 日)转换为 dd/mm/yyyy
Convert text date (March 21st 2020) to dd/mm/yyyy
我已经将 excel sheet 导入到 PowerBI 中,我正在尝试将日期列从文本格式(2020 年 3 月 21 日,00:00:000)转换为日期格式 (21/03/2020).
不幸的是,当我 select "detect type" 它只有 selects 文本,并且 selecting "Date" 出现错误。我已经从列中删除了“,00:00:000”,但仍然收到一条错误消息。
有人对我如何将此列转换为 dd/mm/yyyy 有什么建议吗?
非常感谢,
您可以使用这个 Power Query 脚本:
let
Source = Excel.Workbook(File.Contents("Dates.xlsx"), null, true),
Sheet1_Sheet = Source{[Item="Sheet1",Kind="Sheet"]}[Data],
#"Changed Type" = Table.TransformColumnTypes(Sheet1_Sheet,{{"Column1", type text}}),
#"Split Column by Delimiter" = Table.SplitColumn(#"Changed Type", "Column1", Splitter.SplitTextByDelimiter(" ", QuoteStyle.Csv), {"Column1.1", "Column1.2", "Column1.3"}),
#"Added Month" = Table.AddColumn(#"Split Column by Delimiter", "Month", each if [Column1.1] = "January" then 1 else if [Column1.1] = "February" then 2 else if [Column1.1] = "March" then 3 else if [Column1.1] = "April" then 4 else if [Column1.1] = "May" then 5 else if [Column1.1] = "June" then 6 else if [Column1.1] = "July" then 7 else if [Column1.1] = "August" then 8 else if [Column1.1] = "September" then 9 else if [Column1.1] = "October" then 10 else if [Column1.1] = "November" then 11 else if [Column1.1] = "December" then 12 else 0),
#"Added Day" = Table.AddColumn(#"Added Month", "Day", each Text.Select([Column1.2], {"0".."9"})),
#"Removed Columns" = Table.RemoveColumns(#"Added Day",{"Column1.1", "Column1.2"}),
#"Renamed Columns" = Table.RenameColumns(#"Removed Columns",{{"Column1.3", "Year"}}),
#"Changed Type2" = Table.TransformColumnTypes(#"Renamed Columns",{{"Year", Int64.Type}, {"Month", Int64.Type}, {"Day", Int64.Type}}),
#"Inserted Merged Column" = Table.AddColumn(#"Changed Type2", "Date", each Text.Combine({Text.From([Day], "de-DE"), "/", Text.From([Month], "de-DE"), "/", Text.From([Year], "de-DE")}), type text),
#"Changed Type3" = Table.TransformColumnTypes(#"Inserted Merged Column",{{"Date", type date}}),
#"Removed Columns2" = Table.RemoveColumns(#"Changed Type3",{"Year", "Month", "Day"})
in
#"Removed Columns2"
最终数据格式的转换取决于您的本地设置,通常在 PowerQuery 外部完成。
删除 , 00:00:000
后,您可以使用其中一个转换来删除 21st
中的 st
部分,以便 March 21st 2020 --> March 21 2020
可以自动转换为日期。
此转换去除除 space 之外的所有字符和第一个 space 之后的数字:
each Text.BeforeDelimiter(_, " ") & Text.Select(_, {" ", "0".."9"})
这个删除最后一个左边的两个字符 space:
each Text.ReplaceRange(_, Text.PositionOf(_, " ", Occurrence.Last)-2, 2, "")
完整查询(使用第一个选项)如下所示:
let
Source = <Your Data Source>,
Remove00 = Table.TransformColumns(Source, {{"DateText", each Text.BeforeDelimiter(_, ","), type text}}),
StripOrdinal = Table.TransformColumns(Remove00, {{"DateText", each Text.BeforeDelimiter(_," ") & Text.Select(_, {" ","0".."9"}), type text}}),
TextToDate = Table.TransformColumnTypes(StripOrdinal,{{"DateText", type date}})
in
TextToDate
我已经将 excel sheet 导入到 PowerBI 中,我正在尝试将日期列从文本格式(2020 年 3 月 21 日,00:00:000)转换为日期格式 (21/03/2020).
不幸的是,当我 select "detect type" 它只有 selects 文本,并且 selecting "Date" 出现错误。我已经从列中删除了“,00:00:000”,但仍然收到一条错误消息。
有人对我如何将此列转换为 dd/mm/yyyy 有什么建议吗?
非常感谢,
您可以使用这个 Power Query 脚本:
let
Source = Excel.Workbook(File.Contents("Dates.xlsx"), null, true),
Sheet1_Sheet = Source{[Item="Sheet1",Kind="Sheet"]}[Data],
#"Changed Type" = Table.TransformColumnTypes(Sheet1_Sheet,{{"Column1", type text}}),
#"Split Column by Delimiter" = Table.SplitColumn(#"Changed Type", "Column1", Splitter.SplitTextByDelimiter(" ", QuoteStyle.Csv), {"Column1.1", "Column1.2", "Column1.3"}),
#"Added Month" = Table.AddColumn(#"Split Column by Delimiter", "Month", each if [Column1.1] = "January" then 1 else if [Column1.1] = "February" then 2 else if [Column1.1] = "March" then 3 else if [Column1.1] = "April" then 4 else if [Column1.1] = "May" then 5 else if [Column1.1] = "June" then 6 else if [Column1.1] = "July" then 7 else if [Column1.1] = "August" then 8 else if [Column1.1] = "September" then 9 else if [Column1.1] = "October" then 10 else if [Column1.1] = "November" then 11 else if [Column1.1] = "December" then 12 else 0),
#"Added Day" = Table.AddColumn(#"Added Month", "Day", each Text.Select([Column1.2], {"0".."9"})),
#"Removed Columns" = Table.RemoveColumns(#"Added Day",{"Column1.1", "Column1.2"}),
#"Renamed Columns" = Table.RenameColumns(#"Removed Columns",{{"Column1.3", "Year"}}),
#"Changed Type2" = Table.TransformColumnTypes(#"Renamed Columns",{{"Year", Int64.Type}, {"Month", Int64.Type}, {"Day", Int64.Type}}),
#"Inserted Merged Column" = Table.AddColumn(#"Changed Type2", "Date", each Text.Combine({Text.From([Day], "de-DE"), "/", Text.From([Month], "de-DE"), "/", Text.From([Year], "de-DE")}), type text),
#"Changed Type3" = Table.TransformColumnTypes(#"Inserted Merged Column",{{"Date", type date}}),
#"Removed Columns2" = Table.RemoveColumns(#"Changed Type3",{"Year", "Month", "Day"})
in
#"Removed Columns2"
最终数据格式的转换取决于您的本地设置,通常在 PowerQuery 外部完成。
删除 , 00:00:000
后,您可以使用其中一个转换来删除 21st
中的 st
部分,以便 March 21st 2020 --> March 21 2020
可以自动转换为日期。
此转换去除除 space 之外的所有字符和第一个 space 之后的数字:
each Text.BeforeDelimiter(_, " ") & Text.Select(_, {" ", "0".."9"})
这个删除最后一个左边的两个字符 space:
each Text.ReplaceRange(_, Text.PositionOf(_, " ", Occurrence.Last)-2, 2, "")
完整查询(使用第一个选项)如下所示:
let
Source = <Your Data Source>,
Remove00 = Table.TransformColumns(Source, {{"DateText", each Text.BeforeDelimiter(_, ","), type text}}),
StripOrdinal = Table.TransformColumns(Remove00, {{"DateText", each Text.BeforeDelimiter(_," ") & Text.Select(_, {" ","0".."9"}), type text}}),
TextToDate = Table.TransformColumnTypes(StripOrdinal,{{"DateText", type date}})
in
TextToDate