Skip to main content

複雑なSQLを含むクエリー

シナリオ

レポートディフィニッションでサポートされていないデータを照会する方法がいくつかあります。 たとえば、BookingアプリケーションソリューションのFSGエンタープライズレイヤーで使用されているHaversine式です。 クエリーは、FSG-Data-Address HaversineFormula Connect-SQLルールの「Browse 」タブにあります。

haveshine
Haversine式は、緯度と経度を与えることにより球体上の2点間の大圏距離を特定するものです。 ナビゲーションに重要なHaversineの公式は、球面三角法の特別なケースで、球面三角形の辺と角度を関連付けます。

ソリューション設計

SELECT pyGUID AS "pyGUID",

Reference AS "Reference", IsFor AS "IsFor", Street AS "Street", City AS "City", State AS "State", PostalCode AS "PostalCode", Country AS "Country", Latitude AS "Latitude", Longitude AS "Longitude", Distance AS "Distance"

FROM

( SELECT z.pyguid AS pyGUID, z.reference AS Reference, z.isfor AS IsFor, z.street AS Street, z.city AS City, z.state AS State, z.postalcode AS PostalCode, z.country AS Country, z.latitude AS Latitude, z.longitude AS Longitude, p.radius, p.distanceunit * DEGREES(ACOS(COS(RADIANS(p.latpoint)) * COS(RADIANS(z.latitude)) * COS(RADIANS(p.longpoint - z.longitude)) + SIN(RADIANS(p.latpoint)) * SIN(RADIANS(z.latitude)))) AS Distance FROM {Class:FSG-Data-Address} AS z

JOIN ( /* these are the query parameters * SELECT {AddressPage.Latitude Decimal } AS latpoint, {AddressPage.Longitude Decimal } AS longpoint, {AddressPage.Distance Decimal } AS radius, {AddressPage.pyNote Decimal } AS distanceunit, {AddressPage.IsFor } AS isfor ) AS p ON p.isfor = z.isfor)

AS d WHERE distance <= radius ORDER BY distance LIMIT 15

D_AddressesWithinDistanceデータページのソースを取得するCode-Pega-List Connect_SQL_pr_fsg_data_addressアクティビティ内のRDB-Listステップに注意してください。

このタイプのクエリには2つのFROM句SELECT(1つは「z」、もう1つは「d」)があるため、レポートディフィニッションを使用して定義することはできません。レポートディフィニッションとは異なり、Connect SQLルールには、パラメーター値が空であることに基づいてフィルター条件をダイナミックに変更する機能はありません。 レポートディフィニッションが、パラメーターに値がない場合に「is null」を生成するよう構成されている場合を除き、Pegaはフィルター条件を無視します。これは、返される行数に制限がない限り、リスクが高くなる場合もあります。

HaversineFormulaクエリー内では、フィルター条件を生成する必要はありません。 IsFor列(現在は「HOTEL」または「VENUE」のいずれか)を除くすべてのクエリーパラメーターに値が入力されない限り、クエリーを実行しても意味がありません。

Connect-SQLルールを使用すると、列名がエイリアスとして返されない場合があるため、注意が必要です。 たとえば、小文字の郵便番号列をキャメルケースのPostalCodeにエイリアス化しても、Postgresデータベースに存在するのと同じように列名はすべて小文字で返されます。 

PostgreSQLでは、引用符で囲まれていない名前は大文字小文字を区別しません。たとえば、Select Street as STREETをSTREET、Select Street as Street、Select Street as streetのいずれにしても、列名は「street」となります。列名を「Street」としたいのであれば、「Select Street as “Street”」のように、列を引用符で囲む必要があります。


このトピックは、下記のモジュールにも含まれています。

If you are having problems with your training, please review the Pega Academy Support FAQs.

このコンテンツは役に立ちましたか?

改善できるところはありますか?

We'd prefer it if you saw us at our best.

Pega Academy has detected you are using a browser which may prevent you from experiencing the site as intended. To improve your experience, please update your browser.

Close Deprecation Notice