Selo de estado:
Preview(teto atual do produto) · Curso ACD-350 — Rota rápida: do Power BI/Excel ao ingestia.bi · Aula 2 de 5 · Atualizado em 2026-10-04.
Objetivo#
Ao final desta aula você vai conectar o Power BI ao Gold pelo feed OData, confirmar que o filtro está dobrando para o servidor (query folding) e saber exatamente onde essa superfície para — ela é Preview.
Vídeo#
Identificador no manifesto: acd-350-02-continue-usando-power-bi-odata · duração-alvo 8 min · tela do produto: /connect.
Roteiro:
| # | Capítulo | Minutagem-alvo | Rota |
|---|---|---|---|
| 1 | Abertura — "continue usando o Power BI": o que isso quer dizer de fato | 00:00–00:50 | /connect |
| 2 | Chave de API e a URL do feed na tela Conectar BI | 00:50–02:20 | /connect (cartão Power BI + chaves) |
| 3 | Caminho recomendado: Consulta em Branco + Implementation = "2.0" | 02:20–04:20 | /connect (bloco de código copiável) |
| 4 | Folding na prática: colunas, filtro, $top — e o 501 honesto | 04:20–06:10 | /connect |
| 5 | Refresh incremental com RangeStart/RangeEnd e coluna de partição | 06:10–07:20 | /connect |
| 6 | Encerramento — limites, quota, custo e o gate humano do folding | 07:20–08:00 | /connect |
Conteúdo#
Esta é a aula que sustenta a frase "você pode continuar usando o Power BI". Ela é verdadeira com uma condição que a doc declara em voz alta: a superfície que entrega isso é o feed OData v4, e o estado dela é Preview — funciona e é documentado, sem SLA. A conexão real fim-a-fim com Power BI e Excel (folding e refresh incremental) é validada continuamente por gate humano, não por um número de uptime.
Mapa de conceitos: o que vira o quê
| No Power BI | Aqui | Nota |
|---|---|---|
| Obter Dados → conector nativo | Obter Dados → Feed OData | O formato que o Power BI e o Excel já falam, sem conector custom |
| Gateway de dados local | Nada a instalar | A origem é HTTPS na nuvem; o gateway deixa de existir no desenho |
| Credencial da fonte | Chave de API do workspace | Somente leitura, criada e revogada pelo dono em /connect |
| Tabela do banco | EntitySet do feed | Um por tabela publicada de Gold/Silver; em colisão entre camadas o nome é qualificado com gold_/silver_ |
| Query folding | Pushdown OData ($select, $filter, $top, $orderby, $count) | O que dobra roda no servidor; o que não dobra devolve erro, não silêncio |
| Refresh incremental | RangeStart/RangeEnd + coluna de partição | Mesma receita de sempre; aqui menos bytes = menos custo |
Como aparece no produto
Em /connect ("Conectar BI") o produto mostra a URL base da API, o nome do seu dataset Gold e um cartão por ferramenta — Power BI, Tableau, Looker Studio, Excel. O caminho simples é Obter Dados → Feed OData com a URL …/api/v1/odata?api_key=SUA_CHAVE e autenticação Anônima (lembrando: chave na URL é um segredo na URL). O caminho recomendado passa a chave no cabeçalho:
let
Chave = "SUA_CHAVE",
Fonte = OData.Feed("https://ingestia.io/api/v1/odata", null, [
Headers = [ #"Authorization" = "Bearer " & Chave ],
Implementation = "2.0"
]),
Tabela = Fonte{[Name = "vendas"]}[Data]
in
TabelaImplementation = "2.0" não é detalhe: é ele que faz o Power Query falar OData v4 e dobrar filtros e projeções para o servidor.
O feed nunca mente sobre o filtro
Filtro que o feed não sabe traduzir devolve HTTP 501 com a lista do que é suportado — nunca um resultado "quase certo". Resultado errado é pior que erro. Se vier 501, simplifique o $filter ou aplique aquele passo localmente depois.
Exemplo Aurora
No workspace Aurora Varejo (prefixo aurora), as tabelas publicadas de aurora_gold aparecem como EntitySets do feed. Uma leitura típica, do jeito que o Power Query a dobra:
curl -H "Authorization: Bearer ing_live_..." \
"https://ingestia.io/api/v1/odata/vendas?\$select=data,valor&\$filter=data ge 2026-01-01&\$orderby=data&\$count=true"Traduzindo para o que você faz na interface: escolher colunas virou $select; filtrar linhas virou $filter; ordenar virou $orderby; manter primeiras N linhas viraria $top. A resposta é paginada em páginas de até 1.000 linhas com @odata.nextLink — o Power BI e o Excel seguem o link sozinhos até o fim. Siga sempre o nextLink exatamente como recebido: ele carrega um $skiptoken opaco, e um token adulterado responde 400.
O que NÃO existe nesta superfície
- Subset OData, não OData inteiro: sem
$expand,$apply,$search,$compute, sem lambdas (any/all) e sem aritmética dentro do filtro; em texto, sócontains,startswitheendswith. Fora do subset =501explícito.$format: apenas JSON. - Sem recorte por membro neste canal. A chave é de nível workspace e enxerga todos os marts publicados; chave por membro com segurança por linha é
Roadmap. Colunas marcadas como PII nunca saem pela API — nem no$metadata. - Sem colunas
STRUCT/RECORDno feed: publique colunas planas. - Sem API REST de consulta liberada.
/api/v1/querye/api/v1/tablesestão fora de GA — o caminho recomendado hoje é justamente o OData. - Sem escrita. A plataforma é somente leitura neste canal;
INSERT/UPDATEéRoadmap.
Custo, quota e falha
Você paga pelos bytes realmente processados; o cabeçalho x-ingestia-cost-brl mostra o valor, hoje uma projeção, não preço faturado garantido. Cada chamada entra na auditoria como api.odata.read, separável do BI nativo. A quota é de 120 requisições/min por chave (240/min por workspace) e é separada do resto da plataforma — puxar dados pelo Power BI não degrada o painel nativo; estouro responde 429 com Retry-After. Profundidade máxima: 1.000.000 de linhas por consulta (acima, 400 pedindo filtro). Se a nuvem própria do cliente cair ou o datalake não estiver provisionado, o feed responde 503 — nunca uma coleção vazia, que faria o Excel concluir que "a tabela esvaziou".
Estado da capacidade
OData v4 endurecido + kit Power BI/Excel é a capacidade C10.6, claim Preview: sem SLA, sujeita a ajuste, com a conexão real sob validação humana contínua. Trate como "funciona e é documentado", não como "pode virar o canal crítico da diretoria amanhã".
Faça você mesmo#
No workspace de treino Aurora Varejo (abra /connect no console):
- Crie uma chave de API somente leitura e copie a URL base da API e o nome do dataset Gold mostrados na tela.
- No Power BI Desktop, use Obter Dados → Consulta em Branco → Editor Avançado e cole o
letdesta aula, trocandoSUA_CHAVEpela sua chave e"vendas"pelo EntitySet que aparecer na lista. - Remova as colunas que você não vai usar e filtre
datapor um intervalo (ex.: a partir de 2026-01-01). Clique com o botão direito na última etapa → Exibir consulta nativa, quando disponível, para confirmar que virou$select+$filter. - Peça de propósito algo fora do subset — por exemplo um filtro com aritmética (
valor * 2 > 300) — e observe o501com a lista do que é suportado. - Crie os parâmetros
RangeStarteRangeEnd(Data/Hora), filtre a tabela poreach [data] >= RangeStart and [data] < RangeEnde configure a política de refresh incremental. - Aponte esse filtro para uma coluna de partição e compare o comportamento: a janela lida (e o byte pago) deve cair.
- Confirme no console que as leituras apareceram na auditoria como
api.odata.read. - Anote, em uma linha, o que você não conseguiu dobrar — é o insumo do plano de migração da aula 5.
Você terminou quando o Power BI carregar uma tabela do Gold da Aurora com filtro dobrado para o servidor, você tiver provocado um 501 de propósito e o refresh incremental estiver configurado com RangeStart/RangeEnd.
Checagem rápida#
Três perguntas no final da aula, corrigidas no servidor. A aula só conta como concluída depois da checagem.
Documentação relacionada#
Capacidades ensinadas#
C10.6 — o selo exibido na aula é sempre o estado mais conservador entre as capacidades citadas; nada aqui é "GA".