> ## 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 社区统计数据，聚合游戏中所有玩家的数值，以支持全球目标、事件和共享里程碑。

社区统计数据是提高参与度并培养玩家对游戏投入感的强大工具。通过在游戏标题级别聚合统计数据，开发者可以创建共享目标和挑战，鼓励玩家之间的协作。这种方法将玩家个人的行动转化为对社区范围内目标的贡献，随着玩家共同努力实现集体里程碑，可以推动持续的参与度。玩家会感受到自己个人的贡献对更大的社区很重要，从而加强了他们与游戏和其他玩家的联系。

例如，想象一下实现一场全球 Boss 战，整个玩家群体必须在一周内共同得分 1000 万次淘汰以解锁一个特殊的游戏内活动。当玩家看到社区进度条随着每个人的贡献不断推进时，他们会有动力帮助达到目标。这种行为创造了一个强大的投入和参与反馈循环，尤其是当搭配实时进度更新和沿途的里程碑奖励时。

使用 PlayFab，您可以通过定义两个统计数据轻松管理社区统计数据：一个在玩家级别（聚合源），另一个在标题或组级别（聚合目标）。对玩家统计数据所做的更新会自动聚合到目标统计数据。若要检索当前的社区分数，请读取目标实体的统计数据。

PlayFab 支持两种类型的社区统计数据：

* **标题级**：将所有玩家更新聚合为单个标题范围内的统计数据。适用于整个玩家群体共享的全球目标。
* **组级**：将玩家更新聚合到组实体统计数据。非常适合氏族挑战、公会目标或基于团队的目标，其中一部分玩家共同致力于共享目标。

## 标题级社区统计数据

### 创建源统计数据定义

首先，为玩家创建统计数据定义，该定义作为聚合源：

```C# theme={null}
// Use the PlayFabAuthenticationContext to call the API
PlayFabProgressionInstanceAPI statsAPI = new PlayFabProgressionInstanceAPI(context);
CreateStatisticDefinitionRequest statDefinitionRequest = new CreateStatisticDefinitionRequest()
{
    Name = "sourceStat",
    AuthenticationContext = context,
    EntityType = "title_player_account",
    VersionConfiguration = new VersionConfiguration()
    {
        MaxQueryableVersions = 1,
        ResetInterval = ResetInterval.Manual,
    },
    Columns = new List<StatisticColumn>()
    {
        new StatisticColumn()
        {
            Name = "Eliminations",
            AggregationMethod = StatisticAggregationMethod.Sum,
        },
    },
};

PlayFabResult<PlayFab.LeaderboardsModels.EmptyResponse> createStatDefResult = await statsAPI.CreateStatisticDefinitionAsync(statDefinitionRequest);
```

### 创建目标统计数据定义

接下来，为标题创建统计数据定义，该定义作为聚合目标。将玩家统计数据定义指定为标题统计数据定义的聚合源：

```C# theme={null}
// Use the PlayFabAuthenticationContext to call the API
PlayFabProgressionInstanceAPI statsAPI = new PlayFabProgressionInstanceAPI(context);
CreateStatisticDefinitionRequest statDefinitionRequest = new CreateStatisticDefinitionRequest()
{
    Name = "communityStat",
    AuthenticationContext = context,
    EntityType = "title",
    Columns = new List<StatisticColumn>()
    {
        new StatisticColumn()
        {
            Name = "Eliminations",
            AggregationMethod = StatisticAggregationMethod.Sum,
        },
    },
    AggregationSources = new string[] { "sourceStat" };
};

PlayFabResult<PlayFab.LeaderboardsModels.EmptyResponse> createStatDefResult = await statsAPI.CreateStatisticDefinitionAsync(statDefinitionRequest);
```

<Note>
  ***注意：*** 将
</Note>

`EntityType` 设置为 `title`，并将 `AggregationSources` 设置为引用在玩家级别定义的统计数据。

创建社区统计数据后，在玩家级别所做的任何更新都会开始在标题级别聚合。系统仅聚合新的更新。如果源统计数据已存在一段时间，则系统不会在标题级别回填这些历史值。

### 读取标题社区统计数据

若要获取标题级别的统计数据当前分数，请读取标题实体的统计数据：

```C# theme={null}
// Use the PlayFabAuthenticationContext to call the API
PlayFabProgressionInstanceAPI statsAPI = new PlayFabProgressionInstanceAPI(context);

GetStatisticsRequest request = new GetStatisticsRequest()
{
    AuthenticationContext = context,
    Entity = new PlayFab.LeaderboardsModels.EntityKey()
    {
        Id = "<title id in hex>",
        Type = "title"
    },
};

PlayFabResult<GetStatisticsResponse> result = await statsAPI.GetStatisticsAsync(request); 
```

## 组级社区统计数据

组级社区统计数据让您可以在特定组（例如氏族或公会）内聚合玩家操作。此聚合适用于诸如氏族挑战之类的场景，其中成员共同努力实现共享目标。

### 创建目标统计数据定义

