Power Query中展开含未知动态日期键的记录的实现问题咨询
解决方法
图形界面操作步骤
- 导入JSON数据加载到Power Query编辑器后,先保留refId和snapshotIndexes两列
- 新增自定义列,公式填写:
Record.ToTable([snapshotIndexes]),该操作会把每个snapshotIndexes下的动态日期键和对应值转换为子表,子表自带两列:Name存储日期、Value存储对应日期的属性记录 - 点击自定义列右上角的扩展按钮,仅勾选「Name」和「Value」两列,取消勾选「使用原始列名作为前缀」
- 点击Value列右上角的扩展按钮,勾选url、value两列,确认展开
- 最后按需调整列名:将Name列重命名为date,即可得到目标表结构
- 若需设置主键,可在建模视图同时选中refId和date两列,设置为组合主键即可
完整M代码参考(可直接粘贴到高级编辑器,适配你的数据源即可使用)
let // 替换下方数据源路径为你实际的JSON文件路径/导入步骤 源 = Json.Document(File.Contents("C:\你的文件存储路径\目标JSON文件.json")), 转换为表 = Table.FromList(源, Splitter.SplitByNothing(), null, null, ExtraValues.Error), 展开首层记录 = Table.ExpandRecordColumn(转换为表, "Column1", {"refId", "snapshotIndexes"}, {"refId", "snapshotIndexes"}), 新增日期属性子表列 = Table.AddColumn(展开首层记录, "日期属性表", each Record.ToTable([snapshotIndexes])), 展开日期子表 = Table.ExpandTableColumn(新增日期属性子表列, "日期属性表", {"Name", "Value"}, {"date", "属性记录"}), 展开属性字段 = Table.ExpandRecordColumn(展开日期子表, "属性记录", {"url", "value"}, {"url", "value"}), 清理无用列 = Table.RemoveColumns(展开属性字段,{"snapshotIndexes"}) in 清理无用列
内容的提问来源于stack exchange,提问作者Sudhanshu Chawhan
相关产品推荐
相关产品推荐

