为什么会出现这种没有公式的列的意外重新计算?我经常使用 JMP 来构建数据管道原型,计算一个表中的列值,然后根据计算结果将数据查询到另一个表中。我注意到一个行为在我看来非常奇怪且违反直觉。假设我有一张包含三列的表:

第二列和第三列计算为滞后(:列 1)和列总和(:列 1)。
现在我将行查询到一个新表中,其中:列 1 > 2。结果是:

由于表格继承了公式,因此“:列 1 的滞后”和“:列 1 的总和”会被重新计算。这是可以理解的。
但是,如果我删除公式并更新表格会怎么样?由于我没有公式,也没有重新计算目标表中的值,所以我会看到源表中的数据,对吗?猜猜怎么着,错了!什么都没变。我仍然看到 null、3 和 7, 7,而不是 2、3 和 10, 10。
这是缺陷吗?还是这是预料之中的?该如何解释?
谢谢!
自动化和脚本回复:为什么会出现这种没有公式的列的意外重新计算?哎哟,令人惊讶的有毒混合物:查询生成器和列公式!
一些设置类似于 Subset 中的设置

可以消除很多头痛。
除此之外:一个漂亮的放大镜,可以观察 JMP 的细节 : )
JMP 是哪个版本?能分享一下日志里的步骤吗?
我使用 JMP 18.2.2 和 19.0 对其进行了测试,其中落后()在执行查询后执行,而 Col Sum()则不执行。
删除公式后,一切正常。
[也许:您是否引用了带有公式的旧数据表“无标题”?]


names default to here(1);
dt = New Table( "Untitled",
Add Rows( 4 ),
New Column( "Column 1",
Format( "Best", 12 ),
Set Values( [1, 2, 3, 4] )
),
New Column( "Sum[Column 1]",
Formula( Col Sum( :Column 1 ) )
),
New Column( "Lag[Column 1]",
Formula( Lag( :Column 1, 1) )
)
);
dt << run formulas();
wait(0);
queryDT= Expr(New SQL Query(
Connection( "JMP" ),
Select(
Column( "Column 1", "t1" ),
Column( "Sum[Column 1]", "t1" ),
Column( "Lag[Column 1]", "t1" )
),
From( Table( "Untitled", Alias( "t1" ) ) ),
Where(
GT(
Column( "Column 1", "t1" ),
2,
UI( Comparison( Base( "Continuous" ) ) )
)
)
) << Run Foreground);
queryDT;
Column (dt, 2) << delete formula();
Column (dt, 3) << delete formula();
wait(0);
queryDT;
wait(0);
dt << set name("input");
回复:为什么会出现这种没有公式的列的意外重新计算?您是否正在查询 JMP 数据表?您是否正在从哪个表中删除公式?您能分享一些示例数据集来复现这个问题吗?
回复:为什么会出现这种没有公式的列的意外重新计算?是的,第二张截图中的第二个表是查询第一张截图中第一个 JMP 数据表的结果。表格已附加 - 将它们放在同一文件夹中,然后在第二个表中执行“从数据库更新”脚本。第二个表中没有公式;然而,结果就像公式存在并被求值一样。
回复:为什么会出现这种没有公式的列的意外重新计算?JMP Pro V.17
附有表格。
回复:为什么会出现这种没有公式的列的意外重新计算?这不是一个好的解决方法,但是您可以暂时从原始表中抑制公式评估,运行查询并重新启用公式评估(我认为这应该已经由查询生成器完成)。

此外,我会就此联系 JMP 支持,因为发生了一些奇怪的事情, JMP 支持
回复:为什么会出现这种没有公式的列的意外重新计算?对 JMP 19.1 的建议:
查询生成器:禁用公式列
回复:为什么会出现这种没有公式的列的意外重新计算?啊,我误解了
但是如果我删除公式并更新表格会怎样?
好的,在 JMP19 中仍然一样。
那么,JMP 运行查询(包括公式) - 并用新结果替换目标表中的数据?
这实际上正是我预期的“更新”操作。但是,如果在此期间添加了新列,JMP 为什么不能执行这种“保留表格,仅更新数据”的更新呢?对于第四栏 ,它看起来更像是删除了那里的所有内容,并用新的查询结果替换它。
也许:它采用查询结果 - 但复制并应用旧的列设置?
...从而删除列公式 - 并隐藏问题?
回复:为什么会出现这种没有公式的列的意外重新计算?是的,这个解决方法有效。我使用的另一个笨拙的解决方法是,先将所有行查询到一个不使用公式的中间表中,然后再查询这个中间表。
回复:为什么会出现这种没有公式的列的意外重新计算?JMP 支持部门的回应是什么?
回复:为什么会出现这种没有公式的列的意外重新计算?我没有联系他们。我宁愿依靠这个社区和我自己。:)
回复:为什么会出现这种没有公式的列的意外重新计算?嗯,我更喜欢官方修复而不是“变通方法”。
修复它——然后忘掉它。
找到解决方法并且不要忘记!!
- 别忘了告诉每一位同事!
回复:为什么会出现这种没有公式的列的意外重新计算?关于“社区和我自己” - 我添加了主题
注意:Jmp 执行意外操作的地方
另一方面,我非常有信心这个问题可以在 GUI 中得到解决。
与 Subset 中的选项类似的选项可以帮助客户了解问题,默认选项应该是删除或禁用公式列。

让我们看看这种行为是否被视为错误:TS-00244891。
如果没有,则需要更长时间,因为我们首先需要在愿望清单上收集足够的 Kudos: 查询生成器:禁用公式列