Como criar um slicer de Data relativo em Power BI: passo a passo
Vamos criar um slicer de Data relativo em Power BI que permite ao utilizador escolher intervalos como Últimos 7, 30 ou 90 dias. Um slicer relativo torna os relatórios dinâmicos — útil para dashboards operacionais e análises de tendência sem ter de ajustar filtros manualmente. Isto é especialmente prático em relatórios que são consultados diariamente por equipas que precisam de ver rapidamente o desempenho dos últimos dias úteis: por exemplo, resumo de vendas dos últimos 7 dias ou métricas de suporte dos últimos 30 dias.
Pré-requisitos
- Power BI Desktop instalado (versão recente).
- Uma tabela de factos com uma coluna de Data (Date) ou datetime. Idealmente a tabela tem pelo menos 10k–500k linhas; se tens milhões de linhas podes precisar de optimizar o modelo.
- Noções básicas de Power Query e DAX.
Passo 1: Criar uma tabela calendário se não existir
Uma tabela calendário é essencial para trabalhar com filtros relativos e funções de tempo em DAX. Se já tiveres uma Date table, salta para o Passo 2. Abaixo criamos uma tabela simples em DAX chamada Calendar que cobre um intervalo plausível (por exemplo 2020–2030). Podes ajustar as datas ao teu histórico real de dados.
Calendar =
ADDCOLUMNS(
CALENDAR(DATE(2020,1,1), DATE(2030,12,31)),
"Year", YEAR([Date]),
"Month", FORMAT([Date], "yyyy-MM"),
"DayOfWeek", WEEKDAY([Date])
)
Depois de criar a tabela, marca-a como Date table em Modelagem > Mark as date table e escolhe a coluna Date. Isto melhora a performance e compatibilidade com funções de time intelligence como TOTALYTD. Se o teu dataset tem datas futuras (ex.: encomendas planeadas), certifica-te de que a Calendar cobre esse alcance.
Passo 2: Relacionar a tabela calendário com a tabela de factos
Cria uma relação entre Calendar[Date] e FactTable[Date] (1:*). A relação deve ser activa e com direcção de filtro single por defeito. Sem relação, o slicer não afectará as medidas correctamente. Em cenários com múltiplas colunas de data (DataVenda, DataExpedição) considera criar relações inactivas e usar USERELATIONSHIP nas medidas quando necessário.
Passo 3: Criar uma tabela de opções de intervalo (Slicer de períodos)
Vamos criar uma tabela manual com as opções que queremos apresentar ao utilizador. Isto facilita a lógica DAX depois e permite adicionar facilmente mais opções como "Mês corrente" ou "Trimestre corrente".
RelativePeriod =
DATATABLE(
"PeriodLabel", STRING,
"DaysBack", INTEGER,
{
{"Últimos 7 dias", 7},
{"Últimos 30 dias", 30},
{"Últimos 90 dias", 90},
{"Ano até hoje", 365}
}
)
Coloca um slicer no relatório com RelativePeriod[PeriodLabel]. Recomendo definir o slicer para permitir apenas uma selecção (single select) se a lógica da medida assumir um único valor; se quiseres permitir múltiplas selecções, vê o passo 5.
Passo 4: Criar uma medida que aplica o filtro relativo
Em vez de filtrar todas as visualizações manualmente, criamos uma medida que calcula, por exemplo, Vendas nos últimos N dias conforme a selecção do slicer. A medida abaixo assume que o contexto temporal está ancorado na data máxima visível (p.ex. hoje ou a data mais recente no conjunto de dados).
Vendas Últimos Períodos =
VAR SelectedDays = SELECTEDVALUE(RelativePeriod[DaysBack], 7)
VAR MaxDate = MAX('Calendar'[Date])
VAR MinDate = MaxDate - SelectedDays + 1
RETURN
CALCULATE(
SUM(FactTable[Vendas]),
FILTER(ALL('Calendar'), 'Calendar'[Date] >= MinDate && 'Calendar'[Date] <= MaxDate)
)
Explicação: SelectedDays lê o valor do slicer e assume 7 como valor por defeito se nada for seleccionado. Calculamos MinDate e usamos FILTER(ALL('Calendar')) para garantir que o período é aplicado independentemente de outros filtros na visualização. Isto também evita que visuais com eixos de data sejam truncados por filtros indesejados.
Passo 5: Usar a medida nas visualizações e tratar erros comuns
Arrasta a medida Vendas Últimos Períodos para um cartão ou gráfico de tendência. Testa com datasets controlados: por exemplo, se o teu FactTable tem 100.000 linhas e 10.000 vendas nos últimos 30 dias, verifica se o cartão mostra esse total. Erros comuns e soluções:
- SELECTEDVALUE devolve BLANK se o utilizador não escolher nada — definimos 7 como valor por defeito no exemplo.
- Se houver múltiplas selecções no slicer, a medida pode não funcionar como esperado; podes usar MAX/MIN para escolher um valor quando existem múltiplas selecções:
-- Exemplo para permitir múltiplas selecções usando o maior período
SelectedDays =
MAX(RelativePeriod[DaysBack])
Outros cuidados: confirma que a relação entre tabelas está activa; se as datas da tabela Calendar não cobrirem o intervalo do FactTable, vais ver valores inesperados. Em modelos grandes, evita usar FILTER(ALL('Calendar')) em medidas muito frequentes sem optimização, pois pode afectar a performance; alternativa: usar DATESINPERIOD para cenários com melhores resultados de performance.
Verificar o resultado
Para confirmar que está correcto: 1) Selecciona "Últimos 7 dias" e verifica se os números são coerentes com os últimos 7 dias do teu dataset (ex.: 1.234 vendas); 2) Muda para 30/90 dias e observa a alteração proporcional (ex.: 30 dias ≈ 3.5× 7 dias, dependendo do negócio); 3) Testa sem seleccionar nada — deve usar o valor por defeito. Podes adicionar cartões auxiliares com MAX('Calendar'[Date]) e MIN calculado para ver o intervalo actual e validar limites.
Conclusão
Implementaste um slicer de Data relativo em Power BI usando uma tabela de períodos e uma medida DAX que aplica o intervalo seleccionado. Esta abordagem torna os relatórios mais flexíveis e amigáveis para os utilizadores finais. Próximos passos: adicionar opções personalizadas (mês corrente, trimestre), criar uma medida que respeite comparações ano-a-ano, ou adaptar a lógica para múltiplas datas na tabela de factos. Dica final: testa sempre com datas-limite (inícios/fins de mês, anos bissextos) e certifica-te de que a Date table cobre todo o histórico e futuro necessário para evitar cortes inesperados nos números.