Страницы: 1
RSS
PQ. Вернуть самый ранний статус по ключу, Ускорить обработку запроса вернув ранний статус (один-ко-многим)
 
Добрый день

Сделал запрос кнопками в PQ, но объём большой и обрабатывается долго, всё зависает. Результат получил, но чувствую, что можно быстрее.

Итак, существует 2 таблицы:
"Таблица1" представлена в виде справочника которая содержит код (ключ) и дату создания
"Таблица2" периодическая таблица, где есть код, его дата изменения и статус на эту дату.

Необходимо для каждого кода из "Таблица1" вернуть первоначальный (самый ранний) статус из "Таблица2"

Я делаю следующим образом:
В "Таблица2" группирую по коду применяя операцию минимум по периоду, получаю код и период самый ранний период (без статуса), потом присоединяю с источником "Таблица2" и возвращаю статус по коду на период. После чего присоединяю статус по код для "Таблица1".

Подскажите, пожалуйста, есть ли возможность ускорить эту обработку данных?
Изменено: Vladimir K - 23.03.2021 13:00:28 (Опечатка)
 
вот так без группировки

Код
let
    Источник = Excel.CurrentWorkbook(){[Name="Таблица2"]}[Content],
    #"Сортированные строки" = Table.Sort(Источник,{{"Код", Order.Ascending}, {"Период", Order.Ascending}}),
    #"Удаленные дубликаты" = Table.Distinct(#"Сортированные строки", {"Код"}),
    #"Объединенные запросы" = Table.NestedJoin(#"Удаленные дубликаты",{"Код"},Таблица1,{"Код"},"Таблица1",JoinKind.LeftOuter),
    #"Развернутый элемент Таблица1" = Table.ExpandTableColumn(#"Объединенные запросы", "Таблица1", {"Дата создания"}, {"Дата создания"}),
    #"Извлеченное название месяца" = Table.TransformColumns(#"Развернутый элемент Таблица1", {{"Дата создания", each Date.MonthName(_), type text}}),
    #"Другие удаленные столбцы" = Table.SelectColumns(#"Извлеченное название месяца",{"Код", "Статус", "Дата создания"}),
    #"Сведенный столбец" = Table.Pivot(#"Другие удаленные столбцы", List.Distinct(#"Другие удаленные столбцы"[Статус]), "Статус", "Код", List.Count)
in
    #"Сведенный столбец"
 
Доброе время суток.
Вариант.
Код
let
    periods = Excel.CurrentWorkbook(){[Name="Таблица2"]}[Content],
    top1ByDatetimePeriods = Table.FromRecords(Table.Group(periods, {"Код"}, {"temp", each Table.Min(_, {"Период"})})[temp]),
    renameCodeOfTop1 = Table.RenameColumns(top1ByDatetimePeriods, {"Код", "code"}),
    leftTable = Excel.CurrentWorkbook(){[Name="Таблица1"]}[Content],
    join = Table.Join(leftTable, {"Код"}, renameCodeOfTop1, {"code"}, JoinKind.LeftOuter),
    result = Table.RemoveColumns(join, {"code"})
in
    result
Страницы: 1
Наверх