1. Sitecore Cortex Reporting Foundation

使用前提条件

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

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

このトピックでは、レポーティングクライアントを使用するための前提条件について説明します:

設計モデル

レポーティング財団は、事実ディメンションの2種類のオブジェクトをサポートしています。以下の図は、例として製品販売の事実を示しています:

design-models.jpg

ファクトや寸法を設計する際は以下のルールに従いましょう:

  • ファクトタイプはSitecore.Reporting.CoreからIFactインターフェースを実装しなければなりません。
  • 次元タイプはSitecore.Reporting.CoreからのIDimensionインターフェースを実装しなければなりません。
  • 事実は任意の次元を指し示し得ますが、0(ゼロ)も含まれます。
  • 事実は別の事実を参照することはできません。
  • 次元は事実やその他の次元を参照することはできません。

IFactインターフェースにはすべてのファクト型に必要な属性が含まれています。

  • Id: 事実行の数値ID(自動増分)。
  • DateTime
  • LastUpdatedOn

IDimensionインターフェースには、すべての次元タイプで必要な属性が含まれています。

  • Id: 次元の数値ID(次元キーのハッシュ)。
  • DimensionKey次元を識別する一意識別子(例えば国の国コード)です。このプロパティはクエリに使用されます。

CLRタイプを作成する

事実と次元を持つモデルを設計したら、そのモデルのためにCLR(共通言語ランタイム)タイプを作成します。以下のコードは、前節で示したデザインモデルの例のためにCLRタイプを作成します。

// Product Sales fact public class ProductSales : IFact { public long Id { get; set; } public DateTime DateTime { get; set; } public DateTime LastUpdatedOn { get; set; } public double Revenue { get; set; } public int Count { get; set; } public double TaxesPaid { get; set; } public float DiscountPercentage { get; set; } public Product Product { get; set; } public long ProductId { get; set; } public Country Country { get; set; } public long CountryId { get; set; } public Store Branch { get; set; } public long BranchId { get; set; } }

//Product dimension public class Product : IDimension { public long Id { get; set; } public string DimensionKey { get; set; } public string Name { get; set; } public string Category { get; set; } }

//Country dimension public class Country : IDimension { public long Id { get; set; } public string DimensionKey { get; set; } public string Name { get; set; } }

//Store dimension public class Store : IDimension { public long Id { get; set; } public string DimensionKey { get; set; } public string Address { get; set; } }

CLRタイプを作成する際は以下のルールに従ってください:

  • 事実は次元および次元の対象(例: CountryProduct)で次元を参照しなければなりません。
  • 参照される次元の は次元対象 + と同じ名前でなければなりません。次元タイプ名と同じである必要はありません(例: CountryCountryIdBranchBranchId)。
  • dimensionキーは、この次元を使う際の結果をどのようにクエリし、フィルタリングするかを定義します。例えば、国コードで国別次元を識別し、このキーでアメリカ合衆国USAしてデータを照会したい場合、国コードをdimensionキーに保存してください。

JSON型表現を作成

このステップは、以下の図が示すように、レポートタイプを表すJSONモデルを作成することです。

{ "Name": "ProductSales", "ReportingType": "Fact", "Properties": { "Name": "Id", "Type": "System.Int64" }, { "Name": "DateTime", "Type": "System.DateTime" }, { "Name": "LastUpdatedOn", "Type": "System.Nullable`1System.DateTime, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" }, { "Name": "Revenue", "Type": "System.Double" }, { "Name": "Count", "Type": "System.Int32" }, { "Name": "TaxesPaid", "Type": "System.Double" }, { "Name": "DiscountPercentage", "Type": "System.Single" }, { "Name": "ProductId", "Type": "System.Int64" }, { "Name": "CountryId", "Type": "System.Int64" }, { "Name": "BranchId", "Type": "System.Int64" } , "NavigationProperties": { "Name": "Product", "Type": "Product" }, { "Name": "Country", "Type": "Country" }, { "Name": "Branch", "Type": "Store" }

}, { "Name": "Product", "ReportingType": "Dimension", "Properties": { "Name": "Id", "Type": "System.Int64" }, { "Name": "DimensionKey", "Type": "System.String" }, { "Name": "Name", "Type": "System.String" }, { "Name": "Category", "Type": "System.String" } , "NavigationProperties": }, { "Name": "Country", "ReportingType": "Dimension", "Properties": { "Name": "Id", "Type": "System.Int64" }, { "Name": "DimensionKey", "Type": "System.String" }, { "Name": "Name", "Type": "System.String" } , "NavigationProperties": }, { "Name": "Store", "ReportingType": "Dimension", "Properties": { "Name": "Id", "Type": "System.Int64" }, { "Name": "DimensionKey", "Type": "System.String" }, { "Name": "Address", "Type": "System.String" } , "NavigationProperties": }

