Как я могу вычислить что-то, что имеет другие строки в качестве входных данных в запросе мощности?

У меня есть таблица в Power query, которая, помимо других полей, имеет следующие ключевые поля:

SKU | Год | Неделя | Заказчик | Транзакция | Тип | Ценить

Например, некоторые строки будут такими:

AB587 | 2019 | 12 | Tom | Purchase | Forecast |200

AB587 | 2019 | 12 | Tom | Sale | Forecast |15

AB587 |2019  | 11 | Tom | Stock | Actual |1455

Это таблица, содержащая около 300 000 строк со всеми артикулами и транзакциями за пару лет для всех клиентов, и это превращается в очень полезную сводную таблицу, которая широко используется. Теперь мне нужно что-то добавить к данным, чтобы сделать таблицу еще более полезной.

У меня есть прогноз по покупкам и продажам на весь год вместе с фактами, конечно, и они следуют приведенной выше схеме. У меня также есть запас на все недели, но только тот, что был в прошлом, то есть только актуальный. У меня нет прогноза по запасам, что я хочу добавить. Расчет так же прост, как:

Stock from previous week + Purchase forecast from this week - Sale forecast from this week

Конечный результат, которого я ожидаю, заключается в том, что теперь будет добавлено больше строк, которые будут иметь в качестве примера:

AB587 |2019 | 12 | Tom | Stock | Forecast |1640 

(для расчета я использую числа сверху)

Теперь это позволит мне поменять местами не только покупки и продажи, но и уровни запасов, что изменит правила игры.

Я хотел бы, чтобы кто-нибудь помог мне с этим в Power Query (я пробовал несколько методов в течение нескольких недель, но не нашел его)

Чтобы попытаться решить это сам:

Я добавил больше строк, по сути, добавив данные недели 1 за все фактические недели из моего источника, что потенциально сократило время вычислений. Затем я развернул свой «Столбец транзакций», приведя к новым столбцам, например, «Покупка», «Продажа», «Запас» и «Запас-1», что упростило расчет прогноза запасов (как кажется).

Я не думал о том, что это хорошо только для расчета прогноза запасов на первую неделю, но тогда я не знаю, как использовать этот только что рассчитанный прогноз запасов для расчета прогноза запасов на следующую неделю.

По сути, нет никакого способа сохранить тот прогноз по запасам, который я только что рассчитал, для использования в расчетах на следующей неделе.


person rightanium    schedule 18.07.2019    source источник


Ответы (1)


Я не совсем понимаю, о чем вы спрашиваете, когда говорите, что хотите использовать «рассчитанный прогноз запасов для расчета прогноза запасов на следующую неделю». Если вы просто хотите сгенерировать формулу и результат, который вы привели в качестве примера в качестве компонента вашего набора данных, это довольно просто.

Начиная с этого примера таблицы ваших данных, загруженных в PQ, которую я называю «Таблица данных»:

введите здесь описание изображения

Я создаю на его основе два справочных запроса: StockForecast и CombinedDataTable.

введите здесь описание изображения

В запрос StockForecast мы добавим три настраиваемых столбца. Два из них - это столбцы CalcYear и CalcWeek, которые принимают записи «Фактический запас» и увеличивают неделю на единицу. Третий - столбец CalcValue, который принимает записи «Прогноз продаж» и делает их отрицательными. Код в редакторе выглядит так:

Source = DataTable,
#"Added Custom" = Table.AddColumn(Source, "CalcYear", each 
    if [Transaction] = "Stock" and [Type] = "Actual" then 
        (if [Week] = 52 then [Year] + 1 else [Year])
    else [Year]),
#"Added Custom1" = Table.AddColumn(#"Added Custom", "CalcWeek", each 
    if [Transaction] = "Stock" and [Type] = "Actual" then 
        (if [Week] = 52 then 1 else [Week] + 1)
    else [Week]
    ),
#"Added Custom2" = Table.AddColumn(#"Added Custom1", "CalcValue", each 
    if [Transaction] = "Sale" and [Type] = "Forecast" then 
        [Value] * -1 
    else [Value]
    ),

введите здесь описание изображения

Затем вы используете функцию Group и агрегируете по Stock, Customer, CalcYear и CalcWeek с суммой в функции CalcValue. Это дает значение прогноза запасов, которое вы ищете. После этого нужно просто добавить пару столбцов для идентификации и немного подправить.

    #"Grouped Rows" = Table.Group(#"Added Custom2", {"Stock", "Customer", "CalcYear", "CalcWeek"}, {{"Value", each List.Sum([CalcValue]), type number}}),
    #"Added Custom3" = Table.AddColumn(#"Grouped Rows", "Transaction", each "Stock"),
    #"Added Custom4" = Table.AddColumn(#"Added Custom3", "Type", each "Forecast"),
    #"Renamed Columns" = Table.RenameColumns(#"Added Custom4",{{"CalcYear", "Year"}, {"CalcWeek", "Week"}})
in
    #"Renamed Columns"

Тогда конечный результат данных будет выглядеть так:

введите здесь описание изображения

Затем просто перейдите к запросу CombinedDataTable, добавьте запрос StockForecast, и в вашем наборе данных будут значения Stock Forecast.

person Wedge    schedule 18.07.2019
comment
Спасибо за вашу помощь здесь @Wedge. Я не смог опубликовать все в комментарии, поэтому разместил свои комментарии в качестве ответа на свой вопрос! - person rightanium; 19.07.2019
comment
Когда я пытаюсь добавить больше недель, возникает серьезная проблема с запросом с точки зрения результатов. Я отредактировал свой ответ выше. По сути, это то, что я сделал, когда писал свой исходный пост. - person rightanium; 19.07.2019
comment
Итак ... похоже, что вы собираетесь использовать свой прогноз запасов вместо фактических запасов, когда в наборе данных еще нет фактических данных. Теоретически это возможно, но это будет сделано как отдельный расчет, и я чувствую, что это будет другой набор данных, поскольку он является умозрительным и не основан на том, что на самом деле произошло. - person Wedge; 19.07.2019
comment
Это правильно. Конечно, это будет умозрительно. Отправной точкой является фактическое количество запасов, но затем он каждую неделю спекулирует на запасах, основываясь на покупках и продажах, а также прогнозе запасов на предыдущей неделе. Спасибо. - person rightanium; 20.07.2019
comment
Как вы думаете, это достижимо? - person rightanium; 21.07.2019
comment
Конечно, вы бы сделали что-то подобное в качестве меры, поскольку это расчет, зависящий от категории? - person mer_curius; 22.07.2019
comment
@mer_curius Я делаю это в запросе питания .. не уверен, есть ли там меры? - person rightanium; 22.07.2019
comment
Извините, я имел в виду PowerBI или PowerPivot. Вы можете агрегировать отфильтрованные строки и делать промежуточные итоги, например powerbi.microsoft.com/fr-fr/blog/quick-measures -предварительный просмотр - person mer_curius; 22.07.2019
comment
Спасибо, но я понятия не имел о языке powerpivot и dax. Подскажите, с чего начать решение моей проблемы. Мне действительно не нужно, чтобы прогнозируемые запасы добавлялись в виде строк в мои необработанные данные, если результирующая сводная таблица может рассчитать будущие запасы, а я предполагаю, что Power Pivot может это сделать? Спасибо. - person rightanium; 27.07.2019