1. インタラクションの集約

チュートリアル: 新しいディメンションに関するレポート

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

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

Sitecoreには、レポートするディメンションが多数あります。Sitecoreがレポートしないディメンションについてレポートする場合は、独自のディメンションを作成し、そのメトリクスを収集できます。

メモ

このトピックでは、Sitecore 9以降でディメンション ( flexible dimensionsとも呼ばれます) を実装する方法について説明します。

このチュートリアルでは、次の方法について説明します。

  • ディメンションとメトリックのクラスの作成 - ディメンションを表すクラスを作成し、メトリックの計算を行います。

  • レポーティングデータベースの更新 - レポーティングデータベースを更新して、ディメンションデータをそこに保存します。

  • ディメンションとメトリクスのアイテムを作成する - ディメンションとそのメトリクスを表すSitecoreアイテムを作成します。

  • 新しいディメンションを設定する - Sitecoreが使用するようにディメンションを設定します。

新しいディメンションを作成して設定したら、データを表示するグラフを追加できます

ディメンションとメトリクスのクラスを作成する

次の手順では、新しいディメンションを実装してメトリクスを計算するクラスを作成する方法を示します。

参照を追加する

これらのライブラリへの参照をVisual Studioソリューションに追加します。

Sitecore.Analytics.Aggregation
Sitecore.ExperienceAnalytics.Aggregation
Sitecore.XConnect
Sitecore.Kernel
Sitecore.XConnect.Collection.Model

モデルの定義

ディメンションと指標のモデルを作成するには:

  1. DictionaryValueクラスとIMergeableMetric<TableName> インターフェイスを拡張するクラスを作成します。これらのクラスの命名規則は、PostCodeMetricsOutcomeMetricsなど、<YourDimension>Metricsです。

  2. メトリクスのプロパティ ( VisitsMonetaryValueなど) を定義します。

  3. MergeWithメソッドを実装します。この方法では、新しいインタラクションに対して計算されるデータを既存の計算データにマージする方法を指定します。

次の例は、エンゲージメント値と訪問のバウンスを収集するBrowserというディメンションの実装を示しています。

class BrowserMetrics : DictionaryValue, IMergeableMetric<BrowserMetrics>
    {
        public int Visits { get; set; }
        public int EngagementValue { get; set; }
        public int Bounces { get; set; }


        public T MergeWith<T>(T other) where T : BrowserMetrics, new()
        {
            if (other == null)
            {
                throw new ArgumentNullException(nameof(other));
            }

            return new T
            {
                Visits = Visits + other.Visits,
                Bounces = Bounces + other.Bounces,
                EngagementValue = other.EngagementValue
            };
        }
    }
手記

クラスの名前とメトリック・プロパティーは、データベース・スキーマを定義する後のタスクで使用します。

グループリゾルバーの作成

ディメンションのグループ化に使用されるキー ( URLGoalOutcomeなど) を解決するための戦略を定義する必要があります。これを行うには、グループ リゾルバーを実装します。

グループリゾルバを作成するには:

  1. IGroupResolver<T> インターフェイスを拡張する新しいクラスを作成します。ここで、ディメンションのレコードをグループ化するときにキーとして使用する型オブジェクトがTです。

  2. MeasureGroupOccurrencesメソッドを実装します。

次の例では、Browserのメトリクスを測定するため、BrowserDataタイプを使用してグループを解決します。

class BrowserResolver : IGroupResolver<BrowserData>
    {
        public IEnumerable<VisitGroupMeasurement<BrowserData>> MeasureGroupOccurrences(IInteractionAggregationContext context)
        {
            if (context == null)
            {
                throw new ArgumentNullException(nameof(context));
            }

            var browserData = context.Interaction.WebVisit()?.Browser; 
            var occurrences = new List<VisitGroupMeasurement<BrowserData>>();

            if (browserData != null)
            {
                var serializedBrowserDataKey = JsonConvert.SerializeObject(browserData, new JsonSerializerSettings
                {
                    TypeNameHandling = TypeNameHandling.All
                });

                occurrences.Add(new VisitGroupMeasurement<BrowserData>(new VisitGroup(serializedBrowserDataKey), new[] { browserData }));
                return occurrences;
            }

            return occurrences;
        }
    }

BrowserData JSONが大きすぎてメトリックのキーとして使用できない可能性があり、不要な情報が多数含まれています。キーとして正しい情報を使用するには、キーリゾルバーを使用する必要があります。

