Добрый день!
Есть задача в таблицу с продажами подставить себестоимость.
Есть таблица с себестоимостью вида
ЦИФРОВОЙ АРТИКУЛ - СЕБЕСТОИМОСТЬ - ДАТА ДЕЙСТВИЯ С - ДАТА ДЕЙСТВИЯ ПО
(Внутренний артикул - Cебестоимость - ValidFrom - ValidTo)
В этой таблице около 5000 строк, она находится в отдельном файле.
Есть таблица с продажами в которой соответственно один из столбцов - ЦИФРОВОЙ АРТИКУЛ, а другой - ДАТА ЗАКАЗА.
(да, я знаю, что нужна дата закупки для подстановки, но таких данных нет). В этой таблице около 100 000 строк.
Соответственно нужно себестоимость из первого файла подставить к каждой строчке второго файла по условию вхождения даты продажи в диапазон дат действия.
Я нашел решение на форумах, которое в целом довольно успешно работает.
Код |
---|
#"Add prices" = Table.AddColumn(#"Removed Columns", "Price",
(S)=> Table.SelectRows(Costs, (P) => P[#"Внутренний артикул"]=S[#"Внутренний артикул"]
and P[ValidFrom]<=S[Дата заказа] and P[ValidTo]>S[Дата заказа])),
|
Таблица Costs - это и есть себестоимость из другого файла и перед этой строчкой я ее буферизирую
Код |
---|
Costs = Table.Buffer(#"SKU Costs"),
|
#SKU Costs - это отдельный запрос, который открывает файл, достает оттуда таблицу и удаляет пустые строки.
Однако, выполнение этого скрипта ну ООООЧЕНЬ медленное, а в статусе я вижу такое (см скриншот):
хххх MB from <внешний файл>и "прокачать" он так может ни один гигабайт.
Это какая-то особенность PQ: почему он игнорирует буферизацию и все равно обращается к внешнему файлу? И откуда вообще такие дикие объемы данных?
И есть ли способ как-то оптимизировать скрипт?