Excel Power Query:如何将所有列表项组合成一行
Excel Power Query: How to Combine All List Items into Single Row
我有一个从 Microsoft 16 Excel Power Query 到 Cognitive text keyphase API 的查询 - 从推文中获取关键字。工作正常。
但是,每个查询返回的 JSON 文档被 Power Query 转换为约 1-5 行的列表。
就图片而言,我希望所有返回的回复都在一个 cell/row 中,而不管返回的项目数量如何。
如果您有兴趣,这是我的完整 M 查询(您需要输入自己的密钥)。
let
TweetCognitive = (TweetID as text, TweetText as text) =>
let
JsonRecords = Text.FromBinary(Json.FromValue([id=TweetID, text=TweetText])),
JsonRequest = "{""documents"": [" & JsonRecords & "]}",
JsonContent = Text.ToBinary(JsonRequest, TextEncoding.Ascii),
Response =
Web.Contents("https://westus.api.cognitive.microsoft.com/text/analytics/v2.0/keyPhrases?",
[
Headers = [#"Ocp-Apim-Subscription-Key"="yourkeyhere",
#"Content-Type"="application/json", Accept="application/json"],
Content=JsonContent
]),
JsonResponse = Json.Document(Response,1252)
in
JsonResponse
in
TweetCognitive
您可以使用 List.Accumulate
将值列表变成单个值。例如,这会将列表中的值组合成单个文本值,并用“.”分隔每行的值:
List.Accumulate(JsonResponse, "", (state, current) => state & current & ". ")
这将在您的示例中生成 "monday frank love happiness today. nice good kind. tomorrow. "
。如果你想去掉结尾的 space,你可以用 Text.Trim
.
包围 List.Accumulate
表达式
连接列表中元素的基本函数是Text.Combine
。例如:
Text.Combine(JsonResponse, " ")
这避免了在使用 List.Accumulate
时出现额外的分隔符。另请注意 List.Combine
用于从较短的列表创建较长的组合列表,并且那里的相似命名可能会造成混淆。
我有一个从 Microsoft 16 Excel Power Query 到 Cognitive text keyphase API 的查询 - 从推文中获取关键字。工作正常。
但是,每个查询返回的 JSON 文档被 Power Query 转换为约 1-5 行的列表。
就图片而言,我希望所有返回的回复都在一个 cell/row 中,而不管返回的项目数量如何。
如果您有兴趣,这是我的完整 M 查询(您需要输入自己的密钥)。
let
TweetCognitive = (TweetID as text, TweetText as text) =>
let
JsonRecords = Text.FromBinary(Json.FromValue([id=TweetID, text=TweetText])),
JsonRequest = "{""documents"": [" & JsonRecords & "]}",
JsonContent = Text.ToBinary(JsonRequest, TextEncoding.Ascii),
Response =
Web.Contents("https://westus.api.cognitive.microsoft.com/text/analytics/v2.0/keyPhrases?",
[
Headers = [#"Ocp-Apim-Subscription-Key"="yourkeyhere",
#"Content-Type"="application/json", Accept="application/json"],
Content=JsonContent
]),
JsonResponse = Json.Document(Response,1252)
in
JsonResponse
in
TweetCognitive
您可以使用 List.Accumulate
将值列表变成单个值。例如,这会将列表中的值组合成单个文本值,并用“.”分隔每行的值:
List.Accumulate(JsonResponse, "", (state, current) => state & current & ". ")
这将在您的示例中生成 "monday frank love happiness today. nice good kind. tomorrow. "
。如果你想去掉结尾的 space,你可以用 Text.Trim
.
List.Accumulate
表达式
连接列表中元素的基本函数是Text.Combine
。例如:
Text.Combine(JsonResponse, " ")
这避免了在使用 List.Accumulate
时出现额外的分隔符。另请注意 List.Combine
用于从较短的列表创建较长的组合列表,并且那里的相似命名可能会造成混淆。