キーリゾルバを作成するには:

  • IVisitGroupKeyResolver<String>インターフェースを拡張するクラスを作成します。

    class BrowserKeyResolver: IVisitGroupKeyResolver<string>
        {
            public IEnumerable<string> GetKeys(IVisitGroup visitGroup)
            {
                if (visitGroup == null)
                {
                    throw new ArgumentNullException(nameof(visitGroup));
                }
    
                var browserDataKey = JsonConvert.DeserializeObject<BrowserData>(visitGroup.Id, new JsonSerializerSettings
                {
                    TypeNameHandling = TypeNameHandling.All
                });
    
                return new List<string>
                {
                    browserDataKey.BrowserMinorName}
                };
            }
        }
    手記

    VisitGroup IDにGuidまたはstringを使用すると、BrowserKeyResolverオプションになります。

ファクト計算機を作成する

ファクト計算機を作成する必要があります。これは、このディメンションのモデルで定義された個々のメトリクスの値(ページビュー数、直帰率など)を計算するクラスです。

ファクト計算機を作成するには:

  1. IFactCalculator<out TValue, TGroup> インターフェイスを拡張するクラスを作成します。ここで、は最初に作成したクラスの型TValue、作成したクラスのグループ型TGroup IGroupResolverクラスです。

  2. CalculateFactsForGroupメソッドを実装します。この方法では、特定のグループの個々のメトリックが計算されます。

次の例では、合計エンゲージメント値、訪問回数、訪問中に発生したバウンスを測定します。

class BrowserFactCalculator : IFactCalculator<BrowserMetrics, BrowserData>
    {
        public BrowserMetrics CalculateFactsForGroup(VisitGroupMeasurement<BrowserData> groupMeasurement, IInteractionAggregationContext context)
        {
            if (groupMeasurement == null)
            {
                throw new ArgumentNullException(nameof(groupMeasurement));
            }
            if (context == null)
            {
                throw new ArgumentNullException(nameof(context));
            }

            var pageViewEvents = context.Interaction.Events.OfType<PageViewEvent>().ToList();

            return new BrowserMetrics
            {
                Bounces = pageViewEvents.Count == 1 ? 1 : 0,
                EngagementValue = context.Interaction.EngagementValue,
                Visits = 1
            };
        }
    }

親キーリゾルバーを作成する

この手順はオプションです。本質的に階層的な一連のディメンション (たとえば、多くの結果を含む結果グループ) がある場合は、親キーリゾルバーを実装して、階層内の関係を表すことができます。

親キーリゾルバを作成するには:

  • IVisitGroupKeyResolver<GUID> インターフェイスまたはIVisitGroupKeyResolver<String> インターフェイスを拡張するクラスを作成します。

たとえば、ブラウザー グループから特定のバージョンのブラウザーにドリルダウンできるようにするとします。これを行うには、GetKeysメソッドを実装して、ブラウザー グループとそれに関連付けられているグループ キーを解決する必要があります。このメソッドは、ブラウザー グループの親アイテムのGUIDを返します。

class BrowserParentKeyResolver : IVisitGroupKeyResolver<string>
    {
        public IEnumerable<string> GetKeys(IVisitGroup visitGroup)
        {
            if (visitGroup == null)
            {
                throw new ArgumentNullException(nameof(visitGroup));
            }

            var browserDataKey = JsonConvert.DeserializeObject<BrowserData>(visitGroup.Id, new JsonSerializerSettings
            {
                TypeNameHandling = TypeNameHandling.All
            });

            return new List<string>
            {
                browserDataKey.BrowserMajorName
            };
        }
    } 

インタラクションフィルターを作成する

この手順はオプションです。ディメンションにインタラクションフィルターを実装できます。インタラクションフィルターを使用して、イベント、目標、キャンペーン、チャネル、コンタクト、またはダウンロードに基づいて、インタラクションに関連するデータを無視します。たとえば、Webサイトの特定のページをレポートの一部として表示しない場合は、そのページを無視するように指定するフィルタを作成します。

インタラクションフィルターを作成するには:

  • IInteractionFilterインターフェイスを拡張し、KeepInteraction メソッドを実装するクラスを作成します。

次の例では、定義GUIDに基づいて特定のタイプのイベントを持つインタラクションのデータのみが計算されるように、処理を制限します。

class EventFilter : IInteractionFilter
{
  public bool KeepInteraction(Interaction interaction)
  {
     if (interaction.Events.Any(data => ReservedIds.Contains(data.DefinitionId)))
     {
         return true;
     }

     return false;
  }


   internal static readonly Guid[] ReservedIds = 
{ 
// list of guids
};
}

レポートデータベースを更新する

新しいディメンションのデータを保存するには、レポート データベースを更新する必要があります。結果を格納するテーブルを作成し、データを表す型を作成し、テーブルに格納されたデータを操作するためのストアド プロシージャを作成します。

テーブルの作成

SQLでテーブルを作成し、Fact_YourDimensionNameMetricsという規則に従って名前を付けます。ここで、YourDimensionNameはクラスの作成時に使用したディメンション名です。

