2017-12-08 7 views
0

ユーザーは月間売上高(数万行)の月次顧客レポートを受け取ります。売上高は、私が(*必須*)出力として実際の販売を得るためにpowerqueryの解決策を見つけるためにしようとしている、トータルランニングのように表示されます。TSQLでM - 累積値(実績合計)を実際の値に変換

╔══════╦═══════╦═════════╦═══════╦════════════╗ 
║ Year ║ Month ║ StoreID ║ Sales ║ *Required* ║ 
╠══════╬═══════╬═════════╬═══════╬════════════╣ 
║ 2017 ║ 10 ║  1 ║  5 ║   5 ║ 
║ 2017 ║ 11 ║  1 ║ 11 ║   6 ║ 
║ 2017 ║ 12 ║  1 ║ 18 ║   7 ║ 
║ 2017 ║ 11 ║  2 ║ 10 ║   10 ║ 
╚══════╩═══════╩═════════╩═══════╩════════════╝ 

私は

Sales - LAG(Sales,1,0)OVER(Partiton by Year, StoreID Order by Month) 
ような何かをしたいです

疑問な質問(逆ですが)was answeredですが、提案された解決策はクロス結合に相当します。私はpowerquery(私は誤解かもしれません)の新人ですが、私はデータセットが毎月のように実行可能であることがわかりません。これにアプローチするより良い方法はありますか、私は "M"の例を見つけることができませんか?

編集:List.Rangeは

答えて

3

は、実際に使用すると、現在の行の前の行から値を必要とする有望に見えます。 一般的なアプローチは、2つのインデックス列を追加することです.1つは0で始まり、もう1つは1で始まります。次に、Index列を結合列として使用して表をマージします。ネストした表から必要な列を拡張した後、必要な計算を含むカスタム列を追加できます。

let 
    Source = Sales, 
    #"Added Index" = Table.AddIndexColumn(Source, "Index", 0, 1), 
    #"Added Index1" = Table.AddIndexColumn(#"Added Index", "Index.1", 1, 1), 
    #"Merged Queries" = Table.NestedJoin(#"Added Index1",{"Index"},#"Added Index1",{"Index.1"},"Previous",JoinKind.LeftOuter), 
    #"Expanded Previous" = Table.ExpandTableColumn(#"Merged Queries", "Previous", {"StoreID", "Sales"}, {"Previous.StoreID", "Previous.Sales"}), 
    #"Sorted Rows" = Table.Sort(#"Expanded Previous",{{"Index", Order.Ascending}}), 
    #"Added Custom" = Table.AddColumn(#"Sorted Rows", "Required", each [Sales] - (if [StoreID] = [Previous.StoreID] then [Previous.Sales] else 0), Int64.Type), 
    #"Removed Columns" = Table.RemoveColumns(#"Added Custom",{"Index", "Index.1", "Previous.StoreID", "Previous.Sales"}) 
in 
    #"Removed Columns" 
+0

この素晴らしい回答に感謝します。私は明日ファイルを使ってこのコードを調べます。一度確認されたようにマークします –

+0

Marcelありがとうございます。 2つのインデックスを視覚化することは私を混乱させましたが、ステップを分割して見ることは素晴らしいことでした。あなたの時間と答えをありがとう –