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 用于从较短的列表创建较长的组合列表,并且那里的相似命名可能会造成混淆。