如何计算以其他行作为电源查询输入的内容?

时间:2019-07-18 12:23:07

标签: excel powerquery m

我在Power查询中有一个表,除其他字段外,还有以下关键字段:

SKU |年份周|客户|交易|类型值

例如,某些行将是:

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

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

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

这是一个包含约300,000行的表,其中包含所有SKU,并且为所有客户提供了数年的交易记录,这进入了一个非常有用的数据透视表,该数据表得到了广泛使用。现在,我需要向数据中添加一些内容,以使表更加有用。

我具有全年的购买和销售预测以及实际情况,它们遵循上述模式。我还拥有所有星期的库存,但只有过去的库存,即只有实际库存。我没有库存预测,这是我要添加的。计算非常简单:

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

我期望的最终结果是现在将添加更多行,例如:

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

(我正在使用上方的数字进行计算)

现在,这不仅使我能够支配购买和销售,而且还能改变库存水平,这将改变游戏规则。

我很乐意在Power Query中为我提供帮助(我已经在数周内尝试了多种方法,但尚未破解)

要自己解决问题:

我从源中追加了更多行,实际上是在所有实际周中追加了Week-1数据,从而减少了潜在的计算时间。然后,我将“交易列”调整为新列,即“购买”,“销售”,“存货”和“存货1”,这使“存货预测”的计算变得容易(这就是事实)。

我没有想到的是:这仅是计算第一周的库存预测的好方法,但是我不知道该如何使用仅计算出的库存预测来计算下周的库存预测。

基本上,没有办法保存我刚刚计算出的库存预测,以用于下周的计算。

1 个答案:

答案 0 :(得分:-1)

当您说要使用“计算的库存预测来计算下周的库存预测”时,我不清楚您要问什么。但是,如果您只是想生成公式和结果作为数据集的组成部分而给出,则非常简单。

从此开始,将数据加载到我称为“数据表”的PQ中的示例表:

enter image description here

我基于它创建了两个参考查询,分别称为StockForecast和CombinedDataTable

enter image description here

在“ 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]
    ),

enter image description here

然后,您可以使用“分组”功能,并通过“存货”,“客户”,“ 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"

然后数据的最终结果如下:

enter image description here

然后只需转到CombinedDataTable查询,追加StockForecast查询,您的数据集中就会有Stock Forecast值。