テーブルを作成するとき、いくつかの列は必須であり、Sitecoreでは必須です。

  • セグメントレコードID

  • セグメントID

  • 日付

  • サイト名ID

  • ディメンションキーID

  • フィルターID

モデル・クラスで定義された各メトリック・プロパティを表す列を作成する必要があり、名前は一致する必要があります。これは、これを行うスクリプトの例です。

CREATE TABLE [dbo].[Fact_BrowserMetrics](
     -- Mandatory Columns
            [SegmentRecordId] [bigint] NOT NULL,
     [SegmentId] [uniqueidentifier] NOT NULL,
     [Date] [smalldatetime] NOT NULL,
     [SiteNameId] [int] NOT NULL,
     [DimensionKeyId] [bigint] NOT NULL,
     [FilterId] [uniqueidentifier] NULL,
            -- Dimension specific metric columns
     [Visits] [int] NOT NULL,
     [EngagementValue] [int] NOT NULL,
     [Bounces] [int] NOT NULL,
CONSTRAINT [PK_Fact_BrowserMetrics_1] PRIMARY KEY CLUSTERED 
     (
     [SegmentRecordId] ASC
     )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
     ) ON [PRIMARY]

型とストアド プロシージャを作成する

型とストアド プロシージャを使用して、テーブル内のデータを操作します。タイプは、テーブルの構造と完全に一致する必要があります。次に例を示します。

CREATE TYPE [dbo].[BrowserMetrics_Type] AS TABLE(
     -- Mandatory Columns
     [SegmentRecordId] [bigint] NOT NULL,
     [SegmentId] [uniqueidentifier] NOT NULL,
     [Date] [smalldatetime] NOT NULL,
     [SiteNameId] [int] NOT NULL,
     [DimensionKeyId] [bigint] NOT NULL,
     [FilterId] [uniqueidentifier] NULL,

     -- Dimension specific metric columns
     [Visits] [int] NOT NULL,
     [EngagementValue] [int] NOT NULL,
     [Bounces] [int] NOT NULL,
     PRIMARY KEY CLUSTERED 
     (
     [SegmentRecordId] ASC
     )WITH (IGNORE_DUP_KEY = OFF)
     )

ストアド・プロシージャは、レコードが存在しない場合はテーブルにレコードを作成するか、既存のレコードに受信値を追加してエラーをキャプチャする必要があります。次に例を示します。

CREATE PROCEDURE [dbo].[Add_BrowserMetrics_Tvp]
       @table [dbo].[BrowserMetrics_Type] READONLY
     AS
     BEGIN
       SET NOCOUNT ON;

       BEGIN TRY

         MERGE [Fact_BrowserMetrics] AS Target USING @table AS Source
         ON 
           Target.[SegmentRecordId] = Source.[SegmentRecordId]
         WHEN MATCHED THEN
           UPDATE SET 
             Target.[Visits] = (Target.[Visits] + Source.[Visits]),
             Target.[EngagementValue] = (Target.[EngagementValue] + Source.[EngagementValue]),
             Target.[Bounces] = (Target.[Bounces] + Source.[Bounces])
         WHEN NOT MATCHED THEN
           INSERT (
     [SegmentRecordId],
     [SegmentId],
     [Date],
     [SiteNameId],
     [DimensionKeyId],
     [FilterId],
     [Visits],
     [EngagementValue],
     [Bounces]
           )
           VALUES (
     Source.[SegmentRecordId],
     Source.[SegmentId],
     Source.[Date],
     Source.[SiteNameId],
     Source.[DimensionKeyId],
     Source.[FilterId],
     Source.[Visits],
     Source.[EngagementValue],
     Source.[Bounces]
     );

       END TRY
       BEGIN CATCH

         DECLARE @error_number INTEGER = ERROR_NUMBER();
         DECLARE @error_severity INTEGER = ERROR_SEVERITY();
         DECLARE @error_state INTEGER = ERROR_STATE();
         DECLARE @error_message NVARCHAR(4000) = ERROR_MESSAGE();
         DECLARE @error_procedure SYSNAME = ERROR_PROCEDURE();
         DECLARE @error_line INTEGER = ERROR_LINE();

         RAISERROR( N'T-SQL ERROR %d, SEVERITY %d, STATE %d, PROCEDURE %s, LINE %d, MESSAGE: %s', @error_severity, 1, @error_number, @error_severity, @error_state, @error_procedure, @error_line, @error_message ) WITH NOWAIT;
       END CATCH;
     END

ディメンションと指標の項目を作成する

次のステップは、ディメンションとメトリクスを表すSitecore定義アイテムを作成することです。これらのアイテムは、新しいレポートを作成するときに使用します。

