---
title: "使用前提条件"
slug: "usage-prerequisites"
abstract: "レポートクライアントを利用するために必要な前提条件を説明しています。"
---
# 使用前提条件

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

## 設計モデル

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

![design-models.jpg](https://doc.sitecore.com/api/markdown-image/xp/ja/developers/93/sitecore-experience-platform/images/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タイプを作成する際は以下のルールに従ってください:

-   事実は次元および次元の対象(例: *Country*、 *Product*)で次元を参照しなければなりません。
-   参照される次元の は次元対象 + と同じ名前でなければなりません。次元タイプ名と同じである必要はありません(例: *Country* と *CountryId*、 *Branch* と *BranchId*)。
-   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を比較すべきです。