JSONモデル表現の説明:

.jsonファイルにはオブジェクトの配列が含まれ、それぞれのオブジェクトは以下のプロパティを持っています。

  • Name
  • ReportingType
  • Properties: は各性質(Name および Typeを含む型のすべての性質を記述します)。
  • NavigationPropertiesは他の対象との関係を持つすべての性質(すなわち次元への事実)を記述します。各性質は名前と型を含みます。

.jsonファイルを以下のルートでXConnectにコピーしなければなりません:~/App_Data/Config/Sitecore/Reporting/Models。

!注プロパティの場合、Typeは完全なタイプ名でなければなりませんが、ナビゲーションプロパティではJSONファイルの次元タイプと一致するべきです。

SQLオブジェクトを作成する

CLR型とJSONモデル表現ファイルを作成した後、SQLオブジェクトを作成する必要があります。各型(FactまたはDimension)ごとに、3つのSQLオブジェクト(Table、SQL Table-Type、Stored Procedure)を作成しなければなりません。以下の通りです。

/* Tables */

CREATE TABLE dbo.Dimension_Product( Id bigint NOT NULL, DimensionKey nvarchar(max) NOT NULL, Name nvarchar(max) NOT NULL, Category nvarchar(max) NOT NULL, CONSTRAINT PK_Dimension_Product PRIMARY KEY CLUSTERED (Id ASC) )

CREATE TABLE dbo.Dimension_Country( Id bigint NOT NULL, DimensionKey nvarchar(max) NOT NULL, Name nvarchar(max) NOT NULL, CONSTRAINT PK_Dimension_Product PRIMARY KEY CLUSTERED (Id ASC) )

CREATE TABLE dbo.Dimension_Store( Id bigint NOT NULL, DimensionKey nvarchar(max) NOT NULL, Address nvarchar(max) NOT NULL, CONSTRAINT PK_Dimension_Product PRIMARY KEY CLUSTERED (Id ASC) )

CREATE TABLE dbo.Fact_ProductSales( Id bigint IDENTITY(1,1) NOT NULL, DateTime datetime NOT NULL, LastUpdatedOn datetime NULL, Revenue float NOT NULL, Count int NOT NULL, TaxesPaid float NOT NULL, DiscountPercentage real NOT NULL, ProductId bigint NOT NULL, CountryId bigint NOT NULL, BranchId bigint NULL, CONSTRAINT PK_Fact_ProductSales PRIMARY KEY CLUSTERED (Id ASC), CONSTRAINT FK_Fact_ProductSales_Dimension_Product FOREIGN KEY (ProductId) REFERENCES dbo.Dimension_Product (Id), CONSTRAINT FK_Fact_ProductSales_Dimension_Country FOREIGN KEY (CountryId) REFERENCES dbo.Dimension_Country (Id), CONSTRAINT FK_Fact_ProductSales_Dimension_Store FOREIGN KEY (BranchId) REFERENCES dbo.Dimension_Store (Id), )

/* Types */

CREATE TYPE dbo.Product_Type AS TABLE( Id bigint NOT NULL, DimensionKey nvarchar(max) NOT NULL, Name nvarchar(max) NOT NULL, Category nvarchar(max) NOT NULL )

CREATE TYPE dbo.Country_Type AS TABLE( Id bigint NOT NULL, DimensionKey nvarchar(max) NOT NULL, Name nvarchar(max) NOT NULL )

