ルックアップクエリを使用して価格ルールを統合する
学習の目的
この単元を完了すると、次のことができるようになります。
- 同じような価格要件がどのようにルールの急増につながるかを説明する。
- 価格設定のバリエーションデータを格納するカスタムオブジェクトの構造について説明する。
- ルックアップクエリを使用して価格ルールを作成し、カスタムオブジェクト内の関連データを特定する。
- ルックアップベースの価格ルールの重要な要件を説明する。
ルールの急増に関する問題
このモジュールで最初に作成した価格ルールの目的は、非常に単純明快でした。取引先業種が「教育」で、かつ商品が「ネットブック」かどうかを確認し、そうである場合は、リスト価格を 400 ドルに変更しました。
これは適切なルールですが、ヘルスケア業界にネットブック商品に対する同様の (ただし、異なる) 割引価格を提供したい場合、実行すべきことを考えてみましょう。ヘルスケア業界に適した新しい条件で別のルールを作成することになります。これはさほど大変な作業ではありません。ただし、今回は NetbookPro という 2 つ目の商品があり、教育業界とヘルスケア業界の両方に価格調整が必要だとします。これで、4 つのルールが必要になりました。
このユースケースでは、新しい商品や業種が増えるごとに、すべての例外を処理するために必要なルールの数も増えていきます。システム管理者は、おそらくルール作成にすべての時間を費やすことは避けたいはずです。幸い、このような状況にはより適切なソリューションがあります。
ほぼ同じことを行う 4 つ、8 つ、または 16 のルールを設定するのではなく、すべてのバリエーションを処理する 1 つのルールを作成できます。コツは、このようなバリエーションをカスタムオブジェクトにカタログ化し、そのオブジェクトを照会して、現在の見積に対する特定のバリエーションを処理する方法を見つけることです。
教育/ネットブックのシナリオを想像してください。ただし、顧客のサービスレベル契約を組み込むレイヤーが追加され、これにはブロンズ、シルバー、ゴールド、プラチナを設定できます。すべての考えられるバリエーションをそれぞれの価格と共に、次に示します。
業種 | 商品 | SLA | 価格 |
---|---|---|---|
教育 | Netbook | ブロンズ | 490 |
教育 | Netbook | シルバー | 475 |
教育 | Netbook | ゴールド | 430 |
教育 | Netbook | プラチナ | 400 |
教育 | NetbookPro | ブロンズ | 590 |
教育 | NetbookPro | シルバー | 575 |
教育 | NetbookPro | ゴールド | 530 |
教育 | NetbookPro | プラチナ | 500 |
ヘルスケア | Netbook | ブロンズ | 495 |
ヘルスケア | Netbook | シルバー | 475 |
ヘルスケア | Netbook | ゴールド | 435 |
ヘルスケア | Netbook | プラチナ | 415 |
ヘルスケア | NetbookPro | ブロンズ | 595 |
ヘルスケア | NetbookPro | シルバー | 575 |
ヘルスケア | NetbookPro | ゴールド | 535 |
ヘルスケア | NetbookPro | プラチナ | 515 |
1 つの価格ルールを作成する最初の手順は、このデータをカスタムオブジェクトとして Salesforce に取り込むことです。この演習を簡略化するために、Trailhead チームによって、このデータは CPQ が有効になっている組織にすでに事前入力されています。また、この演習では、業種価格オブジェクトを参照する選択リスト値が表示されます。この値は事前に選択リストに追加されているため、各自で追加する必要はありません。ただし、実際の作業では、各自でその部分を行う必要があります。カスタムオブジェクトの作成に慣れていない場合は、時間を割く価値がありますので、「データモデリング」バッジを参照してください。
[Industry Prices (業種価格)] タブの [All (すべて)] リストビューを選択すると、価格設定データは次のようになります。
よく見ると、レコード名とは別に、各項目表示ラベルが「Industry Price」の「IP」で始まっていることがわかります。実際の作業では、このようなプレフィックスを追加する必要はありません。後で項目を参照するときに、何を表しているのかが具体的にわかるように付加されているにすぎません。
価格設定データがどのようなものであるべきか、またどこで確認するべきかがわかったところで、このデータを価格ルールで使い始めましょう。
カスタムデータを利用する
16 のすべてのバリエーションを処理するために作成する価格ルールは、すでに作成したルールとよく似ています。他のルールと同じように、まず価格ルールレコードを作成します。
- ナビゲーションバーで、[Price Rules (価格ルール)] をクリックします。
- [New (新規)] をクリックします。
- [Price Rule Name (価格ルール名)] に
Lookup Netbook Price
(ネットブック価格を参照) と入力します。 - [Evaluation Scope (評価範囲)] で [Calculator (計算機能)] を選択します。
- [有効] チェックボックスをオンにします。
- [Lookup Object (参照オブジェクト)] で [IndustryPrice__c] を選択します。
これは、上記のテーブルの価格設定データをすべて格納するオブジェクトの API 参照名です。ここで参照オブジェクトを選択すると、残りのルールを作成するときにその項目を参照できるようになります。 - [Save (保存)] をクリックします。
これで、IndustryPrice__c にこの価格ルールを適用するためのデータが保持されていることが CPQ で認識されるようになりました。次の課題は、CPQ で適切なデータを適切なタイミングで使用できるようにすることです。各見積には、それぞれ次のような固有の一連の状況があります。販売先は教育機関の顧客か、またはヘルスケアの顧客か? 顧客が希望する商品は Netbook なのか、NetbookPro なのか? 顧客の SLA は何か?
このような質問の答えを使用してデータを 1 行に絞り込むことで、リスト価格に使用する価格を 1 つのみにします。たとえば、「教育」顧客に販売する場合、テーブルの下半分は無視できます。顧客が NetbookPro を希望している場合は、残りの行の最初の 4 行を無視できます。最後に、SLA がブロンズである場合は、該当する価格が 5 行目に記載されていることがわかります。
ルックアップクエリと呼ばれる機能を作成することで、データの絞り込み方法を CPQ に指示します。各クエリでは、見積に関する一意の情報 (取引先業種など) がカスタムオブジェクトのいずれかの列と比較されます。それがどのようなものか見てみましょう。
- [Lookup Queries (Price Rule) (ルックアップクエリ (価格ルール))] 関連リストで、[New (新規)] をクリックします。
- [Match Type (一致種別)] で [Field Value (項目値)] を選択します。
ほとんどのクエリでは項目値が使用されます。この項目によって、取引先業種のような項目とテーブル内の値が比較される予定であることが CPQ に伝えられます。静的値や設定属性をテーブルの値と比較する場合は、他の一致項目を使用します。 - [Tested Object (テスト対象オブジェクト)] で [Quote (見積)] を選択します。
- [Tested Field (テスト対象項目)] で [AccountIndustry__c] を選択します。
これで、カスタムオブジェクト内のデータから見つけるべき情報が CPQ で認識されるようになりました。次は、カスタムオブジェクトのどの列を取引先業種と照合すべきかを CPQ に指示する必要があります。 - [Operator (演算子)] で、[equals (次の文字列と一致する)] を選択します。
- [Lookup Field (参照項目)] で [IPIndustry__c] を選択します。
これにより、カスタムオブジェクトから項目が識別されます。テスト対象項目とよく似た参照項目を選択したのは、意図的な手順です。 - [Save (保存)] をクリックします。
これで、ルックアップクエリについて 3 分の 1 が完了しました。使用するルックアップクエリがこれ 1 つのみだと、8 つの一致する行が見つかり、不適切な結果になってしまいます。これでは、どの価格が正しいのか CPQ で認識することはできません。そのため、商品で絞り込んで 8 行を 4 行に減らしましょう。
- [Lookup Queries (Price Rule) (ルックアップクエリ (価格ルール))] 関連リストで、[New (新規)] をクリックします。
- [Match Type (一致種別)] で [Field Value (項目値)] を選択します。
- [Tested Object (テスト対象オブジェクト)] で [Quote Line (見積品目)] を選択します。
- [Tested Field (テスト対象項目)] で [SBQQ__Product__c] を選択します。
すべての見積品目は商品レコードに関連しており、非常に役立ちます。というのも、カスタムオブジェクトの各行にも商品レコードへの参照があるためです。これにより、両方が一致していることを確認できます。 - [Operator (演算子)] で、[equals (次の文字列と一致する)] を選択します。
- [Lookup Field (参照項目)] で [IPProduct__c] を選択します。
- [Save (保存)] をクリックします。
あともう少しです。この 2 つの検索条件を設定することにより、SLA 値ごとに 1 つずつ、合計 4 つの一致するレコードが見つかります。では、この残りの 4 つのレコードを 1 つに減らすために、最後のクエリを設定しましょう。
- [Lookup Queries (Price Rule) (ルックアップクエリ (価格ルール))] 関連リストで、[New (新規)] をクリックします。
- [Match Type (一致種別)] で [Field Value (項目値)] を選択します。
- [Tested Object (テスト対象オブジェクト)] で [Quote (見積)] を選択します。
- [Tested Field (テスト対象項目)] で [AccountSLA__c] を選択します。
これは、関連取引先レコードから値を取得するカスタム数式項目です。CPQ では、取引先オブジェクトの項目を直接照会できないため、数式項目を介して照会する必要があります。 - [Operator (演算子)] で、[equals (次の文字列と一致する)] を選択します。
- [Lookup Field (参照項目)] で [IPSLA__c] を選択します。
- [Save (保存)] をクリックします。
IPIndustry__c、IPProduct__c、IPSLA__c のクエリを作成できました。これで、カスタムデータから 1 行のみが返されるようになります。重要なのは、ルックアップクエリの組み合わせで複数行が決して返されないことです。複数行が返されると、見積項目エディターにエラーメッセージが表示され、計算が失敗し、致命的な問題になります。
クエリで行がまったく返されなくても問題ありません。CPQ ではリスト価格の更新は行われません。つまり、カスタムオブジェクトですべての業種を表現する必要がないということであるため、安心してください。
では、このルールを設定する最後の手順に取りかかりましょう。価格アクションを作成する必要があります。
- [Price Actions (価格アクション)] 関連リストで、[New (新規)] をクリックします。
- [Target Object (対象オブジェクト)] で [Quote Line (見積品目)] を選択します。
- [Target Field (対象項目)] で [SBQQ__ListPrice__c] を選択します。
- [Source Lookup Field (ソース参照項目)] で [IPPrice__c] を選択します。
これは、リスト価格として設定したい実際の価格を格納するカスタムオブジェクトの項目です。 - [Save (保存)] をクリックします。
ようやく完成しました。完全に機能するルックアップ価格ルールを使用できるようになりました。これで、すべての作業が報われます。では、NetbookPro を見積に追加し、カスタムデータに基づいた価格が取得されるか確認してみましょう。
- ナビゲーションバーで、[Accounts (取引先)] をクリックし、[All Accounts (すべての取引先)] 関連リストを選択します。
-
[Milwaukee Distributed Health] をクリックします。
[Industry (業種)] が [Healthcare (ヘルスケア)] であり、[SLA] が [Gold (ゴールド)] であることに注意してください。 - [Related (関連)] タブをクリックします。
- [Quotes (見積)] 関連リストで [Q-00052] をクリックします。
- [Edit Lines (品目の編集)] をクリックします。
- [Add Products (商品を追加)] をクリックします。
- [NetbookPro] チェックボックスをオンにします。
-
[Select (選択)] をクリックします。
NetbookPro が見積に追加されると、すぐに CPQ によって価格ルールが実行されました。リスト単価は 535 ドルである必要があります。これは、まさに Healthcare (ヘルスケア)/NetbookPro/Gold (ゴールド) 行の価格です。とても良くできました。 - [キャンセル] をクリックします。
ルックアップベースの価格ルールを作成するのは少し手間がかかる作業ですが、16 のルールを作成するよりははるかに簡単です。メンテナンスも簡単です。同じような価格調整が必要な商品や業種が増えても、業種価格オブジェクトにレコードを追加するだけで済みます。
ほぼ同じようなルールに注意してください。1 つのルックアップベースの価格ルールに統合できるかもしれません。次の単元では、複数の価格ルールが互いに競合したり、標準の見積計算機能と競合したりしないように価格ルールを調整する方法を学びます。