Buscar K
Aparência
Aparência
Esta receita resolve um fluxo recorrente: fazer o filtro de data da Dashboard chegar aos Widgets, usar datas diferentes em Widgets diferentes (emissão em um, entrega em outro) e fazer cada Widget responder na sua própria granularidade (um por dia, outro pelo mês inteiro da data escolhida).
O exemplo condutor é um Fato Faturamento com duas datas: DATA_EMISSAO e DATA_ENTREGA.
DATA_EMISSAO, DATA_ENTREGA e VALOR.Se a análise usa um Fato e uma só data, não é preciso Tabela Calendário. Basta definir um Filtro Padrão na Aplicação para que ela já abra na data desejada.
DATA_EMISSAO).TIP
O Filtro Padrão é reaplicado toda vez que a Aplicação é reaberta.
Quando há mais de um Widget (ou mais de um Fato), o filtro precisa de uma ponte: a Tabela Calendário. Ao filtrar pela Dimensão Calendário, o filtro se propaga para todos os Fatos conectados a ela.
Calendário.DATA à coluna de data do Fato (Faturamento.DATA_EMISSAO).Calendário.DATA (não a coluna de data do Fato). Assim um único filtro alimenta todos os Widgets.Se um Widget tem um Filtro Pré-Aplicado de data próprio, esse filtro vale só para aquele Widget, independentemente do filtro global da Dashboard. É a causa mais comum de "mudei o filtro da Dashboard e o KPI não respondeu".
Para o KPI responder à Dashboard:
Calendário, deixando o filtro global cuidar do período.Se o Widget precisa mesmo de um período próprio derivado do filtro global, use a abordagem do Passo 4.
Para um Widget analisar por emissão e outro por entrega, mantenha uma única Tabela Calendário e cadastre uma chave de Relacionamento secundária. Veja o conceito em Relacionamento Fantasma.
Calendário.DATA = Faturamento.DATA_ENTREGA. A primeira chave (DATA_EMISSAO) continua sendo a padrão.use():use([Calendário], [Faturamento].DATA_ENTREGA) SUM([Faturamento].VALOR)Agora o filtro da Dashboard (sobre Calendário.DATA) alimenta os dois Widgets, cada um pela sua data.
Cenário do "quem for mês mantém mês": o usuário escolhe um dia no filtro da Dashboard, e um Widget configurado por mês mostra o mês inteiro daquela data.
Um filtro é um valor só. Filtrar Calendário.DATA em um dia restringe tudo àquele dia. Para um Widget reinterpretar essa seleção na sua própria granularidade, use duas peças de Expressões:
<...>: <[Calendário]."DATA":START, CURRENT_DATE> devolve o início do período filtrado (ou CURRENT_DATE se não houver filtro).${ EXPRESSÃO, FILTRO } e as funções de data.Exemplo (Widget que sempre mostra o mês da data selecionada):
${
SUM([Faturamento]."VALOR"),
[Calendário]."DATA" BETWEEN
MONTHSTART(<[Calendário]."DATA":START, CURRENT_DATE>)
AND
MONTHEND(<[Calendário]."DATA":START, CURRENT_DATE>)
}Trocando as funções de data, o mesmo padrão cobre qualquer granularidade. Abreviando <[Calendário]."DATA":START, CURRENT_DATE> como <sel>:
| Comportamento desejado no Widget | Filtro dentro do ${...} |
|---|---|
| Sempre o mês da data selecionada | [Calendário]."DATA" BETWEEN MONTHSTART(<sel>) AND MONTHEND(<sel>) |
| Sempre o ano da data selecionada | [Calendário]."DATA" BETWEEN YEARSTART(<sel>) AND YEAREND(<sel>) |
| Sempre a semana da data selecionada | [Calendário]."DATA" BETWEEN WEEKSTART(<sel>) AND WEEKEND(<sel>) |
| Últimos 3 meses a partir da seleção | [Calendário]."DATA" BETWEEN SUBMONTHS(<sel>, 3) AND <sel> |
| Últimos 12 meses a partir da seleção | [Calendário]."DATA" BETWEEN SUBMONTHS(<sel>, 12) AND <sel> |
Para combinar granularidade própria com uma data alternativa (entrega), use as duas técnicas juntas: use() para a chave e ${...} para o período.
TIP
A lista completa de funções (MONTHSTART, YEARSTART, SUBMONTHS, ADDYEARS, etc.) está em Funções de Data.
A Tabela Calendário é gerada uma vez no HorusETL com um nó Python (Pandas). O script pronto, que cria um calendário dos últimos 5 anos com colunas de ano, mês, trimestre e dia da semana, está documentado no hub de modelagem:
➡️ Gerando uma Tabela Calendário
Depois de gerar e publicar a Tabela no DW, volte ao Passo 2 para ligá-la ao Fato.
| Necessidade | Recurso |
|---|---|
| Abrir já filtrado por uma data | Filtro Padrão na Aba Geral |
| Filtro da Dashboard chega aos Widgets | Tabela Calendário + filtrar por Calendário.DATA |
| Widget ignora o filtro global | Remover Filtro Pré-Aplicado fixo do Widget |
| Datas diferentes por Widget | Relacionamento Secundário + use() |
| Granularidade própria por Widget | <...> + ${...} + funções de data |