プロジェクションフレームワーク

Version:
日本語翻訳に関する免責事項

このページの翻訳はAIによって自動的に行われました。可能な限り正確な翻訳を心掛けていますが、原文と異なる表現や解釈が含まれる場合があります。正確で公式な情報については、必ず英語の原文をご参照ください。

プロジェクション フレームワークは、ソース データを表形式に変換するfluent APIであり、キーでデータをグループ化する機能も含まれています。プロジェクション フレームワークは、プロジェクション ワーカーのコンテキストで使用でき、プロジェクションされたデータはデフォルトでCortex Processing Storageデータベースに保存されます。

キー、属性、メジャー

プロジェクションには、少なくとも1つのキー、オプションの属性、およびオプションのメジャーが含まれます。

  • keyは、行を一意に識別し、ソース データのグループ化方法を決定します。複合キーがサポートされています。 ソースデータが連絡先のリストであると仮定すると、キーの例は次のとおりです。

    • 連絡先ID。 このキーは連絡先ごとに一意であり、結果の行はグループ化されません。

    • 役職と生年月日の組み合わせ。このキーは連絡先ごとに一意である可能性は低く、結果の行はグループ化されます。

  • attributeは、キーに関する追加データを表します。

    • キーが連絡先IDであることを考えると、その連絡先の合計エンゲージメント値を属性として出力できます。

    • キーが役職と生年月日の組み合わせである場合、平均初任給を属性として返すメソッドを呼び出すことができます。

  • measureは、計算を行うことができるキーのプロパティです。メジャーは、プロジェクションによってソース データ セットが削減される場合にのみ関連します。たとえば、役職別にグループ化された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<Contact>().CreateTabular(
    nameof(ProjectionOnlyModel),
    cfg => cfg
        .Key("ContactID", c => c.Id)
        .Attribute("IdentifierCount", c => c.Identifiers.Count)
        .Attribute("JobTitle", c=> c.Personal().JobTitle));

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 Processing Storageデータベースから削除されます。

グループ化によるプロジェクション

次のサンプル プロジェクションでは、取引先担当者の出生年と役職で行をグループ化し、各行のカウントを出力します。

// 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()を使用してください。この例には、次のものが含まれます。

    • 各グループ内の連絡先の数の合計。

    • グループによって表される実務経験の合計年数。

この記事を改善するための提案がある場合は、 お知らせください!