> ## Documentation Index
> Fetch the complete documentation index at: https://devdocs.xbox.com/llms.txt
> Use this file to discover all available pages before exploring further.

# 基本的な統計情報を作成する

> 名前、集計方法、およびリセット動作を定義して基本的な PlayFab 統計情報を作成し、プレイヤーの値を書き込むことで時間の経過に伴う進捗を追跡します。

このチュートリアルでは、新しい Statistic Service を使用して基本的な統計情報を作成する方法を紹介します。プレイヤーがロングショットを決めるたびに追跡したいと考えているシューティングゲームを例に始めましょう。

## 統計情報の作成

最初のステップは、ロングショットを追跡するための主要な要素を含む統計情報の定義を作成することです。今回のシューティングゲームでは、ロングショットの距離を示す列が 1 つだけ必要です。次の例は、C# SDK を使用して統計情報の定義を作成する方法を示しています。

```C# theme={null}
public static async Task CreateStatisticDefinitionAsync(PlayFabAuthenticationContext context, string statName)
{
    PlayFabProgressionInstanceAPI statsAPI = new PlayFabProgressionInstanceAPI(context);
    CreateStatisticDefinitionRequest statDefinitionRequest = new CreateStatisticDefinitionRequest()
    {
        Name = statName,
        AuthenticationContext = context,
        EntityType = "title_player_account",
        VersionConfiguration = new VersionConfiguration()
        {
            MaxQueryableVersions = 1,
            ResetInterval = ResetInterval.Manual,
        },
        Columns = new List<StatisticColumn>()
        {
            new StatisticColumn()
            {
                Name = "Distance",
                AggregationMethod = StatisticAggregationMethod.Max,
            }
        },
    };
    
    PlayFabResult<PlayFab.LeaderboardsModels.EmptyResponse> createStatDefResult = await statsAPI.CreateStatisticDefinitionAsync(statDefinitionRequest);
}
```

それでは、この例の主要な要素について説明します。

* `AuthenticationContext`: このパラメーターは、当社のサービスへのすべてのリクエストの背後にある認証を処理します。詳細な説明については、次のページを参照してください: [統計情報のクイックスタート](/services/playfab/player-progression/statistics/quickstart-statistics)。
* `Name`: このパラメーターは、統計情報の定義を識別するのに役立ちます。情報を取得するための他のリクエストで使用されるため、関連性のある名前を付けることが重要です。
* `EntityType`: このパラメーターは、統計情報を作成するエンティティのタイプを指定します。詳細については、こちらをご覧ください: [Entity プログラミングモデル](/services/playfab/live-service-management/game-configuration/entities)。
* `VersionConfiguration`: このパラメーターを使用すると、一定期間後に自己リセットする統計情報のバージョニング戦略を設定できます。この概念については、こちらで詳しく説明しています: [シーズナル統計情報](/services/playfab/player-progression/statistics/seasonal-statistics)。
* `Columns`: ここでは、統計情報の列数を定義します。定義ごとに最大 5 列です。この例では、ロングショット用に 1 列のみを設定しています。また、`AggregationMethod` を Max として定義しており、これは新しい値が前の値より大きい場合にのみ統計情報が更新されることを意味します。
  * `AggregationMethod` には 4 つの値があります。
    * `Max`: 新しい値が前の値より大きい必要があります。
    * `Min`: 新しい値が前の値より小さい必要があります。
    * `Last`: 常に最新の値で更新されます。
    * `Sum`: 前の値と新しい値が合算されます。

これらすべての情報が明確になったので、例を実行して最初の統計情報を作成する準備ができました。

### 統計情報の定義を取得する

この統計情報にデータを追加する前に、正しく作成されたことを確認したいと思います。この操作を行うには、統計情報の定義を取得する方法の例を示します。

```C# theme={null}
public static async Task GetStatisticDefinition(PlayFabAuthenticationContext context, string statName)
{
    PlayFabProgressionInstanceAPI statsAPI = new PlayFabProgressionInstanceAPI(context);
    GetStatisticDefinitionRequest statDefReq = new GetStatisticDefinitionRequest()
    {
        Name = statName
    };

    PlayFabResult<GetStatisticDefinitionResponse> getStatDefResult = await statsAPI.GetStatisticDefinitionAsync(statDefReq)
}
```

統計情報の定義を取得するには、作成した統計情報の名前を指定します。複数の統計情報の定義がある場合は、次の例を使用して、1 回のリクエストですべての統計情報の定義を取得できます。

