Janelas
Média móvel, acumulado, defasagem, variação e posição — os cinco verbos de janela do Quadro.
As cinco perguntas de toda série: a média dos últimos dias, o total até agora, o valor de ontem, quanto variou, qual a posição. São cinco verbos do Quadro, e cada um devolve um quadro novo com uma coluna a mais.
dataforge
adopt Arcane.Quadro as Q
vendas := Q.de_vaults([
{"dia": "2026-09-01", "loja": "centro", "valor": 120},
{"dia": "2026-09-02", "loja": "centro", "valor": 150},
{"dia": "2026-09-03", "loja": "centro", "valor": void},
{"dia": "2026-09-04", "loja": "centro", "valor": 90},
{"dia": "2026-09-05", "loja": "centro", "valor": 200},
{"dia": "2026-09-01", "loja": "norte", "valor": 80},
{"dia": "2026-09-02", "loja": "norte", "valor": 60}])
centro := vendas.onde(lambda l: l["loja"] is "centro").ordenar("dia")
q := centro
.janela("valor", 2)
.acumulado("valor")
.defasar("valor")
.variacao("valor")
.ranquear("valor")
out q.pegar("dia", "valor", "valor_media_2", "valor_soma_acumulado", "valor_variacao", "valor_posicao").texto()
assert q.coluna("valor_soma_acumulado") is [120, 270, 270, 360, 560]
assert q.coluna("valor_antes_1") is [void, 120, 150, void, 90]
assert q.coluna("valor_posicao") is [3, 2, void, 4, 1]| Verbo | Responde | A ponta |
|---|---|---|
janela(col, n, agregacao) | a média (ou soma, máximo…) dos últimos n | void até haver n valores válidos |
acumulado(col, agregacao) | o total (ou máximo…) até a linha | a ausência é pulada, não zera |
defasar(col, n) | o valor de n linhas atrás (-n: à frente) | void fora do quadro |
variacao(col) | a razão em relação à linha anterior | void se a anterior for 0 ou ausente |
ranquear(col) | a posição, 1 é o maior | a ausência não entra e sai void |