1. サーバーに関する考慮事項

チュートリアル: レート ページのカスタム集計の作成

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

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

集計は、MongoDBコレクション データベースからのデータを削減して適応させ、Sitecoreレポート アプリケーションで使用できるようにする処理の一種です。Sitecoreに付属し、エクスペリエンス分析レポートなど、すぐに使用できる集計がいくつかあります。

Webサイトに新しい機能を追加して、xDBから別の方法でデータを抽出して表示する場合は、独自のカスタム集計を記述できます。

メモ

抽出するデータが多数のインタラクションからのものである場合、または抽出プロセスが比較的リソースを大量に消費する場合は、このアプローチに従う必要があります。

このチュートリアルでは、sitecore.net Webサイト用に開発された例を使用してカスタム集計を作成する方法について説明します。sitecore.net Webサイトでは、訪問者は自分の星評価を追加してブログ投稿を評価できます。その後、評価データを使用して、投稿を並べ替えたり検索したりできます。

このチュートリアルには、独自のソリューションで再利用できるサンプル コードと、カスタム集計を作成するために必要なすべての手順が含まれています。

レート ページ イベントを作成する

レートページイベントを作成するには、次のコードを実装して、訪問者がブログ投稿を評価するために星をクリックしたときに、システムが現在のページの新しいレートページイベントを登録する必要があります。訪問者がページを評価すると、選択した値(1から5)がCustomValues コレクションにDataCodeキーとともに書き込まれます。

これを行うには、次の手順を実行します。

  • 次のコードを実装して、SitecoreIndustry insightのブログ投稿を使用してレート ページ イベントを作成します。

    var eventData = new PageEventData("Rate")
        {      Data = "Industry Insight",
               DataKey = "{7F84F941-A284-4DF5-9DE9-1B22A387039E}",
               Text = "Rated"    };
    var eventRow = Tracker.Current.Interaction.PreviousPage.Register(eventData);
    eventRow.CustomValues["RateValue"] = 5;

ファクト テーブルの作成

カスタム集計の場合は、集計するエクスペリエンス データの測定値を含む新しいファクト テーブルを作成する必要があります。この例では、新しいファクト テーブルを1つ作成する必要があります。

  1. 新しいファクト テーブルを作成するには、SQLスクリプトを実行する必要があります。例えば:

    CREATE TABLE [dbo].[Fact_Rating](
    [ItemId] UNIQUEIDENTIFIER NOT NULL,
    [Rating] BIGINT NOT NULL,
    [Count] BIGINT NOT NULL,
    CONSTRAINT [PK_Rating] PRIMARY KEY CLUSTERED ([ItemId])
    )
    GO
     
    ALTER TABLE [dbo].[Fact_Rating] WITH NOCHECK
    ADD CONSTRAINT [FK_Fact_Rating_Items]
    FOREIGN KEY([ItemId])
    REFERENCES [dbo].[Items] ([ItemId])
    GO
     
    ALTER TABLE [dbo].[Fact_Rating] NOCHECK
    CONSTRAINT [FK_Fact_Rating_Items]
    GO
    
    Where:
    ItemId  blog post ID( item ID in content tree)
    Rating  the total value given by all visitors
    Count  number of visitors who rated the post
  2. SQLスクリプトを実行して、新しいファクト テーブルを作成します。

ファクト・モデル・クラスとディメンション・モデル・クラスの作成

