O POWER BI É PARA VOCÊ

Ter visão 360º de sua empresa já é possível com
o Microsoft Power BI.

Julho 23, 2020

A criação da Tabela Calendário em aplicações de BI é algo praticamente mandatório, você sabe por quê? 

Na grande maioria das aplicações de BI você terá a necessidade de criar cálculos ao longo do tempo, números por período, números por dia da semana, comparativos entre este mês e o mês passado e muito mais. Com a tabela calendário todas estas informações estarão sempre prontas quando você precisar.  

É verdade que você pode usar fórmulas para extrair estas informações no momento que você precisar, ou ainda criar estas colunas na sua tabela de dados, por exemplo, onde você tem suas vendas registradas. Mas esta não é a melhor solução, criar várias colunas em sua tabela de dados só vai aumentar o tamanho do seu arquivo desnecessariamente. Realizar os cálculos toda vez que você precisar deles vai deixar o seu desenvolvimento e sua aplicação mais lentos.  

O segundo motivo é que você terá todas as datas existentes no período analisado, suponha que você esteja carregando uma base de vendas de uma empresa que trabalha somente em dias úteis, dentro da sua base não existirão valores para as datas de fim de semana ou feriados. Isso pode te trazer alguns problemas em algumas análises.  

O terceiro motivo pelo qual você deve ter uma tabela calendário na sua aplicação é que é muito fácil criá-la no Power BI. Veja como você pode fazer isso: 

A primeira coisa a fazer e criar uma tabela calculada no Power BI usando DAX, você pode ir em “modelagem” e depois em “Nova Tabela”, no grupo “Cálculo” 

Você terá então a barra de fórmula DAX, semelhante ao que você usa para criar colunas calculadas e medidas. A primeira decisão que você precisa tomar é: 

1 – QUAL FÓRMULA USO PARA CRIAR A TABELA CALENDÁRIO: CALENDAR()  OU CALENDARAUTO()?  

A primeira fórmula para criar a tabela calendário no Power BI é através da função DAX CalendarAuto(), esta função análise o seu modelo de dados e se encarrega de criar a tabela calendário automaticamente. É uma ótima opção para modelos de dados simples, mas pode ser ruim se você tiver uma base de dados com muitas colunas de dada. Um problema comum é quando você tem a data de nascimento no seu cadastro de clientes, isso pode gerar uma tabela calendário com datas que você não pretende utilizar em suas análises.  

Para ter maior controle você pode usar a função DAX Calendar(), e nela informar a data inicial e a data final da sua análise. Mas nunca, NUNCA MESMO, crie uma tabela calendário com datas fixas, digitando as datas na fórmula. Você deve criar esta Tabela de forma dinâmica, utilizando uma lógica para encontrar a primeira data do calendário e a última data que você pretende utilizar dentro da sua análise.  

Por exemplo, você pode pegar a data da sua primeira e última venda existentes em sua base de dados. Para isso você pode utilizar as funções DAX FirstDate() e LastDate() e ainda levar a sua data para a primeira data do ano inicial (01/01) e a última data do ano final (31/12). Algo como esta fórmula abaixo: 

Isso irá gerar na sua base uma tabela com todas as datas existentes no período de sua análise.  

Agora você pode renomear a coluna criada com o nome Date, e definir o formato como Data. (o Power BI cria como Data/Hora)  

2 – CRIANDO AS DEMAIS COLUNAS NA TABELA CALENDÁRIO: 

Depois que você criou a base da tabela calendário, basta adicionar as colunas que normalmente você vai utilizar em suas análises, eu costumo criar sempre as seguintes colunas: 

