Últimas Novidades

Tabela de Calendário

 

Neste artigo iremos trabalhar com a tabela de CALENDÁRIO do PowerBI. Para isto vamos utilizar, e para isto vamos utilizar a função DAX.

Para que ela fique correta, podemos fazer de duas maneiras: 

a) Usando a função CALENDARAUTO
O melhor uso desta função é a partir da criação de tabela com linguagem DAX. Criar uma tabela assim é simples, veja abaixo como fazer.


 Nela teremos a barra de fórmula onde iremos incluir a função e esta função tem a seguinte sintaxe:

Estrutura da fórmula: Nome da Tabela = CALENDARAUTO(<mês_final_do_ano>)

Onde o conteúdo <mês_final_do_ano> é uma expressão DAX que retorna um inteiro de 1 a 12. Se omitido, o padrão será o valor especificado no modelo de tabela de calendário para o usuário atual, se houver; caso contrário, o padrão será 12.


Valor retornado

Retorna uma tabela com apenas uma coluna chamada "Date" que contém um conjunto contíguo de datas. O intervalo de datas é calculado automaticamente com base nos dados no modelo.

Comentários

O intervalo de datas é calculado da seguinte maneira:

1) A primeira data no modelo que não está em uma coluna calculada ou tabela calculada é considerada como MinDate.
2) A última data no modelo que não está em uma coluna calculada ou tabela calculada é considerada como MaxDate.
3) O intervalo de datas retornado corresponde às datas entre o início do ano fiscal associado a MinDate e o fim do ano fiscal associado a MaxDate.
4) Um erro será retornado se o modelo não contiver nenhum valor de data e hora que não esteja em colunas calculadas ou tabelas calculadas.
5) Não há suporte para a função ser usada no modo DirectQuery quando usada em regras RLS (segurança em nível de linha) ou colunas calculadas.

Exemplo

Neste exemplo, MinDate e MaxDate no modelo de dados são 1º de julho de 2010 e 30 de junho de 2011.

CALENDARAUTO() retornará todas as datas entre 1º de janeiro de 2010 e 31 de dezembro de 2011.

CALENDARAUTO(3) retornará todas as datas entre 1º de março de 2010 e 28 de fevereiro de 2012.

Segue um exemplo de código simples e direto para montagem da tabela de Calendário, basta copiar e colar.

tbCalendario = ADDCOLUMNS(
        CALENDARAUTO(),
            "Ano", YEAR([Date]),
            "Mês Num", MONTH([Date]),
            "Trim", FORMAT([Date], "q"),
            "Semana Ano", WEEKNUM([Date]),
            "Dia Semana", WEEKDAY([Date]),
            "Mês", FORMAT([Date], "mmm"),
            "Mês Completo", FORMAT([Date], "mmmm"),
            "Mês_Ano", FORMAT(MONTH([Date]), "00") & "/" & YEAR([Date]),
            "Mês-Ano", UPPER(FORMAT(MONTH([Date]), "mmm")) & "/" & YEAR([Date]),
            "Trim_Ano", FORMAT([Date], "q") & "T" & YEAR([Date]),
            "Dia_Semana", FORMAT([Date], "ddd")
)


b) Usando a função CALENDAR

Esta função é similar a anteior, mas com uma pequena diferença, eu posso informar qual a data mínima e qual a data máxima, ou seja, de uma tabela com as datas DATA DE EMISSÃO, DATA DE VENCIMENTO e DATA DE BAIXA, ao usar o CALENDARAUTO ele vai validar todos estes campos de datas, de uma única vez.

Mas vamos supor que você quer que trate somente uma coluna, como por exemplo DATA DE VENCIMENTO, para isto, basta trocar a função.

Vamos utilizar o mesmo exemplo acima, para um melhor entendimento.

tbCalendario = ADDCOLUMNS(
        CALENDAR(MIN(Fato[Vencimento]), max(Fato[Vencimento])),
            "Ano", YEAR([Date]),
            "Mês Num", MONTH([Date]),
            "Trim", FORMAT([Date], "q"),
            "Semana Ano", WEEKNUM([Date]),
            "Dia Semana", WEEKDAY([Date]),
            "Mês", FORMAT([Date], "mmm"),
            "Mês Completo", FORMAT([Date], "mmmm"),
            "Mês_Ano", FORMAT(MONTH([Date]), "00") & "/" & YEAR([Date]),
            "Mês-Ano", UPPER(FORMAT(MONTH([Date]), "mmm")) & "/" & YEAR([Date]),
            "Trim_Ano", FORMAT([Date], "q") & "T" & YEAR([Date]),
            "Dia_Semana", FORMAT([Date], "ddd")
)
Repare que as funções são parecidas, com a excessão da segunda linha, onde eu determino a coluna DATE.
Gostou da dica? Comente e compartilhe!

Nenhum comentário