檢測到的循環是我工作中的一個主要問題。你好 JMP 社區
由於模擬不是逐行循環的業務規則,「偵測到循環」是一個主要問題(經常發生)。 但是,JMP 無法處理 excel 可以處理的非常簡單的行相關性。 坦白說,我不喜歡聽到 JMP 不是電子表格,因為我認為很大一部分用戶可能會遇到此類問題。 我不斷地解決這個問題,因為資料是按記錄(即日期/時間)分類的,因此是先前記錄的主題。 如果 JMP 不想讓處理行操作變得更容易,為什麼要提供滯後函數(這很棒,我經常使用它)。 但這樣做會開啟偵測到問題的周期,並且再次從電子表格的思考角度來看,不存在衝突。 Excel 可以輕鬆處理,JMP 則不能。 我持有專業版許可證,坦白說,向我的高階主管提供這樣的回饋看起來不太好。 對我來說,JMP Pro 的主要優勢是使用者友好的複雜建模、資料科學和大數據機器學習能力。 目前描述的問題是影響該工具的用戶友好性的問題。 如果我無能為力,我需要從 JMP 匯出,這樣我就可以使用 Excel 來完成此操作(這很麻煩)
我這篇文章的意圖:
1-我能做些什麼來引起開發人員的注意嗎?
例如 我獨立嘗試了“忽略錯誤”和“忽略所有周期” - 我期望這些可能繞過了必要的檢查,也許可以讓公式運行(他們沒有)
2-是否有任何可以使用的基於公式的方法(即使是腳本,也需要在公式中)? 我在下面附上 2 個範例 - 相同的計算,一個在 JMP 中,另一個在 xls 中。
A 是自由輸入列。
B 初始化為 A ,記錄 = 1 ,然後 A 或 B 的先驗值(即本身使用滯後函數)依賴 C
C 是 A - B 的先驗值
謝謝。
品質和工藝工程回覆:偵測到循環是我工作中的一個主要問題。我的實際參數比這個簡單範例中顯示的更複雜。 朱利安的解決方案同樣可以接受,但我認為嘗試將所有複雜性放入公式中會太多,因此我使用了克雷格的腳本(有效)。
我將嘗試向JMP 開發人員發送一條說明,以便(1)他們也許可以澄清“忽略錯誤”和“忽略所有周期”的要點- 這對我來說再次- 聽起來你可以繞過檢測到的周期問題,但他們清楚沒有。 (2) 如果真正的循環不存在,也許他們可以考慮將選項設為 JMP 以繞過。
回覆:偵測到循環是我工作中的一個主要問題。該腳本產生與 Excel 表相同的答案,並且看起來很像您的列公式。
dt = Open( "/Z:/cyclic_error_sample.jmp" );;
dt:b<<DELETEFORMULA> 1,
dt:a - lag(dt:b);//
,//
.
);
dt:b = If( dt:record == 1,
dt:a;//
, //
If( dt:c < 1.5,
dt:a;//
, //
lag(dt:b)
)
);
);</DELETEFORMULA>
腳本將 C 的計算逐行放在 B 的計算之前,這與逐列計算的 JMP 列公式不同。 我花了一分鐘盯著你的公式才發現 C 需要先計算,因為它只依賴 B 的前一行。 然後 B 可以計算,因為它取決於我們剛剛為當前行計算的 C 值。
再研究一下...只需將 C 公式複製到 B 列中代替 dt:C,如下所示:
Removes the reference to column CRemoves the reference to column C刪除 C 列的引用
如果您確實不需要 C 列,則可以將其刪除。 這也意味著列將自動更新,這與您需要重新運行的第一個腳本不同。
回覆:偵測到循環是我工作中的一個主要問題。你好@altug_bayram ,
這聽起來像是您工作中經常遇到的令人沮喪的問題! 我同意“忽略所有周期”似乎應該按照它所說的那樣進行,並讓公式繼續進行,因為您向 JMP 斷言實際上不存在依賴關係。 這聽起來像是一個缺陷,將其告知開發人員的最佳方法是發送電子郵件support@jmp.com解釋你在這裡的問題。
作為解決方法,修復方法甚至不創建外貌透過複製 C 列的整個公式,並將對 C 的引用替換為 B 列中的該公式,可以建立依賴關係:

If( :Record == 1,
:A,
If( If( :Record > 1, :A - Lag( :B, 1 ), . ) < 1.5,
:A,
Lag( :B, 1 )
)
)
您可以保持 C 的公式不變,並且您的表格將很好地填充。 這不會引發循環警報,因為在單一公式中,JMP 很清楚,B 的列公式中對 B 的引用是透過 Lag() 發生的。 似乎當公式位於不同欄位時,循環偵測無法考慮 Lag(),只會看到 B 引用 C 引用 B。

我希望這對您的工作有所幫助,直到修復“忽略所有周期”為止!
@朱利安