4.4. ボックス式の DMN デシジョンロジック
DMN のボックス式は、意思決定要件ダイアグラム (DRD) でデシジョンノードおよびビジネスナレッジモデルの基盤ロジックを定義するのに使用するテーブルです。ボックス式には他のボックス式が含まれる場合がありますが、トップレベルのボックス式は単一の DRD アーティファクトのデシジョンロジックに対応します。DRD は DMN デシジョンモデルのフローを表現し、ボックス式は個別ノードの実際のデシジョンロジックを定義します。DRD とボックス式は、完全で機能的な DMN デシジョンモデルを形成します。
以下は、DMN のボックス式の種類です。
- デシジョンテーブル
- リテラル式
- コンテキスト
- 関係
- 関数
- 呼び出し
- リスト
Red Hat Decision Manager では、Business Central にボックスリスト式が含まれていませんが、FEEL の list
のデータ型が含まれているためボックスリテラル式で使用できます。Red Hat Decision Manager の list
データ型およびその他の FEEL データ型の詳細については、以「FEEL のデータ型」 参照してください。
ボックス式で使用する Friendly Enough Expression Language (FEEL) 式はすべて、OMG の Decision Model and Notation specification に記載されている FEEL 構文の要件に準拠する必要があります。
4.4.1. DMN デシジョンテーブル
DMN のデシジョンテーブルは、1 つ以上のビジネスルールをテーブル形式で視覚的に表します。デシジョンテーブルを使用して、デシジョンモデルの特定の地点でこれらのルールを適用するデシジョンノードのルールを定義します。テーブルの各行はルール 1 つで設定されており、その特定行に対する条件 (入力) と結果 (出力) を定義する列が含まれます。各行の定義は、条件の値を使用して結果を取得できるほど正確です。入力と出力の値には、FEEL 式または定義済みのデータ型の値を指定できます。
たとえば、以下のデシジョンテーブルでは、ローン申請者のクレジットスコアの定義範囲に基づき、クレジットスコアを評価します。
図4.3 クレジットスコア評価のデシジョンテーブル
以下のデシジョンテーブルでは、申請者の借り入れ資格や Berueu Call Type に従い、申請者の融資戦略における次のステップを決定します。
図4.4 融資戦略のデシジョンテーブル
以下のデシジョンテーブルでは、ローン事前審査のデシジョンモデルで終端デシジョンノードとして、申請者のローン適正を決定します。
図4.5 ローン事前審査のデシジョンテーブル
デシジョンテーブルは、ルールとデシジョンロジックのモデル化の方法として一般的で、多くの方法論 (DMN など) や実装フレームワーク (Drools など) で使用されます。
Red Hat Decision Manager は DMN デシジョンテーブルおよび Drools ネイティブのデシジョンテーブルの両方をサポートしますが、アセットのタイプが異なると構文の要件も異なり、それぞれを置き換えて使用できません。Red Hat Decision Manager の Drools ネイティブのデシジョンテーブルに関する情報は、スプレッドシートのデシジョンテーブルを使用したデシジョンサービスの設計 を参照してください。
4.4.1.1. DMN デシジョンテーブルのヒットポリシー
ヒットポリシーは、デシジョンテーブルにある複数のルールが指定の入力値と一致する場合に、どのように結果に到達するかを決定します。たとえば、デシジョンテーブルの中の 1 つのルールでは、軍人に価格の割引を適用し、別のルールでは学生に割引を適用する場合に、学生であり軍人である顧客には、デシジョンテーブルのヒットポリシーに割引を 1 つだけ適用するのか (Unique、First) または両方の割引を適用するのか (Collect Sum) 指定しておく必要があります。ヒットポリシーの 1 文字 (U、F、C+) をデシジョンテーブルの左上隅に指定します。
DMN では、以下のデシジョンテーブルのヒットポリシーがサポートされます。
- Unique (U): 一致するルールを 1 つだけ許可します。重複はエラーとなります。
- Any (A): 複数のルールが一致するのを許可しますが、出力は同じである必要があります。一致している複数のルールで出力が同じでないと、エラーが発生します。
- Priority (P): 複数のルールが一致し、結果が異なるのを許可します。出力値リストで最初に出力されるものが選択されます。
- First (F): ルールの順番に従い、最初に一致するのを使用します。
Collect (C+、C>、C<、C#): 集約関数に基づいて、複数のルールから出力を集めます。
- Collect ( C ): 任意のリストで値を集めます。
- Collect Sum (C+): 集計したすべての値の合計を出力します。値は数値でなければなりません。
- Collect Min (C<): 一致する中で最小の値を出力します。結果の値は、数値、日付、またはテキスト (辞書的順序) など、比較可能な値である必要があります。
- Collect Max (C>): 一致する中で最高の値を出力します。結果の値は、数値、日付、またはテキスト (辞書的順序) など、比較可能な値である必要があります。
- Collect Count (C#): 一致するルールの数を出力します。