> ## 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.

# Criar uma estatística básica

> Crie uma estatística básica do PlayFab definindo seu nome, sua agregação e seu comportamento de redefinição e, em seguida, grave os valores dos jogadores para acompanhar a progressão ao longo do tempo.

Neste tutorial, mostramos como criar uma estatística básica usando nosso novo serviço de estatísticas. Vamos começar com um
exemplo de um jogo de tiro que deseja acompanhar sempre que um jogador acerta um tiro de longa distância.

## Criando uma estatística

A primeira etapa é criar uma definição de estatística que inclua os principais elementos para acompanhar os tiros de longa distância. Para o nosso jogo de tiro,
precisamos apenas de uma coluna para a distância do tiro. O exemplo a seguir mostra como criar a definição de estatística usando o SDK do C#.

```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);
}
```

Agora, vamos explicar alguns elementos principais deste exemplo:

* `AuthenticationContext`: este parâmetro trata toda a autenticação por trás de cada solicitação aos nossos serviços. Para uma explicação detalhada,
  você pode consultar a seguinte página:  [Início rápido de estatísticas](/pt-BR/services/playfab/player-progression/statistics/quickstart-statistics).
* `Name`: este parâmetro ajuda a identificar a definição da estatística. É importante usar algo relevante aqui, pois ele será
  usado para fazer outras solicitações para recuperar informações
* `EntityType`: este parâmetro especifica o tipo de entidade para o qual você deseja criar sua estatística.
  Você pode saber mais aqui: [Modelo de programação de entidades](/pt-BR/services/playfab/live-service-management/game-configuration/entities).
* `VersionConfiguration`: este parâmetro permite definir uma estratégia de controle de versão para estatísticas que se redefinem
  após um determinado período. Esse conceito é abordado em detalhes aqui:  [Estatísticas sazonais](/pt-BR/services/playfab/player-progression/statistics/seasonal-statistics).
* `Columns`: aqui, definimos o número de colunas da nossa estatística, com no máximo 5 por definição. Neste exemplo, definimos apenas uma coluna para os tiros de longa distância.
  Também definimos o `AggregationMethod` como Max, o que significa que a estatística só será atualizada quando o novo valor for maior que
  o anterior.
  * O `AggregationMethod` tem quatro valores possíveis:
    * `Max`: o novo valor precisa ser maior que o anterior.
    * `Min`: o novo valor precisa ser menor que o anterior.
    * `Last`: sempre atualiza com o valor mais recente.
    * `Sum`: o valor anterior e o novo são somados.

Com todas as informações claras, agora você está pronto para executar o exemplo e criar sua primeira estatística.

### Obtendo uma definição de estatística

Antes de adicionar dados a esta estatística, queremos garantir que ela foi criada corretamente. Para isso, fornecemos um exemplo de
como você pode recuperar sua definição de estatística.

```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)
}
```

Para recuperar a definição da estatística, especifique o nome da estatística que você criou. Se você tiver várias
definições de estatísticas, poderá usar o próximo exemplo para obter todas as suas definições de estatísticas com uma única solicitação.

```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);
           
}
```

### Atualizando uma definição de estatística

Se quiser atualizar sua definição de estatística, você pode fazer isso da seguinte forma:

```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);

}

```

Observe que Columns, EntityType e ResetInterval não podem ser modificados como parte da atualização.

````C# theme={null}

### Excluindo a definição de estatística

