【Alteryx】Salesforce Inputのカスタムクエリに手こずった話
Hola〜みなさんこんにちは!Salesforceシステム管理者の清水です。
最近Salesforceの管理者の割にAlteryxをよく触っておりまして、そこでハマった内容があったのでご紹介したいと思います。
Salesforceからデータを取得する
Salesforce Input について
弊社のブログにもあるとおり、AlteryxでもSalesforce Inputを利用してSalesforceの各オブジェクトのデータを取得出来ます。
AlteryxからSalesforce.comにアクセスする
私は条件を指定してデータを取得してきたいので、「カスタムクエリ」をよく利用します。この時結果的に同じデータが返ってきたとしても、SOQLの記述内容によっては、返ってきたデータがJSON形式になってしまい、すぐに別のデータと結合したいのに出来ない!といったケースがあったのでご紹介します。
比較演算子 | SOQL および SOSL リファレンス | Salesforce Developers
データ取得が思った通りにできない
複数のIDを除外したデータを取得したい
今回試したのはよくある以下の内容です。
SalesforceユーザーのIDから、特定のアカウントを除いたメンバーのログイン履歴をAlteryxで取得したい
この場合複数のIDを記述しなければいけないので、NOT INを使った以下の内容が書きやすいかと思いました。(指定するUserIDの箇所は、実際にはIDを入れています)
SELECT LoginTime, UserId FROM LoginHistory WHERE UserId NOT IN ('xxxxxxxxxx1','xxxxxxxxxx2','xxxxxxxxxx3')
Salesforceの開発者コンソール環境では、以下のようにデータが取得できていることがわかります。 しかしAlteryxだと、データの結果は取得できますが JSON形式になって返ってきてしまいました。
データ加工が手間となってしまう
JSON形式で返ってきてしまうと、別のファイルやデータベースから取得したデータとすぐに結合したいと言ったケースなどに、そのまま対応ができなくなります。一手間データ加工が必要になってしまうからです。たとえ結合が可能なIDのデータが以下のように存在していたとしても
結合ツールを利用すると、以下のようになってしまい結合ができません。
このようになると、JSONパースツールを利用するなどが必要になってくるので、ちょっとしたデータの閲覧でも作業時間が増えてしまいます。
どうやったか?
別のSOQLクエリ文を利用してみた
同僚に相談してみたところ、別のSOQLクエリを使ったらこの問題が解決されました。先程のNOT INを利用するのではなく、
SELECT LoginTime, UserId FROM LoginHistory WHERE NOT (UserId = 'xxxxxxxxxx1' OR UserId = 'xxxxxxxxxx2' OR UserId = 'xxxxxxxxxx3')
のようにするとJSON形式にならず、データを取得できました。
終わりに
結果的に同じ内容のデータの取得だったとしても、記述によってAlteryxの挙動が変わることが分かったので、また似たようなケースがあれば紹介していきたいと思います。
どなたかのお役に立てば幸いです。