こんにちは、みんな、
2 つの行間の日付の違いを調べる列式を作成しようとしています。特定の値 (この場合は 4 日) 以上の場合、列のフェーズ値を減分する必要があります。日付の差が 4 未満の場合は、前のフェーズの値を保持する必要があります。数式で 2 つのローカル変数、フェーズとフェーズ間の最小日数である MinDaysbreak を定義しました (4)。列 :"Date/Time:"n は、For() ループが反復処理される日付列です。

私の式は次のようになります。

式の JSL コードは次のとおりです。
For( i = N Rows(), i >= 1, i--,
If( i == N Rows(),
phase,
If( Abs( Date Difference( :"Date/Time:"n[i + 1], :"Date/Time:"n, "Day" ) ) >= MinDaysbreak,
phase--,
phase
)
)
)
数式でエラーは発生せず、数式は抑制されていませんが、列は空のままです。最初の If() の最初の else ステートメントを削除しても、最後の行には何も取得できません。ローカル変数フェーズであるため、列の最後のエントリは 9 であるはずです。 9つのフェーズがあることがわかりました。
何が間違っているのかはわかりませんが、見落としている単純な間違いだったとしても驚かないでしょう。
助けてくれてありがとう!、
DS
For() 関数は値を返さないため、列は空です。このコードを数式エディタに貼り付けてみてください。
Local({i = N Rows(), phase = 9, MinDaysbreak = 4},
For(i, i >= Row(), i--,
If(i == N Rows(),
phase,
If(Abs(Date Difference(:"Date/Time:"n[i + 1], :"Date/Time:"n[i], "Day")) >= MinDaysbreak,
phase--,
phase
)
)
);
phase;
)意図したとおりに機能すると思います。次の変更点に注意してください。
– 現在の行の値を設定する追加フェーズ(For ループ内で計算された後)。これを行わないと、空の列が表示されます。
– 正しく動作させるには、すべての行を反復処理するのではなく、 Row()を使用して現在の行までのみ反復処理する必要があります。それ以外の場合は、すべての行で同じ値が取得されます。
– 常に次の行と比較できるようにするには、両方の日付のインデックスが必要です。それがなければ、結果を予測するのは困難です (データによって異なります)。
最初のiもローカルパラメータとして定義しましたが、それは必要ないと思います。
ただし、列の数式で for ループを使用するのは非常にまれです。大規模なデータセットがある場合、すべての行に値を設定するためにテーブルをループするのは非常に非効率的になる可能性があります。この問題を解決するには、列式または JSL を使用する他の方法もあります。
/MS