检测到的循环是我工作中的一个主要问题。你好 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。

我希望这对您的工作有所帮助,直到修复“忽略所有周期”为止!
@朱利安