```C# theme={null}
public static async Task GetStatisticDefinitions(PlayFabAuthenticationContext context)
{
     PlayFabProgressionInstanceAPI leaderboardsAPI = new PlayFabProgressionInstanceAPI(context);
     ListStatisticDefinitionsRequest request = new ListStatisticDefinitionsRequest();
     PlayFabResult<ListStatisticDefinitionsResponse> getStatDefsResult = await leaderboardsAPI.ListStatisticDefinitionsAsync(request);
           
}
```

### 統計情報の定義を更新する

統計情報の定義を更新する場合は、次のようにできます。

```C# theme={null}
public static async Task UpdateStatisticDefinitionAsync(PlayFabAuthenticationContext context, string statisticName, VersionConfiguration version)
{
    PlayFabProgressionInstanceAPI statsAPI = new PlayFabProgressionInstanceAPI(context);
    UpdateStatisticDefinitionRequest updateStatDefinitionRequest = new UpdateStatisticDefinitionRequest()
    {
        AuthenticationContext = context,
        Name = statisticName,
        VersionConfiguration = version

    };
    PlayFabResult<PlayFab.ProgressionModels.EmptyResponse> updateStatDefinitionResult = await statsAPI.UpdateStatisticDefinitionAsync(updateStatDefinitionRequest);

}

```

なお、Columns、EntityType、および ResetInterval は更新の一部として変更できないことに注意してください。

````C# theme={null}

### 統計情報の定義を削除する

列を追加したり、エラーを修正するために統計情報の定義を削除したい場合は、次のようにできます。

 
``` C#

public static async Task DeleteStatisticDefinition(PlayFabAuthenticationContext context, string statName)
\{
    PlayFabProgressionInstanceAPI statsAPI = new PlayFabProgressionInstanceAPI(context);
    DeleteStatisticDefinitionRequest deleteStatDefRequest = new DeleteStatisticDefinitionRequest()
    \{
        AuthenticationContext = context,
        Name = statName,
    \};
    
    PlayFabResult<PlayFab.LeaderboardsModels.EmptyResponse> statResponse = await statsAPI.DeleteStatisticDefinitionAsync(deleteStatDefRequest);    
\}
````

## 統計情報にデータを追加する

シューティングゲームの例を続けると、統計情報の定義を作成し、取得し、必要に応じて削除する方法がわかりました。次のステップは、統計情報にデータを追加し始めることです。

これらの統計情報はエンティティベースの統計情報であり、エントリはエンティティであることに留意してください。この具体的な例では、エンティティタイプ title\_player\_account を使用しているため、統計情報はプレイヤーの情報を追跡します。ただし、他のエンティティタイプも使用できることを覚えておいてください。こちらで確認できます: [利用可能な組み込みエンティティタイプ](/services/playfab/live-service-management/game-configuration/entities/available-built-in-entity-types)。

それでは、統計情報にデータを追加する方法を見てみましょう。

```C# theme={null}
public static async Task UpdateStatisticForPlayer(PlayFabAuthenticationContext context, string statName, string entityId, int score)
\{
    PlayFabProgressionInstanceAPI statsAPI = new PlayFabProgressionInstanceAPI(context);
    UpdateStatisticsRequest updateStatRequest = new UpdateStatisticsRequest()
    \{
        Entity = new PlayFab.LeaderboardsModels.EntityKey()
        \{
            Id = entityId,
            Type = EntityType
        \},
        AuthenticationContext = context,
        Statistics = new List<PlayFab.LeaderboardsModels.StatisticUpdate>() 
        \{
            new PlayFab.LeaderboardsModels.StatisticUpdate() 
            \{
                Name = statName,
                Scores = new List<string> \{ score.ToString()\},
            \}
        \}
    \};

    PlayFabResult<UpdateStatisticsResponse> updateResult = await statsAPI.UpdateStatisticsAsync(updateStatRequest);
\}
```

それでは、この例の主要な要素について説明します。

* `Entity`: このパラメーターは、統計情報を更新したいエンティティに対応します。
* `Statistics`: このパラメーターは、エンティティの実際の統計情報のセットに対応します。
* `StatisticUpdate`: このパラメーターは、追加される統計情報の値に対応します。
  * `Scores`: このパラメーターは、1 つのエンティティに追加できるスコアのリストに対応します。統計情報には複数の列があることを覚えておいてください。これらの概念については、こちらで詳しく確認できます: [統計情報でさらに多くのことを行う](/services/playfab/player-progression/statistics/doing-more-statistics)
  * `Name`: このパラメーターは、統計情報の定義を作成したときに設定した統計情報の名前に対応します。

これらの概念が明確になったので、統計情報にデータを追加する準備ができました。

## 統計情報からデータを取得する

簡単におさらいしましょう。この時点で、統計情報を作成し、すべての設定の詳細を確認し、データを追加し始めました。ここで、一部のプレイヤーがすでにあなたのゲームを使用しており、全員が印象的なロングショットを持っていると想像してみましょう。そのうちの 1 人をクエリしたいと思います。次の例では、この操作を行う方法を示します。

```C# theme={null}
public static async Task GetStatsForEntity(PlayFabAuthenticationContext context, string entityId)
\{
    PlayFabProgressionInstanceAPI statsAPI = new PlayFabProgressionInstanceAPI(context);

    GetStatisticsRequest request = new GetStatisticsRequest()
    \{
        AuthenticationContext = context,
        Entity = new PlayFab.LeaderboardsModels.EntityKey()
        \{
            Id = entityId,
            Type = EntityType
        \},
    \};
    
    PlayFabResult<GetStatisticsResponse> result = await statsAPI.GetStatisticsAsync(request);

    Console.WriteLine("Stats for entity: " + result.Result.Entity.ToString());
    foreach (KeyValuePair<string, PlayFab.LeaderboardsModels.EntityStatisticValue> statValuePair in result.Result.Statistics)
    \{
        Console.WriteLine($"\{statValuePair.Value.Name\} : \{string.Join('|', statValuePair.Value.Scores)\}");
    \}
\}
```

ここでは、エンティティに関連付けられたすべての統計情報をクエリし、対応する値とともに名前を表示します。

## 統計情報の値を削除する

統計情報は期待どおりに動作しており、ゲームには多くのプレイヤーがいます。ただし、ゲーム内で異常な動作に気づき始めたため、リセットして統計情報のデータを削除することにしました。次の例では、統計情報からデータを削除する方法を確認できます。

```C# theme={null}

 public static async Task DeleteStats(PlayFabAuthenticationContext context, string entityId, List<StatisticDelete> stats)
 \{
     PlayFabProgressionInstanceAPI statsAPI = new PlayFabProgressionInstanceAPI(context);
     DeleteStatisticsRequest statsDelReq = new DeleteStatisticsRequest()
     \{
         Entity = new PlayFab.LeaderboardsModels.EntityKey()
         \{
            Id = entityId,
            Type = EntityType
         \},
         Statistics = stats
     \};
 
     PlayFabResult<DeleteStatisticsResponse> delStatsResult = await statsAPI.DeleteStatisticsAsync(statsDelReq);     
 \}