Se quiser excluir sua definição de estatística para adicionar mais colunas ou corrigir alguns erros, você pode fazer isso da seguinte forma:

 
``` 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);    
\}
````

## Adicionando dados a uma estatística

Continuando com nosso exemplo de jogo de tiro, agora sabemos como criar uma definição de estatística, recuperá-la e excluí-la, se necessário.
Nossa próxima etapa é começar a adicionar dados à nossa estatística.

Lembre-se de que essas estatísticas são baseadas em entidades, o que significa que as entradas são entidades.
No nosso exemplo específico, estamos usando o tipo de entidade title\_player\_account, portanto, nossa estatística acompanha as informações de um jogador.
No entanto, lembre-se de que há outros tipos de entidade que você também pode usar.
Você pode conferi-los aqui: [Tipos de entidade internos disponíveis](/pt-BR/services/playfab/live-service-management/game-configuration/entities/available-built-in-entity-types).

Agora, vamos nos aprofundar em como podemos adicionar dados à nossa estatística.

```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);
\}
```

Agora, vamos explicar alguns elementos principais deste exemplo:

* `Entity`: este parâmetro corresponde à entidade a partir da qual queremos fazer a atualização da estatística.
* `Statistics`: este parâmetro corresponde ao conjunto real de estatísticas de uma entidade.
* `StatisticUpdate`: este parâmetro corresponde aos valores das estatísticas que serão adicionados.
  * `Scores`: este parâmetro corresponde à lista de pontuações que você pode adicionar a uma entidade. Lembre-se de que as estatísticas podem ter mais de uma coluna.
    Você pode conferir esses conceitos em detalhes aqui: [Fazendo mais com estatísticas](/pt-BR/services/playfab/player-progression/statistics/doing-more-statistics)
  * `Name`: este parâmetro corresponde ao nome da estatística definido ao criar a definição de estatística.

Com esses conceitos claros, agora você está pronto para adicionar dados à sua estatística.

## Recuperando dados de uma estatística

Vamos fazer uma rápida recapitulação. Neste ponto, você criou uma estatística, verificou todos os detalhes de configuração
e começou a adicionar dados a ela. Agora, vamos imaginar que alguns jogadores já começaram a jogar seu jogo,
todos com tiros de longa distância impressionantes. Queremos consultar um deles. No exemplo a seguir,
mostramos como fazer isso.

```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)\}");
    \}
\}
```

Aqui, consultamos todas as estatísticas associadas a uma entidade e, em seguida, imprimimos o nome com o valor correspondente.

## Excluindo valores de estatísticas

Nossas estatísticas estão funcionando conforme o esperado, e temos vários jogadores no seu jogo. No entanto,
começamos a notar um comportamento incomum no jogo. Então, decidimos recomeçar e excluir os dados da nossa estatística.
No próximo exemplo, você pode ver como excluir os dados da sua estatística.

```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);     
 \}
```

Agora, vamos explicar alguns elementos principais deste exemplo:

* `Entity`: este parâmetro é a entidade da qual você deseja excluir.
* `List<StatisticDelete>`: este parâmetro é uma lista dos nomes das estatísticas que você deseja excluir.

## Conclusões

Neste tutorial, aprendemos a fazer as seguintes operações:

* Criar uma estatística
* Verificar a configuração de uma estatística
* Atualizar a configuração de uma estatística
* Excluir a configuração da estatística
* Preencher a estatística
* Excluir entradas da estatística.

## Confira também

* [Fazendo mais com estatísticas](/pt-BR/services/playfab/player-progression/statistics/doing-more-statistics).
* [Estatísticas sazonais](/pt-BR/services/playfab/player-progression/statistics/seasonal-statistics).
* [Adicionar dados contextuais às estatísticas](/pt-BR/services/playfab/player-progression/statistics/metadata-statistics).
* [Gravações transacionais](/pt-BR/services/playfab/player-progression/statistics/transactional-writes)
* [Referência de API](/pt-BR/services/playfab/player-progression/statistics/api-reference).
* [Limites](/pt-BR/services/playfab/player-progression/statistics/limits-statistics).
* [Cota](/pt-BR/services/playfab/player-progression/statistics/quota-statistics)


## Related topics

- [Estatísticas sazonais](/pt-BR/services/playfab/player-progression/statistics/seasonal-statistics.md)
- [Fazendo mais com estatísticas](/pt-BR/services/playfab/player-progression/statistics/doing-more-statistics.md)
- [Classificando jogadores por estatísticas](/pt-BR/services/playfab/community/leaderboards/leaderboards-linked-to-stats.md)
- [Documentação de progressão do jogador do PlayFab](/pt-BR/services/playfab/player-progression/index.md)
- [Configurar estatísticas em destaque no Partner Center](/pt-BR/publishing/game-publishing/how-to/data-platform-2013/how-to-configure-featured-stats.md)
