使用最近 3 個時間段計算移動平均線我有一組包含三列的數據;客戶、時間段和數量。 TimePeriod 的格式為 yyyymm。 我正在嘗試確定一個公式來計算所有客戶在過去 3 個時間段內的“滾動平均值”。
例如,在我標記為 201704 的行中,我想要一個公式來返回 201703、201702 和 201701 中所有記錄的平均數量。 TimePeriod 可以在數據中多次出現(按客戶),這使得它稍微複雜一些。
有什麼建議麼?
回复:使用最近 3 個時間段計算移動平均線再次感謝您的幫助!
這正是我要找的。
-馬特
回复:使用最近 3 個時間段計算移動平均線這是公式的擴展,其中添加了客戶
dt = Current Data Table();
tp = :timeperiod;
cus = :Customer;
tmp = Date Increment(
Date MDY( Num( Substr( :timeperiod, 5, 2 ) ), 1, Num( Substr( :timeperiod, 1, 4 ) ) ),
"Month",
-1
);
lagtp1 = Char( Year( tmp ) ) || Try( Substr( "0", Length( Char( Month( tmp ) ) ), 1 ), "" ) ||
Char( Month( tmp ) );
tmp = Date Increment(
Date MDY( Num( Substr( :timeperiod, 5, 2 ) ), 1, Num( Substr( :timeperiod, 1, 4 ) ) ),
"Month",
-2
);
lagtp2 = Char( Year( tmp ) ) || Try( Substr( "0", Length( Char( Month( tmp ) ) ), 1 ), "" ) ||
Char( Month( tmp ) );
Mean(
:Quantity[dt << get rows where( ( :timeperiod == tp | :timeperiod == lagtp1 | :timeperiod == lagtp2 ) &
:Customer == cus)
]
);
回复:使用最近 3 個時間段計算移動平均線你是對的! 這一定是我這邊的用戶錯誤:)
如果我想要按客戶分隔的方式,假設“客戶”在其自己的列中以供參考,這可能嗎?
因此,輸出列將只計算該行中客戶最近 3 個時間段的平均值。
回复:使用最近 3 個時間段計算移動平均線我給你的公式查看給定行的年/月值。 然後它找到 1 個月前的值是多少,以及 2 個月前的值是多少。 然後,它為數據表中所有具有 3 個計算的年/月值中的任何一個的年/月值的行找到平均值。
因此,任何具有年/月值的行,比方說, 201705,將找到數據表中所有被發現具有 201705、201704 或 201703 值的行的平均數量。我的有限測試用例適用於此。 請注意,數據表中行的物理順序並不重要。 該公式查找整個數據表中與給定行的 3 個時間段匹配的所有行。
如果你能給我一個樣本數據表,我可以進一步研究這個。 或者,也許我對您所問內容的解釋不正確。
回复:使用最近 3 個時間段計算移動平均線吉姆 - 感謝您的耐心等待。
按照您的指導,我將該公式添加到一個新列中,但我在整列中得到了相同的重複值。
我希望公式只給出最近 3 個時間段的平均值那一排的.
例如,201704 年的平均記錄應該只對 2017 年 4 月的最後 3 個時間段(201704、201703、201702)進行平均。 201705 的下一行應該有一個不同的平均值,由 2017 年 5 月的最後 3 個時間段(201705、201704、201703)組成。
想法?
回复:使用最近 3 個時間段計算移動平均線我給你的是一個新公式,旨在用於新列,將為每一行創建一個新值。
在數據表中,轉到下拉菜單
列==>新列
隨意命名該列
在左下角,單擊
列屬性
選擇公式
雙擊顯示“無公式”的藍色框
在打開的窗口中,粘貼公式
回复:使用最近 3 個時間段計算移動平均線非常感謝您的回复。
我對腳本很陌生。 有沒有一種方法可以按行在新列中輸出平均值? 因此,當腳本確定過去 3 個時間段的平均值時,它會在新列中顯示每一行的平均值嗎?
此外,數據集開頭的腳本是否存在問題? 當第一次約會沒有 lagtp1 或 lagtp2 時?
回复:使用最近 3 個時間段計算移動平均線這是你的公式
dt = Current Data Table();
tp = :timeperiod;
tmp = Date Increment(
Date MDY( Num( Substr( :timeperiod, 5, 2 ) ), 1, Num( Substr( :timeperiod, 1, 4 ) ) ),
"Month",
-1
);
lagtp1 = Char( Year( tmp ) ) || Try( Substr( "0", Length( Char( Month( tmp ) ) ), 1 ), "" ) ||
Char( Month( tmp ) );
tmp = Date Increment(
Date MDY( Num( Substr( :timeperiod, 5, 2 ) ), 1, Num( Substr( :timeperiod, 1, 4 ) ) ),
"Month",
-2
);
lagtp2 = Char( Year( tmp ) ) || Try( Substr( "0", Length( Char( Month( tmp ) ) ), 1 ), "" ) ||
Char( Month( tmp ) );
Mean(
:Quantity[dt << get rows where( :timeperiod == tp | :timeperiod == lagtp1 | :timeperiod == lagtp2 )
]
);