Cast your vote for the official 2025 Inspire Pin! Designs were submitted by fellow Community members and reflect the creativity and passion of Alteryx users across the globe. Vote now!

ディスカッション

答えを見つけ、質問し、Alteryx の専門知識を共有してください。
解決済み

複数行フォーミュラをインデータベースで実現する方法について

daisuke_daisuke
アトム

複数行フォーミュラのIF文で(行-1)と(行+0)のデータが一致したら特定の値を返す、といったフローを組んでいるのですが、

データ量が多い場合に相当の処理時間がかかってしまうため、インデータベース上で同じことを処理してしまえないかと思っています。

データベースはSnowflakeを使っているのですが、フォーミュラIN-DBツールで実現することは可能でしょうか。

可能な場合は構文例などいただけますと嬉しいです。

2件の返信2
AkimasaKajitani
17 - Castor
17 - Castor

@daisuke_daisuke さん

 

複数行フォーミュラを使って何をしたいか、ということに依存しますが、例えば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で対応可能です。

 

スクリーンショット 2024-03-29 165103.png

 

スクリーンショット 2024-03-29 165129.png

最終的には、以下のようなWFになります。

 

スクリーンショット 2024-03-29 165142.png

これによって、以下のような出力が得られます。 

 

スクリーンショット 2024-03-29 165209.png

 

ちなみに、インプットは以下のような感じです。

スクリーンショット 2024-03-29 165223.png

 

あとは、フォーミュラ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関数で前後のデータを持ってきつつ計算するのが一番楽に思います。

daisuke_daisuke
アトム

AkimasaKajitani
早速ご指南くださりありがとうございます!

なるほど、LAG関数で参照すればよいのですね。分かりやすいご説明に大変感謝いたします。

 

 

トップのソリューション投稿者