Pular para o conteúdo

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]
VerboRespondeA ponta
janela(col, n, agregacao)a média (ou soma, máximo…) dos últimos nvoid até haver n valores válidos
acumulado(col, agregacao)o total (ou máximo…) até a linhaa 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 anteriorvoid se a anterior for 0 ou ausente
ranquear(col)a posição, 1 é o maiora ausência não entra e sai void