メトリック項目を作成する

メトリクスアイテムを作成するには:

  1. Content Editorで、Coreデータベース内のFlexibleMetricsフォルダ (sitecore/Client/Applications/ExperienceAnalytics/Common/System/ChartFields/FlexibleMetrics) に移動します。

  2. 新しいディメンションに関連付けられた指標ごとに、「 Home 」タブの「 Insert 」グループで、MetricChartFieldを選択して挿入し、名前を付けます。メトリックは複数のディメンションで共有できるため、フィールドがすでに存在できます。前のセクションの例に従って、EngagementValueカスタム メトリックの定義アイテムを作成する必要があります。

  3. 新しいアイテムを選択し、次のフィールドに値を指定します。

    • AppearanceセクションのHeaderTextフィールドに、新しいメトリクスのわかりやすい名前を入力します。

    • DataBindingセクションのDataFieldフィールドに、作成したテーブルの対応する列の名前(キャメルケース)を入力します。

  4. セーブ。

ディメンション項目の作成と構成

ディメンション項目を作成および設定するには:

  1. Content Editorで、マスターデータベース(Marketing Control Panel/Experience Analytics/Dimensions)のMarketing Control Panel内のDimensionsフォルダーに移動し、フレキシブルディメンション項目を保存するサブフォルダーを選択します。PagesVisitsを選択するか、独自のサブフォルダを作成できます。

  2. HomeタブのInsertグループで、FlexibleDimension項目を選択し、挿入し、名前を付けます。

  3. 新しいアイテムを選択し、次のフィールドに値を指定します。

    • DataセクションのMetric Typeフィールドに、作成したクラスの名前(BrowserMetricsなど)を入力します。

    • Nameフィールドに、わかりやすい名前を入力します。

    • Metricsフィールドで、ディメンションに追加するすべての指標を選択します。

    • セーブ。

セグメント項目の作成

エクスペリエンス分析では、集計時にセグメントを使用してデータを小さなセットにフィルタリングします。データを集約する前に、少なくとも1つのセグメントを指定する必要があります。通常、この目的のためにすべてのインタラクション/訪問セグメントを指定します。 カスタムレポートフィルターを作成すると、セグメント に詳細情報が表示されます。

セグメントを作成するには:

  1. Content Editor/sitecore/System/Marketing Control Panel/Experience Analytics/Dimensionsに移動し、作成したディメンションを選択します。

  2. HomeタブのInsertグループで、Segment項目を選択し、挿入し、名前を付けます。

  3. ReviewタブのWorkflowグループで、Deployをクリックします。デフォルトでは、デプロイの30分後にセグメントのデータ収集が開始されます。

手記

デプロイ後にセグメントを変更しないでください。これを行うと、データの不整合が発生する可能性があります。

新しいディメンションを構成する

新しいディメンションをSitecore設定で指定して、集計中に呼び出す必要があります。

新しいディメンションを設定するには:

  1. 次のようなパッチファイルを作成します。

    <configuration xmlns:patch="http://www.sitecore.net/xmlconfig/">
        <sitecore>
            <experienceAnalytics>
                <aggregation>
                    <flexibleDimensions>
                        <!--Add references to your new dimension here -->
    <dimension id="Guid of your new dimension item" type="Sitecore.ExperienceAnalytics.Aggregation.FlexibleMetrics.Framework.FlexibleDimension`2[[Metrics Class fully qualified name, metrics class assembly name], [Fully qualified name of Group, Assembly name of Group]], Sitecore.ExperienceAnalytics.Aggregation">
    
      <param type="GroupResolver fully qualified name, GroupResolver assembly name" />
    
      <param type="FactCalculator fully qualified name, FactCalculator assembly name"/>
    </dimension>
                    </flexibleDimensions>
                </aggregation>
            </experienceAnalytics>
        </sitecore>
    </configuration>
  2. 必要に応じて、ディメンションにparam要素を追加して、親キーのリゾルバーとフィルターを指定します。

    <dimension >
    
    ...
    
    <param type="Sitecore.ExperienceAnalytics.Aggregation.FlexibleMetrics.Framework.KeyComposition.HierarchicalKeyComposer`1[[System.Guid]], Sitecore.ExperienceAnalytics.Aggregation">
      <ParentVisitGroupKeyResolvers hint="list">
        <ParentVisitGroupKeyResolver type="ParentKeyResolver fully qualified name, assembly name" /> 
      </ParentVisitGroupKeyResolvers>
    </param>
    
    <InteractionFilters hint ="list">
      <InteractionFilter type="Filter fully qualified name, assembly name" />
    </InteractionFilters>
    </dimension>
この記事を改善するための提案がある場合は、 お知らせください!