Ano = ‘Calendário'[Data].[Ano] 
Mês = ‘Calendário'[Data].[Mês] 
MêsN = ‘Calendário'[Data].[MonthNo] 
Dia = ‘Calendário'[Data].[Dia] 
Quarter = “Q”&’Calendário'[Data].[QuarterNo] 
Semana = WEEKNUM(‘Calendário'[Data], 2) 
DiaSemanaN = WEEKDAY(‘Calendário'[Data],2) 
Dia da Semana = FORMAT(‘Calendário'[Data],”DDD”) 
Dia Útil = IF(‘Calendário'[Dia Semana Número] <=5 , 1, 0 ) 
Anos Relativos = DATEDIFF(‘Calendário'[Data], TODAY(),YEAR) 
Meses Relativos = DATEDIFF(‘Calendário'[Data], TODAY(), MONTH) 
IsYeartoDate = ‘Calendário'[MêsN] *100 + ‘Calendário'[Dia] <= MONTH(TODAY())*100 + DAY(TODAY()) 

É só clicar “nova coluna” e utilizar as fórmulas acima, uma por uma. Você deve criar aqui todas as colunas que fizerem sentido em suas análises.  

3 – ORDENANDO OS CAMPOS DE DATA E DIA DA SEMANA: 

Depois que você criar colunas com o dia da semana ou o nome do mês, você precisa classificar estas colunas na ordem correta, foi para isso que criamos o número do mês e o número do dia da semana.  

Para isso, clique na coluna a ser classificada e, no menu “Ferramentas de coluna”, clique em “Classificar por coluna” e escolha a coluna numérica com a ordem desejada.  

 

4 – INCLUINDO A TABELA CALENDÁRIO NO SEU MODELO DE DADOS: 

Após a criação da tabela calendário, você deve ir até o seu modelo de dados e fazer o link da data do calendário com a data da sua tabela de dados.  

A partir deste momento, aquela hierarquia de datas que existia na data original passa para a tabela calendário e, a partir de agora, você deve passar a utilizar somente os campos da tabela calendário.  

BÔNUS – SCRIPT PARA CRIAR TABELA CALENDÁRIO: 

Você pode criar a tabela calendário e todas as colunas de uma só vez, através de um script. 

Eu costumo usar o seguinte script para criar minhas tabelas calendário, você só precisa criar uma tabela calculada e colar o script abaixo. 

Calendário =  

VAR MinData = MIN(‘Pedidos (ORDR)'[_DataDoc (DocDate)]) 

VAR MaxData = MAX(‘Notas (OINV)'[_DataDoc (DocDate)]) 

VAR datas =  

    CALENDAR( 

        DATE(YEAR(MinData), 1, 1), 

        DATE(YEAR(MaxData), 12, 31) 

    ) 

RETURN 

ADDCOLUMNS( 

    datas, 

    “Ano”, YEAR([Date]), 

    “Trimestre Num.”, QUARTER([Date]), 

    “Trimestre”, CONCATENATE(“Trim “, FORMAT([Date], “Q”)), 

    “Mês Num.”, MONTH([Date]), 

    “Mês Abrev.”, FORMAT([Date], “MMM”), 

    “Mês”, FORMAT([Date], “MMMM”), 

    “Dia”, DAY([Date]), 

    “Dia da Semana Num.”, WEEKDAY([Date]), 

    “Dia da Semana”, FORMAT([Date], “DDD”), 

    “Ano e Mês Num.”, YEAR([Date]) * 100 + MONTH([Date]), 

    “Ano e Mês”, FORMAT([Date], “MMM YY”), 

    “Semana do Ano”, WEEKNUM([Date]), 

    “Ano e Semana Num.”, YEAR([Date]) * 100 + WEEKNUM([Date]), 

    “Ano e Semana”, FORMAT([Date], “YYYY-WW”), 

    “Dia e Semana”, FORMAT([Date], “DDD DD”), 

    “IsToDate”, [Date] <= MaxData, 

    “IsYearToDate”, (MONTH([Date]) * 100 + DAY([Date])) <= 
           (MONTH(MaxData) * 100 + DAY(MaxData)), 

    “IsMonthToDate”, DAY([Date]) <= DAY(MaxData), 

    “Semestre”, CONCATENATE(“Sem. “, ROUNDUP(MONTH([Date])/6, 0)), 

    “Quinzena”, CONCATENATE(“q”, ROUNDUP( DAY([Date]) / 
           (DAY(EOMONTH([Date], 0)) / 2), 0)) 

)  

Fonte: Trinityrs