Depois da Pokédex em Power BI, quis aplicar a mesma ideia a dados que mudam todo dia: as minhas partidas de Dota 2. O resultado é o Dotinha, um relatório que mostra as últimas partidas, compara com a carreira inteira e ainda traz a enciclopédia de heróis e itens com os textos oficiais em português.
Ele está publicado e aberto: abra o relatório no Power BI. O código está no GitHub.

As páginas
Perfil. Medalha, MMR estimado, vitórias e derrotas da carreira e a forma recente. Os KPIs das últimas partidas (KDA, GPM, XPM, dano, duração) vêm com a variação contra a média da carreira, para responder a pergunta que interessa: estou jogando melhor ou pior do que costumo? Abaixo, um cartão por partida, o gráfico de GPM e XPM e os destaques, como melhor KDA e maior dano.
Partidas. A lista das partidas com filtros (vitórias, derrotas, modo de jogo e herói) e, ao clicar, o placar completo: os dez jogadores com medalha, K/D/A, net worth, dano e itens. Também há gráficos da partida (net worth, dano e abates) e os itens com que eu terminei o jogo.

Heróis. Os 127 heróis com nomes, habilidades, talentos e história em português, além do vídeo animado de cada um. Cada ficha traz o meu histórico com aquele herói: partidas na carreira, winrate, quantas vezes joguei com ou contra ele e as partidas recentes. Também dá para ouvir as falas de cada herói.

Itens. O catálogo com nomes em português, a receita (componentes e no que cada item se transforma) e quantas vezes eu e os outros jogadores compramos aquele item nas últimas partidas.

Aliados. As pessoas com quem eu mais joguei: partidas juntos, winrate em dupla comparado ao meu winrate geral e as últimas partidas em que estávamos no mesmo time.
Arena RPG. Um minijogo por turnos: você escolhe dois heróis e o nível, e a cada turno ataca, usa uma habilidade, defende ou bebe uma poção. Vida, mana, armadura e dano das habilidades vêm dos valores oficiais do jogo, e o inimigo responde com uma IA simples. Tem efeitos sonoros e as falas dos heróis.

Como funciona
Duas fontes públicas. As partidas, a carreira, os aliados e as constantes do jogo vêm da API do OpenDota. Os textos em português (heróis, habilidades, talentos e itens) vêm do datafeed oficial da dota2.com. Uma atualização faz cerca de 25 chamadas ao OpenDota e 130 ao datafeed, uma por herói.
Dois parâmetros. AccountID define o jogador e QtdPartidas, quantas partidas carregar. Troque o ID e o relatório inteiro passa a analisar outra pessoa.
O mesmo padrão da Pokédex. Cada página é um único visual HTML Content. Medidas DAX entregam os dados como objetos JavaScript, e um motor compartilhado monta as telas. Ao todo, são 97 medidas. O código de cada página fica em arquivos comuns (src/), e scripts em Python empacotam tudo nas medidas e regeneram o modelo (TMDL) e as páginas (PBIR).
O detalhe que faz a atualização agendada funcionar
Este foi o aprendizado mais útil do projeto, e serve para qualquer relatório que consome uma API.
O Power BI Service só agenda a atualização de uma fonte web se conseguir reconhecer a fonte antes de rodar a consulta. Se a URL for montada com texto concatenado, por exemplo "https://api.opendota.com/api/players/" & AccountID, o serviço trata a fonte como dinâmica e não deixa agendar.
A solução é manter a URL base fixa e mandar o resto pelo RelativePath. No Dotinha, toda chamada passa por uma função assim:
fnOpenDota = (relativePath as text) as any =>
let
bruto = Web.Contents(
"https://api.opendota.com",
[
RelativePath = relativePath,
Headers = [Accept = "application/json"]
]
)
in
Json.Document(bruto)E as consultas chamam fnOpenDota("api/players/" & Number.ToText(AccountID) & "/matches"). A parte variável continua lá, mas fora da URL base.
Com isso, a atualização agendada roda sem gateway. No serviço, as duas fontes ficam com acesso anônimo, nível de privacidade Público e a opção Ignorar conexão de teste marcada, porque a raiz dos sites não devolve JSON e o teste falharia.
Experimente
- Abra o relatório publicado. As imagens e os vídeos vêm da CDN da Steam, então a primeira carga leva alguns segundos.
- Em Partidas, clique numa partida para abrir o placar.
- Em Heróis, abra a ficha de um herói e ouça as falas.
- Na Arena RPG, escolha dois heróis e clique em Lutar.
Quer analisar a sua conta? Baixe o projeto no repositório, troque o AccountID e atualize. E se você precisa ligar o Power BI a uma API com atualização agendada, me mande uma mensagem.
Dados: OpenDota e dota2.com. Dota 2 e marcas relacionadas pertencem à Valve. Projeto pessoal, sem fins comerciais.