使用の前提条件

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

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

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

モデルの設計

Reporting Foundationは、factsdimensionsの2種類のオブジェクトをサポートしています。次の図は、例としてProduct Salesファクトを示しています。

ファクトとディメンションを設計する際には、次のルールに従ってください。

  • ファクト型は、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など)。

  • ディメンション キーは、このディメンションを使用するときに結果をクエリおよびフィルター処理する方法を定義します。たとえば、国コードで国ディメンションを識別し、このキーを使用してUSAfor United States of Americaを使用してデータをクエリする場合は、国コードをディメンション キーに格納します。

JSON型表現の作成

この手順では、次の図に示すように、レポートの種類を表すJSONモデルを作成します。

[
    {
        "Name": "ProductSales",
        "ReportingType": "Fact",
        "Properties": [
            {
                "Name": "Id",
                "Type": "System.Int64"
            },
            {
                "Name": "DateTime",
                "Type": "System.DateTime"
            },
            {
                "Name": "LastUpdatedOn",
                "Type": "System.Nullable`1[[System.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: 各プロパティに含まれるタイプ (NameType) のすべてのプロパティを記述します。

  • NavigationProperties: すべてのプロパティを他のオブジェクトとの関係 (つまり、ファクトとディメンション) で記述します。各プロパティには、名前と型が含まれています。

.jsonファイルは、~/App_Data/Config/Sitecore/Reporting/ModelsのパスでXConnectにコピーする必要があります。

メモ

プロパティの場合、Typeは完全な型名である必要がありますが、ナビゲーション プロパティの場合、型はJSONファイル内のディメンション タイプと一致する必要があります。

SQLオブジェクトの作成

CLR型を作成し、JSONモデル表現ファイルSQLオブジェクトを作成した後、型 (つまり、ファクトまたはディメンション) ごとに、次のように3つのSQLオブジェクト (テーブル、SQLテーブルの種類、ストアド プロシージャ) を作成する必要があります。

/* 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]という命名規則があります。

  • ファクト テーブルには、PKとして Id を自動インクリメントする必要があります。

  • ディメンション テーブルには、自動インクリメントなしのPK Id が必要です。

 Types

  • 接尾辞 ファクトとディメンションの型[TypeName]_Type.

Stored Procedures

  • テーブル値パラメータ (SQL型) を使用する。

  • 命名規則はAdd_[TypeName]です。

  • ファクト テーブルでは、更新のためにFKを比較する必要があります。

  • ディメンション テーブルでは、更新の目的でPKを比較する必要があります。

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