複数行フォーミュラのIF文で(行-1)と(行+0)のデータが一致したら特定の値を返す、といったフローを組んでいるのですが、
データ量が多い場合に相当の処理時間がかかってしまうため、インデータベース上で同じことを処理してしまえないかと思っています。
データベースはSnowflakeを使っているのですが、フォーミュラIN-DBツールで実現することは可能でしょうか。
可能な場合は構文例などいただけますと嬉しいです。
解決済! 解決策の投稿を見る。
複数行フォーミュラを使って何をしたいか、ということに依存しますが、例えばDesigner Cloudは複数行フォーミュラがないため、似たような手法が使えるかと思います。以下ブログの1の方法などは応用可能です。レコード番号をつけて、レコード番号に対してプラスマイナス1とかしてから結合することで、別の行のデータを引っ張ってくることができます。
https://newssdx.kcme.jp/designer-cloud_multirowformula_alternative/
ただ、レコード番号はフォーミュラIN-DBかDBから引っ張ってくるときにSQLの関数で実現する必要があります。
例えば、以下のようなSQLが必要になります。
select row_number() OVER (ORDER BY "Date") AS row_number from TEST_AK.PUBLIC.DATE_TABLE;
https://docs.snowflake.com/ja/sql-reference/functions/row_number
これもフォーミュラInDBで対応可能です。
最終的には、以下のようなWFになります。
これによって、以下のような出力が得られます。
ちなみに、インプットは以下のような感じです。
あとは、フォーミュラInDBである程度SnowflakeのSQL関数が使えるので、例えばRank関数などある程度の範囲で見るようなSQLは機能しますので、やりたいことに応じてSQL関数を検討してみてください。
よくよく見ると、上記のようなことも、LAG関数を使えばもっと簡単に実現可能かと思います。
https://docs.snowflake.com/ja/sql-reference/functions/lag
LAG("Date", 1, NULL) OVER (ORDER BY "Date" DESC)
整理せずにばらばら書いてしまいましたが、結論としてはLAG関数で前後のデータを持ってきつつ計算するのが一番楽に思います。