Цель: Рассчитать текущую потребность по продукту, указанную по желаемой клиентом дате, чтобы узнать, какие заказы могут быть отправлены и в какой момент (будущая дата) имеющийся запас не будет поддерживать открытые заказы.
Данные: запрос Microsoft к базе данных Microsoft SQL возвращает таблицу MS Excel с заказами по отдельным позициям и начальным количеством в наличии.
Заказ может состоять из 900 различных продуктов в любом количестве, которое пожелает клиент.
Данные в порядке поступления (сортируются по желаемой дате). При ежедневном обновлении запроса будут выполнены полные номера заказов или конкретные позиции, которые будут удалены из таблицы. По мере поступления новых заказов они появляются в таблице (внизу). В целом, 900 продуктов с примерно 1100 открытыми позициями в любое время.
ORDER # | DESIRED DATE| PRODUCT | QTY DUE | REM ON HAND | Cum Dmd
CO-32 | 1/3/19 | Ducks | 2 | 5 | 100 (all open orders)
CO-32 | 1/3/19 | Chick | 100 | 3 | 100
CO-33 | 1/7/19 | Ducks | 2 | 3 | 102
CO-33 | 1/7/19 | CatsA | 5 | 15| 10
CO-33 | 1/8/19 | Chick | 10 | -7 | 110
CO-34 | 1/8/19 | CatsA | 2 | 13 | 12
CO-35 | 2/10/19| DogsA | 25 | 100 | 125
CO-35 | 2/10/19| Ducks | 25 | -22 | 127
Текущая проблема:
(A) Результирующий код Power Query, представленный ниже, приводит к новой вкладке, новой таблице, в которой пропущены строки - возвращается только около 677 строк исходных заказов на 1105 позиций.
(B) Код в запросе заблокирует клиентский процессор на 4-5 минут для циклического прохождения и набора данных.
Текущий код:
let
Source = Excel.CurrentWorkbook(){[Name="Orders"]}[Content],
#"Changed Type" = Table.TransformColumnTypes(Source,{{"PART", type text}, {"QTY DUE", Int64.Type}}),
AddIndex = Table.AddIndexColumn(#"Changed Type", "Index", 1, 1),
RunTotal = Table.AddColumn(AddIndex, "Cum Dmd", each let PART=[PART], Index=[Index]
in
List.Sum(Table.SelectRows(AddIndex,
each [Index]<=Index and [PART]=PART)[QTY DUE])),
#"Removed Columns" = Table.RemoveColumns(RunTotal,{"Index"}),
#"Added Custom" = Table.AddColumn(#"Removed Columns", "Remain QOH", each [T ON HAND]-[Cum Dmd]),
#"Reordered Columns" = Table.ReorderColumns(#"Added Custom",{"ORDER", "CUSTOMER", "PART", "MISC_REFERENCE", "QTY DUE", "Remain QOH", "T ON HAND", "T Demand", "ORDER QTY", "SHIPPED QTY", "Customer DESIRE", "PROMISE", "Order Date", "ENTERED_BY", "Age", "Cum Dmd"})
in
#"Reordered Columns"