新しいディメンションのクラス・モデルを実装するには、次のようにします。

  1. DictionaryKeyクラスから継承する新しいクラスを作成し、すべてのキー フィールドをパブリック プロパティ (getとset) として公開します。

  2. RatingKey.cs

    namespace Sitecore.Components.Community.BusinessLayer
    {
      using System;
      
      using Sitecore.Analytics.Aggregation.Data.Model;
      
      public class RatingKey : DictionaryKey
      {  
        public Guid ItemId { get; set; }
      }  
    }  
  3. DictionaryValue クラスから継承する新しいクラスを作成し、必要なプロパティを追加します。キーと値クラスの両方に、パブリックなデフォルトコンストラクタが必要です。

  4. Dimension<TKey, TValue>クラスから継承する新しいクラスを、パブリックなデフォルトコンストラクタを使用して再度作成します。

  5. RatingValue.cs

    namespace Sitecore.Components.Community.BusinessLayer
    {
      using Sitecore.Analytics.Aggregation.Data.Model;
      
      public class RatingValue : DictionaryValue
      {  
        internal static RatingValue Reduce(RatingValue left, RatingValue right)  
        {  
          var ratingValue = new RatingValue();  
      
          ratingValue.Count = left.Count + right.Count;
          ratingValue.Rating = left.Rating + right.Rating;
      
          return ratingValue;
        }
      
        public long Rating { get; set; }
      
        public long Count { get; set; }
      }
    }
    RatingFact.cs
    namespace Sitecore.Components.Community.BusinessLayer  
    {  
      using Sitecore.Analytics.Aggregation.Data.Model;  
      
      public class Rating : Fact<RatingKey, RatingValue>  
      {  
        public Rating() : base(RatingValue.Reduce)  
        {  
        }  
     
      }  
    

集計プロセッサを実装する

集計プロセッサを実装するには、次のようにします。

  1. AggregationProcessor 基本クラスから継承する新しいクラスを作成します。

  2. 基本クラスの抽象メソッドとして定義されているOnProcess(AggregationPipelineArgs args) メソッドを実装します。

  3. AggregationProcessor.cs

    namespace Sitecore.Components.Community.BusinessLayer
    {  
      using System;  
      using System.Linq;  
      
      using Sitecore.Analytics.Aggregation.Pipeline;  
      using Sitecore.Analytics.Model;  
      using Sitecore.Diagnostics;  
      
      public class RatingProcessor : AggregationProcessor  
    {    
      private Guid RatePageEventDefinitionId = Guid.Parse("08E50AA5-E5E7-4845-940B-2E81FB3ED56C");  
     
        protected override void OnProcess(AggregationPipelineArgs args)
        {
          Assert.ArgumentNotNull(args, "args");
            
          if (args.Context.Visit.Pages == null)
          {
            return;
          }
      
          foreach (PageData page in args.Context.Visit.Pages)
          {
            if (page.PageEvents != null)
            {  
              var fact = args.GetFact<Rating>();
              foreach (var pageEvent in page.PageEvents.Where(p => p.PageEventDefinitionId
              == RatePageEventDefinitionId))
              {
                int rating = GetRating(pageEvent);
                var postId = GetPostId(pageEvent);
      
                if (rating > 0 && postId != Guid.Empty)
                {  
                  var ratingKey = new RatingKey();
                  ratingKey.ItemId = postId;
      
                  var ratingValue = new RatingValue();
                  ratingValue.Count = 1;
                  ratingValue.Rating = rating;
      
                  fact.Emit(ratingKey, ratingValue);
                }
              }
            }
          }
        }
      
        private int GetRating(PageEventData pageEvent)
        {
          int rating = 0;
          if (pageEvent.CustomValues.ContainsKey("RateValue"))
          {
            rating (int)pageEvent.CustomValues["RateValue"];
          }
      
          return rating;
        }
      
        private Guid GetPostId(PageEventData pageEvent)
        {
          if (!string.IsNullOrEmpty(pageEvent.DataKey))
          {  
            Guid postId;  
            if (Guid.TryParse(pageEvent.DataKey, out postId))
            {  
              return postId;
            }
          }
      
          return Guid.Empty;
        }  
       }
    }

カスタム集計を登録する

集計プロセッサを実装したので、最後の手順として、カスタム集計を登録します。

  1. プロセッサが実行されるようにするには、プロセッサを構成ファイルに追加し、App_Config/Includeフォルダに保存します。

  2. この目的のために、Rating.Aggregation.configという名前の新しい設定ファイルを作成します。

    次のサンプルは、Rating.Aggregation.configファイル内のカスタム集計を追加する場所を示しています。

    <configuration xmlns:patch="http://www.sitecore.net/xmlconfig/">  
      <sitecore>  
      
        <pipelines>  
            
          <group groupName="analytics.aggregation">  
            <pipelines>  
      
              <interactions>  
                  <processor   
    type="Sitecore.Components.Community.BusinessLayer.RatingProcessor,   
    Sitecore.Components.Community" />  
             </interactions>           
      
            </pipelines>  
          </group>  
              
        </pipelines>  
        
      </sitecore>  
    </configuration
    手記

    例を試すときは、型名とアセンブリ名が同じ名前空間またはアセンブリを使用していない場合は、必ず更新してください。

このカスタム集計チュートリアルのすべての手順を完了すると、ブログ記事を評価したり、人気度でブログを検索する追加オプションを使用したりできます。

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