```

それでは、この例の主要な要素について説明します。

* `Entity`: このパラメーターは、削除する対象のエンティティです。
* `List<StatisticDelete>`: このパラメーターは、削除したい統計情報の名前のリストです。

## まとめ

このチュートリアルでは、次の操作の方法を学びました。

* 統計情報の作成
* 統計情報の設定の確認
* 統計情報の設定の更新
* 統計情報の設定の削除
* 統計情報へのデータの追加
* 統計情報のエントリの削除

## 関連項目

* [統計情報でさらに多くのことを行う](/services/playfab/player-progression/statistics/doing-more-statistics)
* [シーズナル統計情報](/services/playfab/player-progression/statistics/seasonal-statistics)
* [統計情報にコンテキストデータを追加する](/services/playfab/player-progression/statistics/metadata-statistics)
* [トランザクション書き込み](/services/playfab/player-progression/statistics/transactional-writes)
* [API リファレンス](/services/playfab/player-progression/statistics/api-reference)
* [制限](/services/playfab/player-progression/statistics/limits-statistics)
* [クォータ](/services/playfab/player-progression/statistics/quota-statistics)


## Related topics

- [統計情報でさらに多くのことを行う](/ja-jp/services/playfab/player-progression/statistics/doing-more-statistics.md)
- [メタデータ統計情報](/ja-jp/services/playfab/player-progression/statistics/metadata-statistics.md)
- [シーズナル統計情報](/ja-jp/services/playfab/player-progression/statistics/seasonal-statistics.md)
- [統計情報の制限](/ja-jp/services/playfab/player-progression/statistics/limits-statistics.md)
- [統計情報のクォータ](/ja-jp/services/playfab/player-progression/statistics/quota-statistics.md)