创建 `EntityType` 设置为 `group` 的统计数据定义。将玩家统计数据定义指定为聚合源：

```C# theme={null}
// Use the PlayFabAuthenticationContext to call the API
PlayFabProgressionInstanceAPI statsAPI = new PlayFabProgressionInstanceAPI(context);
CreateStatisticDefinitionRequest statDefinitionRequest = new CreateStatisticDefinitionRequest()
{
    Name = "groupCommunityStat",
    AuthenticationContext = context,
    EntityType = "group",
    Columns = new List<StatisticColumn>()
    {
        new StatisticColumn()
        {
            Name = "Eliminations",
            AggregationMethod = StatisticAggregationMethod.Sum,
        },
    },
    AggregationSources = new string[] { "sourceStat" }
};

PlayFabResult<PlayFab.LeaderboardsModels.EmptyResponse> createStatDefResult = await statsAPI.CreateStatisticDefinitionAsync(statDefinitionRequest);
```

<Note>
  源统计数据定义（玩家级别）与用于标题级社区统计数据的定义相同。您可以重用现有的源统计数据定义。
</Note>

### 更新源统计数据

在为组级聚合更新玩家的源统计数据时，请在 `StatisticUpdate` 对象的 `AggregationTargetEntityKeys` 属性中指定目标组实体。此属性告诉 PlayFab 将更新聚合到哪个组实体。

```C# theme={null}
// Use the PlayFabAuthenticationContext to call the API
PlayFabProgressionInstanceAPI statsAPI = new PlayFabProgressionInstanceAPI(context);

UpdateStatisticsRequest request = new UpdateStatisticsRequest()
{
    AuthenticationContext = context,
    Entity = new PlayFab.LeaderboardsModels.EntityKey()
    {
        Id = "<player entity id>",
        Type = "title_player_account"
    },
    Statistics = new List<StatisticUpdate>()
    {
        new StatisticUpdate()
        {
            Name = "sourceStat",
            Scores = new List<string> { "5" },
            AggregationTargetEntityKeys = new List<PlayFab.LeaderboardsModels.EntityKey>()
            {
                new PlayFab.LeaderboardsModels.EntityKey()
                {
                    Id = "<group entity id>",
                    Type = "group"
                }
            }
        }
    }
};

PlayFabResult<UpdateStatisticsResponse> result = await statsAPI.UpdateStatisticsAsync(request);
```

<Info>
  对于标题级社区统计数据，不需要 `AggregationTargetEntityKeys`，因为标题是默认的聚合目标。对于组级社区统计数据，您必须指定组实体键。目前，您只能在 `AggregationTargetEntityKeys` 中指定一个实体键。
</Info>

### 读取组社区统计数据

若要获取组社区统计数据的当前分数，请读取组实体的统计数据：

```C# theme={null}
// Use the PlayFabAuthenticationContext to call the API
PlayFabProgressionInstanceAPI statsAPI = new PlayFabProgressionInstanceAPI(context);

GetStatisticsRequest request = new GetStatisticsRequest()
{
    AuthenticationContext = context,
    Entity = new PlayFab.LeaderboardsModels.EntityKey()
    {
        Id = "<group entity id>",
        Type = "group"
    },
};

PlayFabResult<GetStatisticsResponse> result = await statsAPI.GetStatisticsAsync(request);
```

## 限制

* 您只能为社区统计数据指定一个聚合源。
* 您不能为社区统计数据指定版本配置。您为源统计数据指定的版本配置也适用于社区统计数据。
* 社区统计数据的 `EntityType` 必须是 `title` 或 `group`。
* 您不能对任何列使用 `Last` 聚合。
* 在更新源统计数据时，您只能在 `AggregationTargetEntityKeys` 中指定一个实体键。

## 另请参阅

* [创建基本统计数据](/services/playfab/player-progression/statistics/create-basic-statistics)
* [使用统计数据做更多](/services/playfab/player-progression/statistics/doing-more-statistics)
* [季节性统计数据](/services/playfab/player-progression/statistics/seasonal-statistics)
* [向统计数据添加上下文数据](/services/playfab/player-progression/statistics/metadata-statistics)
* [API 参考](/services/playfab/player-progression/statistics/api-reference)
* [限制](/services/playfab/player-progression/statistics/limits-statistics)
* [配额](/services/playfab/player-progression/statistics/quota-statistics)
* [统计数据计量](/services/playfab/pricing/meters/statistics-meters)


## Related topics

- [PlayFab 玩家进程文档](/zh-CN/services/playfab/player-progression/index.md)
- [统计数据 API 参考](/zh-CN/services/playfab/player-progression/statistics/api-reference.md)
- [统计数据限制](/zh-CN/services/playfab/player-progression/statistics/limits-statistics.md)
- [创建基本统计数据](/zh-CN/services/playfab/player-progression/statistics/create-basic-statistics.md)
- [统计数据快速入门](/zh-CN/services/playfab/player-progression/statistics/quickstart-statistics.md)
