json - 在 PowerBI 中解析网站搜索历史 JSON 数据
问题描述
我正在对某个网站进行一些分析,并试图将人们的搜索字词转换为更简单的格式。它们采用 JSON 格式,我已经多次解析该列以获取其他相关数据。问题在于,当尝试解析关键字/搜索数据时,每个搜索词都会进入自己的列,并且经过数万次搜索就会成为问题。很难解释,所以我将添加一张说明问题的图片。
“Ai O”和“JAHAHASHAS”是我在网站上进行的搜索,其余的被隐藏了,但这个列表永远存在
https://i.imgur.com/5IXTXn1.png
这是一个人在 JSON 中搜索“商业模式”的示例
"{""sort"": ""lastUpdated"", ""limit"": 5, ""fields"": {""keywords"": {""business model"": true}}, ""offset"": 0}"
无论如何都试图解析关键字列,但创建数千个新列并没有真正起作用
解决方案
我在您的 json 文件中添加了一些额外的记录,我希望它与您在现实中必须使用的内容相匹配。将来,如果您愿意分享有关您的项目的更具体的信息,您将获得更快更好的结果。在大多数情况下,如果我们无法合理地重现您的情况,就很难提供有意义的建议。
无论如何,我希望该解决方案能够针对多个搜索词,因此我将您提供的 JSON 调整为如下所示:
{ "Searches": [
{"sort": "lastUpdated", "limit": 5, "fields": {"keywords": {"business model": true}}, "offset": 0},
{"sort": "lastUpdated", "limit": 5, "fields": {"keywords": {"Alpha Beta": true}}, "offset": 0},
{"sort": "lastUpdated", "limit": 5, "fields": {"keywords": {"Gamma Delta Epsilon": true}}, "offset": 0}
]}
然后提供以下 Power Query(取自高级编辑器)
let
Source = Json.Document(File.Contents("C:\Users\XXXXXX\Desktop\foo.json")),
#"Converted to Table" = Table.FromList(Source[Searches], Splitter.SplitByNothing(), null, null, ExtraValues.Error),
#"Expanded Column1" = Table.ExpandRecordColumn(#"Converted to Table", "Column1", {"fields"}, {"Fields"}),
#"Expanded Fields" = Table.ExpandRecordColumn(#"Expanded Column1", "Fields", {"keywords"}, {"keywords"}),
#"Added Custom" = Table.AddColumn(#"Expanded Fields", "keywords_text", each Record.FieldNames([keywords])),
#"Extracted Values" = Table.TransformColumns(#"Added Custom", {"keywords_text", each Text.Combine(List.Transform(_, Text.From), " "), type text}),
#"Added Custom1" = Table.AddColumn(#"Extracted Values", "keywords_text_list", each Text.Split([keywords_text], " ")),
Custom1 = List.Combine( #"Added Custom1"[keywords_text_list])
in
Custom1
从文件中加载数据后,我从 Json 中提取了记录(即搜索)。
Records
接下来,将数据转换为表格后,我展开了两次以从到Fields
和Fields
到下潜keywords
。然后我添加了一个自定义列,并使用 M Query 'Record.Fieldnames' 函数为我们的关键字集合中的每个字段名生成一个列表。请记住,这里的每个列表只有一个元素,即使该文本中可能有空格。
然后我从这些列表中提取值
然后将这些字符串拆分回列表 - 这次使用空格作为分隔符。
作为最后一步,我将多个列表组合成一个列表,其中包含所有关键字作为单个元素。
所以,这就是我的方法。希望能帮助到你。
推荐阅读
- .net-core - Microsoft.AspNetCore.SignalR.Client - 启用响应压缩
- python - Python Openpyxl - Merge_Cells()
- java - SearchView 到 Edittext 搜索
- linux - 如何从命令行确定我的 KDE 桌面是否处于锁屏状态?
- java - 找不到适合 jdbc:postgresql 的驱动程序:
- javascript - 如何将 Dialogflow Fulfillment 与 MySQL DB 连接?
- php - 意外的php usort结果
- java - 在java中将对象从一个类转换为另一个类
- php - 禁用某些端点的数据库会话
- oauth-2.0 - 使用授权码流程刷新令牌流程