CREATE TYPE dbo.Store_Type AS TABLE( Id bigint NOT NULL, DimensionKey nvarchar(max) NOT NULL, Address nvarchar(max) NOT NULL )

CREATE TYPE dbo.ProductSales_Type AS TABLE( Id bigint NOT NULL, DateTime datetime NOT NULL, LastUpdatedOn datetime NULL, Revenue float NOT NULL, Count int NOT NULL, TaxesPaid float NOT NULL, DiscountPercentage real NOT NULL, ProductId bigint NOT NULL, CountryId bigint NOT NULL, BranchId bigint NULL )

/* Stored Procedures */ GO CREATE PROCEDURE dbo.Add_ProductSales @table dbo.ProductSales_Type READONLY WITH EXECUTE AS OWNER AS BEGIN SET NOCOUNT ON; MERGE Fact_ProductSales AS Target USING @table AS Source ON Target.DateTime = Source.DateTime AND Target.ProductId = Source.ProductId AND Target.BranchId = Source.BranchId AND Target.CountryId = Source.CountryId WHEN MATCHED THEN UPDATE SET Target.Revenue = Source.Revenue, Target.Count = Source.Count, Target.TaxesPaid = Source.TaxesPaid, Target.DiscountPercentage = Source.DiscountPercentage WHEN NOT MATCHED THEN

INSERT (DateTime, LastUpdatedOn, Revenue, Count, TaxesPaid, DiscountPercentage, ProductId, BranchId, CountryId) Values (Source.DateTime, Source.LastUpdatedOn, Source.Revenue, Source.Count, Source.TaxesPaid, Source.DiscountPercentage, Source.ProductId, Source.BranchId, Source.CountryId); END

GO CREATE PROCEDURE dbo.Add_Product @table dbo.Product_Type READONLY WITH EXECUTE AS OWNER AS BEGIN SET NOCOUNT ON; MERGE Dimension_Product AS Target USING @table AS Source ON Target.Id = Source.Id WHEN MATCHED THEN UPDATE SET Target.Name = Source.Name, Target.Category = Source.Category WHEN NOT MATCHED THEN

INSERT (Id, DimensionKey, Name, Category) Values (Source.Id, Source.DimensionKey, Source.Name, Source.Category); END

GO CREATE PROCEDURE dbo.Add_Country @table dbo.Country_Type READONLY WITH EXECUTE AS OWNER AS BEGIN SET NOCOUNT ON; MERGE Dimension_Country AS Target USING @table AS Source ON Target.Id = Source.Id WHEN MATCHED THEN UPDATE SET Target.Name = Source.Name WHEN NOT MATCHED THEN

INSERT (Id, DimensionKey, Name) Values (Source.Id, Source.DimensionKey, Source.Name); END

GO CREATE PROCEDURE dbo.Add_Store @table dbo.Store_Type READONLY WITH EXECUTE AS OWNER AS BEGIN SET NOCOUNT ON; MERGE Dimension_Store AS Target USING @table AS Source ON Target.Id = Source.Id WHEN MATCHED THEN UPDATE SET Target.Address = Source.Address WHEN NOT MATCHED THEN

INSERT (Id, DimensionKey, Address) Values (Source.Id, Source.DimensionKey, Source.Address); END

SQLオブジェクトルール

SQLオブジェクトについては以下のルールに従います:

Tables

  • ファクトテーブルの命名規則は *Fact_[TypeName]*です。
  • 次元テーブルの命名規則は *Dimension_[TypeName]*です。
  • ファクトテーブルは自動的に増分[Id]をPKとして設定すべきです。
  • ディメンションテーブルには自動増分なしのPK [Id]が必要です。

 Types

  • PostTypes は事実と寸法を[ TypeName]_Typeで表示します。

Stored Procedures

  • テーブル値パラメータ(SQL型)を使用します。
  • 命名規則は *Add_[TypeName]*です。
  • ファクトテーブルは更新のためにFKを比較すべきです。
  • 次元表は更新のためにPKを比較すべきです。
この記事を改善するための提案がある場合は、 お知らせください!