検出されたサイクルは私の仕事にとって大きな問題です。こんにちは、JMP コミュニティ
「循環が検出されました」は、行単位で循環的ではないビジネス ルールをシミュレートすることによる大きな問題 (頻繁に発生します) です。 ただし、JMP は Excel のように非常に単純な行単位の依存関係を処理できません。 率直に言って、JMP がスプレッドシートではないという話を聞くのは好きではありません。なぜなら、ユーザーのかなりの部分がおそらくこの種の問題を抱えていると思うからです。 データはレコード(つまり、日付/時刻)ごとに分類されており、そのため以前のレコードの対象となるため、私はこの問題と常に戦っています。 行単位の操作の処理を容易にしたくないのであれば、JMP はなぜラグ関数を提供するのでしょうか (そして、これは素晴らしいことであり、私は常にそれを使用しています)。 しかし、そうすることでサイクル検出の問題が発生し、やはりスプレッドシートの考え方では競合は発生しません。 Excel では簡単に処理できますが、JMP では処理できません。 私は Pro ライセンスを持っていますが、このようなフィードバックが上層部に返されるのは、率直に言ってあまり良くないと思います。 私にとって、JMP Pro の主な利点は、複雑なモデリング、データ サイエンス、ビッグ データ上の機械学習のユーザー フレンドリーな機能です。 現在説明されている問題は、ツールの使いやすさに反する問題です。 他に何もできない場合は、Excel でこれを実行できるように JMP からエクスポートする必要があります (これは面倒です)
この投稿の私の意図:
1- このことを開発者に知らせるために何かできることはありますか?
例えば 「エラーを無視」と「すべてのサイクルを無視」を個別に試しました。これらは必要なチェックをバイパスし、数式を実行できる可能性があると予想していました(実際には実行されませんでした)。
2- 使用できる数式ベースのアプローチはありますか (スクリプトであっても、これを数式に含める必要があります)。 以下に 2 つのサンプルを添付します。同じ計算で、1 つは JMP で、もう 1 つは xls です。
A は自由入力欄です。
B は、 Record = 1 の A に初期化され、C に応じて A または B の前の値 (つまり、ラグ関数を使用する B 自体) になります。
C は A - B の前の値です
ありがとう。
品質およびプロセスエンジニアリングRe: 検出されたサイクルは私の仕事にとって大きな問題です。実際のパラメータは、この単純な例で示されているものよりも複雑でした。 Julian の解決策も同様に受け入れられますが、すべての複雑さを 1 つの式にまとめようとするのはやりすぎだと考えたので、Craige のスクリプトを使用しました (うまくいきました)。
(1) 「エラーを無視する」と「すべてのサイクルを無視する」という点をおそらく明確にしてもらえるよう、JMP 開発者にメモを送信してみます。これも私にはわかりますが、サイクル検出の問題を回避できるように思えますが、明らかにしなかった。 (2) そしておそらく、実際のサイクリックが存在しない場合にバイパスするオプションを JMP に追加することを検討できるかもしれません。
Re: 検出されたサイクルは私の仕事にとって大きな問題です。このスクリプトは 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>
列ごとに評価する JMP 列式とは異なり、スクリプトは行ごとに C の評価を B の評価の前に置きます。 C は B の前の行にのみ依存するため、C を最初に評価する必要があることがわかるまで、数式を見つめるのに 1 分かかりました。 次に、B は現在の行に対して計算したばかりの C 値に依存するため、評価できます。
もう少し勉強してみましょう...次のように、dt:C の代わりに C の数式を列 B にコピーします。
Removes the reference to column CRemoves the reference to column CC列への参照を削除します。
これにより、列 C が本当に必要ない場合は削除できます。 また、再実行が必要な最初のスクリプトとは異なり、列が自動的に更新されることも意味します。
Re: 検出されたサイクルは私の仕事にとって大きな問題です。こんにちは@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 の式をそのままにしておくことができ、テーブルには問題なくデータが入力されます。 単一の式では、B の列式内の B への参照が Lag() を通じて発生していることが JMP にとって明らかであるため、これによってサイクルのアラームは発生しません。 数式が異なる列にある場合、サイクル検出で Lag() が考慮されず、B が C を参照し、B を参照しているとだけ判断されるようです。

「すべてのサイクルを無視」が修正されるまで、これがあなたの仕事に役立つことを願っています。
@ジュリアン