Power Query List.Generate производительности - PullRequest
0 голосов
/ 01 апреля 2020

У меня есть список элементов (ключей проекта), по которым мне нужно выполнить итерацию и вызвать API для возврата JSON полезной нагрузки (имена отрядов). Эти ответы должны храниться в таблице, в которой также есть элемент из списка, сгенерировавший его следующим образом ...

Project Key | Squad 
--------------------
ProjectA    | Squad1
ProjectA    | Squad2
ProjectB    | Squad2

Мой текущий запрос работает в режиме DOG медленно и выглядит следующим образом ...

let
Source = Excel.CurrentWorkbook(){[Name="projectList"]}[Content],
#"Promoted Headers" = Table.PromoteHeaders(Source, [PromoteAllScalars=true]),
#"Changed Type" = Table.TransformColumnTypes(#"Promoted Headers",{{"Project Key", type text}, {"Found in Jira", type logical}}),
#"Filtered Rows" = Table.SelectRows(#"Changed Type", each ([Found in Jira] = true)),
#"Removed Columns" = Table.RemoveColumns(#"Filtered Rows",{"Found in Jira"}),
tableOfProjects = #"Removed Columns",
listOfProjects = Table.ToList(tableOfProjects),

GetSquadValues = (ProjectKey) =>
    let
        SquadSource = Json.Document(Web.Contents("http://localhost:3000/rest/api/2/issue/createmeta?projectKeys=" & ProjectKey & "&issuetypeNames=Epic&expand=projects.issuetypes.fields")),
        projects = SquadSource[projects],
        projects1 = projects{0},
        issuetypes = projects1[issuetypes],
        issuetypes1 = issuetypes{0},
        fields = issuetypes1[fields],
        #"Converted to Table" = Record.ToTable(fields),
        #"Filtered Rows1" = Table.SelectRows(#"Converted to Table", each ([Name] = "customfield_10293")),
        #"Removed Columns" = Table.RemoveColumns(#"Filtered Rows1",{"Name"}),
        #"Expanded Value" = Table.ExpandRecordColumn(#"Removed Columns", "Value", {"allowedValues"}, {"allowedValues"}),
        #"Expanded allowedValues" = Table.ExpandListColumn(#"Expanded Value", "allowedValues"),
        #"Expanded allowedValues1" = Table.ExpandRecordColumn(#"Expanded allowedValues", "allowedValues", {"value"}, {"allowedValues.value"}),
        #"Renamed Columns" = Table.RenameColumns(#"Expanded allowedValues1",{{"allowedValues.value", "allowedValues"}}),
        tableOfProjectSquads = Table.AddColumn(#"Renamed Columns", "Project Key", (row) => ProjectKey)
    in
        tableOfProjectSquads,

listOfSquads = List.Generate(
    () => [i=-1, table=#table({},{})],  // initialize loop variables
    each [i] < List.Count(listOfProjects),
    each [
        i=[i]+1,
        table=GetSquadValues(listOfProjects{i}) 
    ],
    each [table]
),
#"Converted to Table" = Table.FromList(listOfSquads, Splitter.SplitByNothing(), null, null, ExtraValues.Error),
#"Expanded Column1" = Table.ExpandTableColumn(#"Converted to Table", "Column1", {"allowedValues", "Project Key"}, {"allowedValues", "Project Key"}),
#"Reordered Columns" = Table.ReorderColumns(#"Expanded Column1",{"Project Key", "allowedValues"})

в # "Переупорядоченные столбцы"

Будем весьма благодарны за любые предложения по улучшению производительности!

...