投影フレームワーク
このページの翻訳はAIによって自動的に行われました。可能な限り正確な翻訳を心掛けていますが、原文と異なる表現や解釈が含まれる場合があります。正確で公式な情報については、必ず英語の原文をご参照ください。
プロジェクションフレームワークは、ソースデータを表形式に変換する流暢なAPIであり、キーでデータをグループ化する機能も含まれています。プロジェクションフレームワークはプロジェクションワーカーの文脈で利用可能で、デフォルトでプロジェクションデータをCortex処理ストレージデータベースに保存します。
鍵、属性、そして指標
投影には少なくとも1つのキー、オプション属性、オプションの指標が含まれます。
- キーは行を一意に識別し、ソースデータのグループ化方法を決定します。複合キーもサポートされています。ソースデータが連絡先のリストであると仮定すると、キーの例は以下の通りです:
- 連絡先ID。このキーは連絡先ごとに一意であり、結果として得られる行はグループ化されません。
- 職種名と生年の組み合わせです。このキーは連絡先ごとに一意であることはおそらくなく、結果として行はグループ化されます。
- 属性 はキー に関する追加データを表します:
- キーがコンタクトIDであれば、そのコンタクトの総エンゲージメント値を属性として出力することができます。
- キーは職種名と生年の組み合わせなので、平均初任給を属性として返すメソッドを呼び出すこともできます。
- 指標とは、計算が可能なキーの特性です。指標は、予測がソースデータセットを縮小した場合にのみ意味を持ちます。例えば、職種ごとにグループ化された40件の連絡先のソースリストは6行になることがあります。この場合、次のようになることがあります:
- .Measure("Count", x => 1)を使って、各職種名を持つ連絡先の数を返してください。
- .Measure("YearsOfExperience", c => c.CareerFacet().YearsOfExperience)を使って、各職種の連絡先が示す総経験年数を返します。
以下のコンタクトプロジェクションの例は、出生年ごとにコンタクトをグループ化し、指標と属性を含みます。
// Syntax example only Projection = Engine.Projection.Projection.Of<XConnect.Contact>().CreateTabular( nameof(Model1_ContactProjection), Expansion, cfg => cfg .Key("BirthYear", c => c.Personal().Birthdate.Year.ToString()) .Attribute("IsLeapYear", c => DateTime.IsLeapYear(c.Personal().Birthdate.Year)) .Measure("NumberOfContactsInYear", c => 1)
グループ化なしの射影
以下のサンプル投影は、連絡先IDで行をグループ化し、各連絡先の職種名と識別子数を出力します。
// Syntax example only
Projection = Engine.Projection.Projection.Of
3つの接点からなるサンプルセットは以下の出力を得ます。
連絡先ID
識別子カウント
職種
A3102A8C-ED77-492B-B447-4B6A0DF3C412
3
プログラマー・ライター
C35556DA-17DC-476A-98D5-56DF981E4529
2
開発者
0600F5a2-4491-491e-b568-be09a8d801fe
5
ジュニア開発者
この例では一意の接点IDをキーとして使用しており、データセットは縮小されていません。ソースデータセット内の接点数と、予測テーブル内の行数との間には1対1の関係があります。このようなシナリオでは:
- Measure()は使わないでください。ソースデータセット内のすべての接点IDは一意であり、データセット自体が削減されることはありません。Measureを使うと不要なパフォーマンスオーバーヘッドが生じます。
!警告プロジェクションに連絡先IDを含める際は注意してください。連絡先IDはxDB内の連絡先を一意に識別し、連絡先が忘れられる権利を行使しても削除されません。また、xDBの外に永続化してはいけません。投影データは設定可能な間隔でCortex処理ストレージデータベースから削除されます。
グループ化による射影
以下のサンプル予測は、接触者、出生年、職種ごとに行をグループ化し、各行のカウントを出力します。
// Syntax example only Projection = Engine.Projection.Projection.Of<XConnect.Contact>().CreateTabular( nameof(Model1_ContactProjection), Expansion, cfg => cfg .Key("BirthYear", c => c.Personal().Birthdate.Year.ToString()) .Key("JobTitle", c => c.Personal().JobTitle) .Measure("YearsExperience", c=> c.CareerInfo().YearsExperience) // Sample facet; int .Measure("Count", x => 1));
4つの生年と3つの職種名にまたがる17件のコンタクトのサンプルセットは、以下の出力を得られます。
生年
職種
伯爵
経験年数
1987
プログラマー・ライター
1
10
1987
開発者
5
50
1972
開発者
10
92
1990
ジュニア開発者
1
3
この例は、連絡先の出生年と職種からなる複合キーを使用し、データセットは縮小されています。このようなシナリオでは:
- Measure()を必ずご利用ください。この例には以下が含まれます:
- 各グループ内の接触者数の合計です。
- グループが代表する総職歴年数。