【Alteryx】Salesforce Inputのカスタムクエリに手こずった話

2022.05.02

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

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パースツールを利用するなどが必要になってくるので、ちょっとしたデータの閲覧でも作業時間が増えてしまいます。

AlteryxでJSONファイルを入力として扱うときの挙動

どうやったか?

別のSOQLクエリ文を利用してみた

同僚に相談してみたところ、別のSOQLクエリを使ったらこの問題が解決されました。先程のNOT INを利用するのではなく、

SELECT LoginTime, UserId FROM LoginHistory WHERE NOT
(UserId = 'xxxxxxxxxx1' OR 
 UserId = 'xxxxxxxxxx2' OR  
 UserId = 'xxxxxxxxxx3')

のようにするとJSON形式にならず、データを取得できました。

終わりに

結果的に同じ内容のデータの取得だったとしても、記述によってAlteryxの挙動が変わることが分かったので、また似たようなケースがあれば紹介していきたいと思います。

どなたかのお役に立てば幸いです。