Salesforce.com を SQL Server と統合するために DBAmp を使用し (基本的にはリンク サーバーを追加します)、OPENQUERY を使用して SF データに対してクエリを実行しています。
商談に対してレポートを作成しようとしていますが、商談の作成日を商談所有者の現地日時 (つまり、ユーザーが Salesforce で表示する日時) で返したいと考えています。
私たちの dbamp 構成は、日付を強制的に UTC にします。
参考になるかもしれない日付関数 (Salesforce のドキュメント) を偶然見つけましたが、使用しようとするとエラーが発生するため、それを証明できません。convertTimezone 関数の使用例を以下に示します。
SELECT HOUR_IN_DAY(convertTimezone(CreatedDate)), SUM(Amount)
FROM Opportunity
GROUP BY HOUR_IN_DAY(convertTimezone(CreatedDate))
以下は、返されたエラーです。
リンク サーバー "SALESFORCE" の OLE DB プロバイダー "DBAmp.DBAmp" は、メッセージ "エラー 13005: SQL ステートメントの変換エラー: 行 1:37: "from" を期待していますが、"(" が見つかりました。 メッセージ 7350、レベル 16、状態 2、行 1 リンク サーバー "SALESFORCE" の OLE DB プロバイダー "DBAmp.DBAmp" から列情報を取得できません。
以下のように OPENQUERY で SOQL 関数を使用することはできませんか?
SELECT
*
FROM
OPENQUERY(SALESFORCE,'
SELECT HOUR_IN_DAY(convertTimezone(CreatedDate)), SUM(Amount)
FROM Opportunity
GROUP BY HOUR_IN_DAY(convertTimezone(CreatedDate))')
アップデート:
Bill Emerson と連絡を取りました (彼は DBAmp Integration Tool の作成者だと思います)。
SOQL 関数を使用できるはずなので、解析に失敗する理由がわかりません。テストケースをセットアップして報告します。
返事が来たらまた記事を更新します。ありがとう