換班/變動你好 ...
回到我在這個論壇上最喜歡的話題。
我需要幫助建立以下邏輯。
在資料 (Y) 大小恆定的移動視窗內,資料 (Y) 根據某些日期時間參數按時間順序排序
1-需要找到Y最小值=min
2-需要求Y最大值=max
3-計算偏移 = max - min(如果 max 是在 min 的記錄之後按時間順序確定的)
要不然
shift = min- max (如果 max 按時間順序在 min 的記錄之前被識別)
我可以在公式中執行 1 和 2,但找不到任何計算移位的技巧
公式解決方案是首選,但如果不是,腳本也可以工作。 (特別是如果腳本可以在公式視窗中運行)
注意:我明天(2020 年 9 月 2 日)有一些緊急情況需要計算這些,任何幫助將不勝感激。
謝謝 ...
消費者與市場研究回覆:換班/變動我一直發現工作代碼應該受到讚揚,而不是錯誤,所以如果它工作......使用它。
回覆:換班/變動吉姆
我相信我已經完成了我的邏輯和以下形式(它不像你的那麼緊湊)..
我的 Y 是指數加權函數,因此第一項是空白,這是我的我需要“+1”
AssetRecordNumber == 欄位編號( :Name( "Y" ), :ASSET ) + 1
感謝您對此的大力支持。如果您發現任何問題,請告訴我,但我已經對其進行了測試,它似乎適用於所有 3 個場景。
-------------------------------------------------- ------------------------
If( 列編號( :名稱( "Y" ), :ASSET ) >= :偵測視窗 & :AssetRecordNumber >= :偵測視窗,
If( :AssetRecordNumber == :偵測視窗,
conSize = :檢測視窗;
allVals = :Name( "Y" ) << 取得值;
);
開始 = Row() - (:檢測視窗 - 1);
subMat = allVals[Index( 開始, Row() )];
minVal = Min( subMat );
maxVal = Max( subMat );
minLoc = Loc( subMat, minVal )[1];
maxLoc = Loc( subMat, maxVal )[1];
如果( maxLoc >= minLoc,
theShift = maxVal - minVal,
theShift = minVal - maxVal
);
調動,轉移;
,
If( 列號( :Name( "Y" ), :ASSET ) >= :window_min & :AssetRecordNumber == 列號( :Name( "Y" ), :ASSET ) + 1,
(conSize = Col Number( :Name( "Y" ), :ASSET ) ; allVals = :Name( "Y" ) << 取得值);
開始 = Row() - (列號(:Name("Y"), :ASSET) - 1);
subMat = allVals[Index( 開始, Row() )];
minVal = Min( subMat );
maxVal = Max( subMat );
minLoc = Loc( subMat, minVal )[1];
maxLoc = Loc( subMat, maxVal )[1];
如果( maxLoc >= minLoc,
theShift = maxVal - minVal,
theShift = minVal - maxVal
);
調動,轉移;
,
。
)
)
回覆:換班/變動吉姆,對此還有一個請求。
我的分析首先從恆定滾動視窗開始,但隨後我必須考慮一些沒有目標記錄數的資產(如在 detector_window 中),因此我需要透過插入第二個表變數 window_min 來放鬆對它們的約束(滾動視窗尺寸的最小值)。
舉個例子,如果我的 detector_window = 30 且 window_min=15,這意味著
1) 所有記錄多於 30 的資產,將有一個大小為 30 的滾動窗口
2) 所有包含 30 -15 筆記錄的資源都將有一個最大長度的視窗
3)所有其他小於15的資產不會有任何東西
您能否對您的原始解決方案提出修改建議?
謝謝 ...
回覆:換班/變動吉姆,
再次感謝您及時的大力支持(一如既往)
我做了 2 處更改...
1)檢測視窗是我的表變量,定義滾動視窗長度
2)我認為一開始應該是Detection_window -1(在第二行)
更重要的是,我的 Y 列還需要按第二個資產變數 Z 拉入(圍繞「獲取值」階段)
(即 Y 和 Z 是兩列,需要計算最小最大計算偏移量作為資產 Z 的函數。 )
現在,我針對一項特定 Z 資產繪製了此圖,結果是正確的。
我在開頭確實有一個 IF 語句,當每個資產 Z 的行數 = detector_window 獨立時,語句開始計算... 我認為這就是它起作用的原因。
[row()- (detection_window -1) ] 從每個資產的正確開頭開始。
start =1 讓我有點困惑..希望這不會從第 1 行啟動視窗。
感謝你的幫助。
如果(行()== 1,
conSize = :檢測視窗;
allVals = Y << 取得值;
);
如果(行()<= conSize,
開始= 1,
開始 = Row() - (:偵測視窗 - 1)
);
subMat = allVals[Index( 開始, Row() )];
minVal = Min( subMat );
maxVal = Max( subMat );
minLoc = Loc( subMat, minVal )[1];
maxLoc = Loc( subMat, maxVal )[1];
如果( maxLoc >= minLoc,
theShift = maxVal - minVal,
theShift = minVal - maxVal
);
調動,轉移;
回覆:換班/變動我認為這會給你轉變值。只需更改公式中的常數大小(conSize)值和 Y 列名稱(Y),我相信它會計算您想要的內容
If( Row() == 1,
conSize = 5;
allVals = :Y << get values;
);
If( Row() <= conSize,
start = 1,
start = Row() - conSize
);
subMat = allVals[Index( start, Row() )];
minVal = Min( subMat );
maxVal = Max( subMat );
minLoc = Loc( subMat, minVal )[1];
maxLoc = Loc( subMat, maxVal )[1];
If( maxLoc >= minLoc,
theShift = maxVal - minVal,
theShift = minVal - maxVal
);
theShift;