Criando tabela Calendário no Power BI – Calendarauto() – M

Para a organização ou agrupamento de dados em dimensões de tempo, é muito importante ter uma tabela de calendário no Power BI, abaixo colocarei os códigos para a criação de cada coluna da tabela de datas, facilitando dessa forma o agrupamento por trimestre, semana, mês, dia, etc.

Outro ponto importante é o relacionamento que essa tabela fará com as tabelas
“fato” que armazenam as transações dos dados que serão analisados, então não esqueça de fazer esse passo, caso contrário não será possível organizar os dados corretamente.

Dica: Sempre ordene as colunas de mês pela coluna de número do mês, dessa forma, quando apresentado um gráfico com os dados, eles estarão de Janeiro até Dezembro organizados pelo número do mês e não pelo início do nome do mês.

Para gerar a tabela Calendário, tem mais de uma forma, mas a mais simples que eu acho é criar uma consulta nula, ir em editor avançado e colar o script abaixo:

Para chegar até o editor avançado, com o PowerBI Desktop aberto, tem que ir no menu “Transformar Dados”, na barra lateral a esquerda, logo abaixo de consulta deve aparecer as tabelas já existentes, clicando com o botão da esquerda nesse espaço, vai aparecer uma opção “Nova Consulta”, depois tem que selecionar “Consulta Nula”, por fim, clicar na aba “Exibição” e depois em “Editor Avançado”.

let
Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45WMjDUByIjAwMDpdhYAA==", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [StartDate = _t]),
#"Added Custom" = Table.AddColumn(Source, "EndDate", each Date.AddMonths(DateTime.LocalNow(), 24)),
#"Changed Type2" = Table.TransformColumnTypes(#"Added Custom",{{"EndDate", type date}}),
#"Changed Type" = Table.TransformColumnTypes(#"Changed Type2",{{"StartDate", type date}}),
#"Added Custom1" = Table.AddColumn(#"Changed Type", "Data", each {Number.From([StartDate])..Number.From([EndDate])}),
#"Expanded Data" = Table.ExpandListColumn(#"Added Custom1", "Data"),
#"Changed Type1" = Table.TransformColumnTypes(#"Expanded Data",{{"Data", type date}}),
#"Removed Columns1" = Table.RemoveColumns(#"Changed Type1",{"StartDate", "EndDate"}),
#"Added Custom2" = Table.AddColumn(#"Removed Columns1", "Ano", each Date.Year([Data])),
#"Added Custom4" = Table.AddColumn(#"Added Custom2", "NomeMês", each Text.Upper(Date.MonthName([Data]))),
#"Added Custom5" = Table.AddColumn(#"Added Custom4", "NomeMêsAbreviado", each Text.Upper(Text.Start([NomeMês],3))),
#"Added Custom6" = Table.AddColumn(#"Added Custom5", "Trimestre", each Date.QuarterOfYear([Data])),
#"Changed Type3" = Table.TransformColumnTypes(#"Added Custom6",{{"Trimestre", type text}}),
#"Added Custom7" = Table.AddColumn(#"Changed Type3", "TriText", each Text.Upper("Qtr "& [Trimestre])),
#"Tipo Alterado" = Table.TransformColumnTypes(#"Added Custom7",{{"Ano", Int64.Type}, {"NomeMês", type text}, {"NomeMêsAbreviado", type text}, {"Trimestre", Int64.Type}}),
#"Added Custom8" = Table.AddColumn(#"Added Custom7", "DiaDaSemana", each Text.Upper(Date.DayOfWeekName([Data]))),
#"Added Custom9" = Table.AddColumn(#"Added Custom8", "DiaDaSemanaAbreviado", each Text.Upper(Text.Start([DiaDaSemana],3))),
#"Tipo Alterado1" = Table.TransformColumnTypes(#"Added Custom9",{{"Ano", type text}, {"Trimestre", type text}}),
#"Personalização Adicionada" = Table.AddColumn(
    #"Tipo Alterado1", "MonthNo", each 
    if[NomeMêsAbreviado] = "JAN" then "01" else 
    if[NomeMêsAbreviado] = "FEV" then "02" else 
    if[NomeMêsAbreviado] = "MAR" then "03" else 
    if[NomeMêsAbreviado] = "ABR" then "04" else 
    if[NomeMêsAbreviado] = "MAI" then "05" else 
    if[NomeMêsAbreviado] = "JUN" then "06" else 
    if[NomeMêsAbreviado] = "JUL" then "07" else 
    if[NomeMêsAbreviado] = "AGO" then "08" else 
    if[NomeMêsAbreviado] = "SET" then "09" else 
    if[NomeMêsAbreviado] = "OUT" then "10" else 
    if[NomeMêsAbreviado] = "NOV" then "11" else 
    if[NomeMêsAbreviado] = "DEZ" then "12" else 
    "VERIFICAR"
    ),
#"Colunas Reordenadas" = Table.ReorderColumns(#"Personalização Adicionada",{"Data", "Ano", "MonthNo", "NomeMês", "NomeMêsAbreviado", "Trimestre", "TriText", "DiaDaSemana", "DiaDaSemanaAbreviado"}),
    #"Tipo Alterado2" = Table.TransformColumnTypes(#"Colunas Reordenadas",{{"NomeMês", type text}, {"NomeMêsAbreviado", type text}, {"Trimestre", type text}, {"TriText", type text}, {"DiaDaSemana", type text}, {"DiaDaSemanaAbreviado", type text}, {"MonthNo", type text}}),
#"Personalização Adicionada1" = Table.AddColumn(#"Tipo Alterado2", "AnoMêsNum", each [Ano]&[MonthNo]),
#"Personalização Adicionada20" = Table.AddColumn(#"Personalização Adicionada1", "AnoMêsNomeAbreviado", each [Ano]&[NomeMêsAbreviado]),
#"Added Custom22" = Table.AddColumn(#"Personalização Adicionada20", "DiaDoMês", each Number.ToText(Date.Day([Data]), "00")),
#"Added Custom25" = Table.AddColumn(#"Added Custom22", "DiaDoAno", each Date.DayOfYear([Data])),
#"Added Custom23" = Table.AddColumn(#"Added Custom25", "DiaDoMês+DiaDaSemanaAbreviado", each [DiaDoMês]& " ["& [DiaDaSemanaAbreviado]&"]"),
#"Adicionado Custom24" = Table.AddColumn(#"Added Custom23", "NumSemanaNoAno", each Number.ToText(Date.WeekOfYear([Data]),"00")),
#"Adicionado Custom30" = Table.AddColumn(#"Adicionado Custom24", "NumDayWeek", each Date.DayOfWeek([Data])),
#"Linhas Classificadas" = Table.Sort(#"Adicionado Custom30",{{"Data", Order.Ascending}})
    
in
    #"Linhas Classificadas"

Seguindo o passo a passo acima, o resultado será igual da imagem abaixo:

Qualquer dúvida, favor enviar uma pergunta.

Deixe um comentário