CSV导入Excel分析:DateTime应单字段还是多字段存储?
DateTime分析场景下CSV到Excel的处理方案
目标
将CSV文件导入Excel并完成分析,DateTime分析需覆盖分组、排序、筛选、图表制作及DateTime计算(推算)场景。
DateTime存储方式疑问
现有两种存储方案:
- 方案1:将完整DateTime信息存储在单一字段中
- 方案2:拆分存储在Date、Time、Milliseconds、Time Zone等独立字段中
是否可根据实际分析场景任选其中一种方案?要求实现CSV→PowerQuery→Excel的完整流程,尽可能减少额外配置,仅允许少量必要调整(如修改Excel字段格式、PowerQuery内简单微调)。完整DateTime格式定义为:yyyy-MM-dd HH:mm:ss.MS +zone,示例:2024-03-19 13:18:31.395 +03:00
测试列选项
设置了多种DateTime表示形式的测试列:
- Column1:
2024-03-21 15:24:36,897 +03:00- 包含日期、时间、毫秒及时区,毫秒用逗号分隔 - Column2:
2024-03-21 15:24:36,897- 包含日期、时间及毫秒,毫秒用逗号分隔 - Column3:
2024-03-21 15:24:36.897- 包含日期、时间及毫秒,毫秒用点分隔 - Column4:
2024-03-21 15:24:36- 仅包含日期时间(无毫秒及时区) - Column5:
2024-03-21- 仅包含日期 - Column6:
15:24:36- 仅包含时间 - Column7:
897- 仅包含毫秒 - Column8:
+03:00- 仅包含时区
担忧点
- 使用Column1或Column2时,PowerQuery会将其识别为文本类型,担心后续创建数据透视表或跨表引用时无法被识别为datetime类型,影响分析功能。
- 使用Column3时无法直接显示毫秒和时区信息,必须搭配Column7(毫秒)和Column8(时区)才能获取完整DateTime信息,操作繁琐。
测试数据与代码
CSV测试表格
| Column1 | Column2 | Column3 | Column4 | Column5 | Column6 | Column7 | Column8 | Column9 | Column10 |
|---|---|---|---|---|---|---|---|---|---|
| 2024-03-21 15:24:36,897 +03:00 | 2024-03-21 15:24:36,897 | 21.03.2024 15:24 | 21.03.2024 15:24 | 21.03.2024 | 15:24:36 | 897 | +03:00 | INF | Messaeg-i - 0 |
| 2024-03-21 15:24:38,192 +03:00 | 2024-03-21 15:24:38,192 | 21.03.2024 15:24 | 21.03.2024 15:24 | 21.03.2024 | 15:24:38 | 192 | +03:00 | INF | Messaeg-i - 1 |
| 2024-03-21 15:24:39,490 +03:00 | 2024-03-21 15:24:39,490 | 21.03.2024 15:24 | 21.03.2024 15:24 | 21.03.2024 | 15:24:39 | 490 | +03:00 | INF | Messaeg-i - 2 |
| 2024-03-21 15:24:40,821 +03:00 | 2024-03-21 15:24:40,821 | 21.03.2024 15:24 | 21.03.2024 15:24 | 21.03.2024 | 15:24:40 | 821 | +03:00 | INF | Messaeg-i - 3 |
| 2024-03-21 15:24:40,949 +03:00 | 2024-03-21 15:24:40,949 | 21.03.2024 15:24 | 21.03.2024 15:24 | 21.03.2024 | 15:24:40 | 949 | +03:00 | INF | Messaeg-i - 4 |
PowerQuery处理代码(中文适配版)
let // 读取CSV文件,指定分隔符为|,列数10,编码为1251 数据源 = Csv.Document(File.Contents("E:\Projects\39\01_pr\01\2024-03-21_15-24-36.csv"), [Delimiter="|", Columns=10, Encoding=1251]), // 转换各列数据类型 更改类型 = Table.TransformColumnTypes(数据源, { {"Column1", type text}, {"Column2", type text}, {"Column3", type datetime}, {"Column4", type datetime}, {"Column5", type date}, {"Column6", type time}, {"Column7", Int64.Type}, {"Column8", type text}, {"Column9", type text}, {"Column10", type text} } ) in 更改类型
内容的提问来源于stack exchange,提问作者eusataf
相关产品推荐
相关产品推荐

