ウォークスルー

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

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

Sitecoreには複数の次元があり、それぞれが報告されています。もしSitecoreが報告しない次元について報告したい場合は、独自の次元を作成してその指標を収集できます。

!注このトピックでは、Sitecore 9以降でフレ キシブルディメンションとも呼ばれる次元をどのように実装するかを説明します。

このウォークスルーでは、以下の方法を説明します:

  • 次元とメトリクスのクラスを作成します。次元を表現し、メトリクスの計算を行うクラスを作成します。
  • レポーティングデータベースを更新します - レポーティングデータベースを更新してディメンションデータをそこに保存します。
  • 次元とメトリクスの項目を作成する - Sitecoreの項目はその次元とその指標を表します。
  • 新しい次元を設定する - Sitecoreがその次元を使うように設定します。

新しい次元を作成・設定した後、データを表示するチャートを追加できます。

次元と指標用のクラスを作成する

以下の手順は、新しい次元を実装し、メトリクスを計算するクラスの作成方法を示しています。

参考文献の追加

Visual Studioのソリューションでこれらのライブラリへの参照を追加してください:

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

モデルを定義する

次元と計量のモデルを作成するために:

  1. DictionaryValueクラスとIMergeableMetricインターフェースを拡張するクラスを作成します。これらのクラスの命名規則は*、例えば Metrics* PostCodeMetrics、OutcomeMetrics、などです。
  2. 指標のプロパティを定義します。例えば Visits、 MonetaryValue、などです。
  3. MergeWithメソッドを実装します。このメソッドでは、新しい相互作用で計算されたデータをどのように既存の計算データにマージするかを指定します。

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

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

public T MergeWith(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 }; } }

!注クラス名とメトリクスプロパティは、後のタスクでデータベーススキーマを定義します。

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

次元をグループ化するために使うキーの解決戦略を定義しなければなりません。例えば、URLGoal、またはOutcomeです。これはグループリゾルバを実装することで行います。

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

  1. IGroupResolverインターフェースを拡張する新しいクラスを作成し、Tは次元ごとにレコードをグループ化する際にキーとして使いたいタイプのオブジェクトです。
  2. MeasureGroupOccurrencesメソッドを実装しましょう。

以下の例では、群を分解するためにBrowserData型を用いて、Browserの指標を測定しています。

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

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

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

occurrences.Add(new VisitGroupMeasurement(new VisitGroup(serializedBrowserDataKey), new { browserData })); return occurrences; }

return occurrences; } }

BrowserData JSONがメトリクスのキーとして使うには大きすぎる場合があり、不要な情報が多く含まれている場合があります。正しい情報をキーとして使うには、キーリゾルバを使う必要があります。

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

  • IVisitGroupKeyResolverインターフェースを拡張するクラスを作成してください:

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

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

    return new List { 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 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().ToList();

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

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

このステップは任意です。もし階層的な性質を持つ一連の次元、例えば多くの結果を含むアウトカムグループがある場合、親キーリゾルバを実装して階層内の関係を表現できます。

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

  • IVisitGroupKeyResolverまたはIVisitGroupKeyResolverインターフェースのいずれかを拡張するクラスを作成します。

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

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

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

return new List { browserDataKey.BrowserMajorName }; } }

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

このステップは任意です。あなたの次元に対してインタラクションフィルターを実装できます。イベント、目標、キャンペーン、チャネル、連絡先、ダウンロードに基づくインタラクションに関連するデータを無視するためにインタラクションフィルターを使用します。例えば、ウェブサイトのあるページをレポートの一部として表示してほしくない場合は、そのページを無視するように指定するフィルターを作成します。

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

  • 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
  • DimensionKeyID
  • FilterId(フィルター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. コンテンツエディターで、CoreデータベースのFlexibleMetricsフォルダ(sitecore``/Client/Applications/ExperienceAnalytics/Common/System/ChartFields/FlexibleMetrics)に移動します。
  2. 新しい次元に関連付けられた各指標について、 ホーム タブの 「挿入 」グループで選択し、挿入し、名前を付けて MetricChartFieldを付けます。複数の次元でメトリクスが共有できるため、フィールドはすでに存在可能です。前述の例に従い、 EngagementValue カスタムメトリクスの定義項目を作成する必要があります。
  3. 新しいアイテムを選択し、以下のフィールドで値を指定します:
    • AppearanceセクションのHeaderTextフィールドで、新しいメトリクスの記述名を入力します。
    • DataBindingセクションのDataFieldフィールドで、作成したテーブルの対応する列の名前(camelCaseで)を入力してください。
  4. セーブ。

寸法項目を作成・設定します

次元アイテムを作成・設定するには:

  1. コンテンツエディターで、マスターデータベースのマーケティングコントロールパネルDimensionsフォルダ(Marketing Control Panel/Experience Analytics/Dimensions)に移動し、柔軟な寸法アイテムを格納するサブフォルダを選択します。PagesVisits、または自分専用のサブフォルダを作成できます。
  2. ホームタブの挿入グループで、FlexibleDimension項目を選択し、挿入し、名前を付けます。
  3. 新しいアイテムを選択し、以下のフィールドで値を指定します:
    • データセクションのメトリクスタイプフィールドで、作成したクラス名(例
      )を入力してください。
    • 名前欄に説明的な名前を入力します。
    • メトリクス欄で、次元に追加したいすべてのメトリクスを選択します。
    • セーブ。

セグメントアイテムを作成する

Experience Analyticsは、集計時にデータをより小さなセットに絞り込むためにセグメントを使います。データを集約する前に、少なくとも1つのセグメントを指定する必要があります。通常、この目的のために「すべてのインタラクション/訪問」セグメントを指定します。 カスタムレポートフィルターを作成すれば、セグメント にはより多くの情報が表示されます。

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

  1. コンテンツエディターで*/sitecore/System/Marketing Control Panel/Experience Analytics/Dimensions*に移動し、作成した次元を選択します。
  2. ホームタブの挿入グループでSegmentアイテムを選択し、挿入し、名前を付けます。
  3. ワークフローグループの****レビュータブで「**デプロイ」**をクリックします。デフォルトでは、部署から30分後にセグメントのデータ収集が始まります。

!注展開後にセグメントを変更しないでください。変更するとデータの不整合を引き起こす可能性があります。

新しい次元の設定

集約時に呼び出すには、Sitecore構成で新しい次元を指定する必要があります。

新しい次元を設定するには:

  1. このようなパッチファイルを作成してください:

  2. オプションとして、親キーリゾルバやフィルターを指定することで、次元に追加のparam要素を追加することもできます:

    <dimension …>

    ...

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