首页 > 解决方案 > 在 PowerBI 中解析网站搜索历史 JSON 数据

问题描述

我正在对某个网站进行一些分析,并试图将人们的搜索字词转换为更简单的格式。它们采用 JSON 格式,我已经多次解析该列以获取其他相关数据。问题在于,当尝试解析关键字/搜索数据时,每个搜索词都会进入自己的列,并且经过数万次搜索就会成为问题。很难解释,所以我将添加一张说明问题的图片。

“Ai O”和“JAHAHASHAS”是我在网站上进行的搜索,其余的被隐藏了,但这个列表永远存在

https://i.imgur.com/5IXTXn1.png

这是一个人在 JSON 中搜索“商业模式”的示例 "{""sort"": ""lastUpdated"", ""limit"": 5, ""fields"": {""keywords"": {""business model"": true}}, ""offset"": 0}"

无论如何都试图解析关键字列,但创建数千个新列并没有真正起作用

标签: jsonpowerbidaxpowerquery

解决方案


我在您的 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接下来,将数据转换为表格后,我展开了两次以从到FieldsFields到下潜keywords。然后我添加了一个自定义列,并使用 M Query 'Record.Fieldnames' 函数为我们的关键字集合中的每个字段名生成一个列表。请记住,这里的每个列表只有一个元素,即使该文本中可能有空格。

在此处输入图像描述


然后我从这些列表中提取值

在此处输入图像描述


然后将这些字符串拆分回列表 - 这次使用空格作为分隔符。

在此处输入图像描述


作为最后一步,我将多个列表组合成一个列表,其中包含所有关键字作为单个元素。

在此处输入图像描述

所以,这就是我的方法。希望能帮助到你。



推荐阅读