Ir para conteúdo
  • 0

Ordenar grafico por mês e ano


Pâmella Dias
Ir para solução Solucionado por Tiago Craici - Xperiun ,

Pergunta

  • Alunos

Pessoal, Boa Noite 

Preciso de uma ajuda, tenho dados de 3 anos, 2023,2024  e 2025 

preciso que os graficos, deixem os meses em ordem cronologica, mas não estou conseguindo fazer isso. 

Por exemplo no cenario A  eu posso ter inicio de obra que pegue de Janeiro/2023 até o final de Agosto/2024. 

as barras devem ficar ordenadas em ordem crescente (mês/ano)

image.png.c5ad3f27cf7ee30e2ff99d910ff65b8c.png

Link para o comentário
Compartilhar em outros sites

17 respostass a esta questão

Posts Recomendados

  • 0
  • Admin
  • Solução
28 minutos atrás, Pâmella Dias disse:

Tiago e amigos Bom dia 

A quem puder interessar, a solução para realizar a ordem cronologica é a seguinte : 

OrdemCronologica = VAR AnoBase = 2023 VAR MesBase = 1 VAR DiaBase = 1 VAR DataBase = DATE(AnoBase, MesBase, DiaBase) VAR DiffAno = YEAR(dCalendario[Data]) - AnoBase VAR DiffMes = MONTH(dCalendario[Data]) - MesBase RETURN IF( DiffAno < 0 || (DiffAno = 0 && DiffMes <= 0), 0, DiffAno * 12 + DiffMes + 1 )

Bom dia! 
Como que ficaria quando virar o ano em seu projeto com a variável VAR AnoBase = 2023? 

Sugestão alterar para:
VAR AnoBase = YEAR (TODAY () )


Sucesso! 🚀

Link para o comentário
Compartilhar em outros sites

  • 1
  • Admin

Bom dia @Pâmella Dias

Uma possibilidade para ordenar seria criar uma nova coluna com mês sequencial em sua dimensão dCalendario veja abaixo como que fica:
image.png.06a062326bf034aa82fb7ec2625b86ef.png
Observe que quando virou o ano em Janeiro a sequencia foi de 12 para 13 e assim sucessivamente... 

Crie uma nova coluna utilizando o DAX abaixo:

Mes sequencia =
var anoMin = min(dCalendario[Ano])
var mes = dCalendario[MêsNum]
var anoContexto = dCalendario[Ano]
var difAno =  anoContexto - anoMin
 
var resultado =
SWITCH(TRUE(),
    difAno = 0, mes,
    difAno * 12 + mes
)
 
return resultado


Depois é só selecionar sua coluna mes/ano e classificar pela nova coluna criada "Mes sequencia":
image.png.57ec70a2bf1c496465f5d0571ba87f33.png





Sucesso! 🚀

 

Link para o comentário
Compartilhar em outros sites

  • 0
  • Alunos

Tiago, 

Você tá me salvando demais essa semana ! kkkkk  
Quando crescer quero ajudar as pessoas igual a você 

Agora tenho outra duvida, consigo inserir na coluna de mês/ano  a condição : " Se a data for menor  ou igual que 31/12/2022, para aparecer <2023 , ao invez do nome do mês ?

  • Thanks 1
Link para o comentário
Compartilhar em outros sites

  • 0
  • Admin
11 horas atrás, Pâmella Dias disse:

Tiago, 

Você tá me salvando demais essa semana ! kkkkk  
Quando crescer quero ajudar as pessoas igual a você 

Agora tenho outra duvida, consigo inserir na coluna de mês/ano  a condição : " Se a data for menor  ou igual que 31/12/2022, para aparecer <2023 , ao invez do nome do mês ?

Bom dia @Pâmella Dias
Seria isso? 

image.png.8f7bfcf5df7d8aaaf81a3463614622a8.png

Link para o comentário
Compartilhar em outros sites

  • 0
  • Admin
8 minutos atrás, Pâmella Dias disse:

Tiago, 

Mas no grafico, não deveria somar todos ? <2023 

 image.png.331bf97ff03de7d309a9629145f895fd.png

Acho que entendi o objetivo rsrsr... 
Vamos precisar de um dCalendarioAUX.

No Power Query crie "dCalendarioAUX" com o código M abaixo:

-------------------------------------------------------------------------------------------------------------

let
                
    ListaDados = 
                //ANOS PASSADOS:
                {Date.Year(DateTime.LocalNow())-4, 
                Date.Year(DateTime.LocalNow())-3, 
                Date.Year(DateTime.LocalNow())-2, 
                Date.Year(DateTime.LocalNow())-1, 

                //MESES DO ANO PRESENTE:
        "jan/"& Number.ToText(Date.Year(DateTime.LocalNow())-2000)
    ,   "fev/"& Number.ToText(Date.Year(DateTime.LocalNow())-2000)
    ,   "mar/" & Number.ToText(Date.Year(DateTime.LocalNow())-2000)
    ,   "abr/" & Number.ToText(Date.Year(DateTime.LocalNow())-2000)
    ,   "mai/" & Number.ToText(Date.Year(DateTime.LocalNow())-2000)
    ,   "jun/" & Number.ToText(Date.Year(DateTime.LocalNow())-2000)
    ,    "jul/" & Number.ToText(Date.Year(DateTime.LocalNow())-2000)
    ,    "ago/" & Number.ToText(Date.Year(DateTime.LocalNow())-2000)
    ,    "set/" & Number.ToText(Date.Year(DateTime.LocalNow())-2000)
    ,   "out/" & Number.ToText(Date.Year(DateTime.LocalNow())-2000)
    ,   "nov/" & Number.ToText(Date.Year(DateTime.LocalNow())-2000)
    ,    "dez/" & Number.ToText(Date.Year(DateTime.LocalNow())-2000)},
    Tabela = Table.FromColumns({ListaDados}, {"Data"}),
    #"Tipo Alterado" = Table.TransformColumnTypes(Tabela,{{"Data", type text}}),
    #"Índice Adicionado" = Table.AddIndexColumn(#"Tipo Alterado", "Sequencia", 1, 1, Int64.Type)
in
    #"Índice Adicionado"

 

-------------------------------------------------------------------------------------------------------------

OBS:  este código sempre vai criar uma tabela com mes/ano presente e mais 4 anos passados ficando assim o resultado:
image.png.a525b5e40c37000344a4ad1d0be18a52.png


Depois carregue para o Power BI. 
Em seguida crie o relacionamento entre a sua dCalendarioAUX com a dCalendario:
image.png.702dbc48867d3317ef267604ee22514a.png

image.png.c746a25964e2045a63688e941bd6d1a8.png


No seu visual o eixo X coloque a coluna "Data" da tabela dCalendarioAUX:
image.png.52588eb7c25b486ea944c9dd1e02a4af.png





Segue um pbix em anexo para entendimento












 

Eixo_x_Personalizado.pbix

Link para o comentário
Compartilhar em outros sites

  • 0
  • Alunos

Entendi....
Mas ai tenho uma duvida, a minha dCalendario considera a união de todas as datas que tenho na minha tabela d , então tem datas desde 2013 por exemplo, e pode ser que em cada atualização, entre datas antes . 
Consigo colocar uma variavel para ele pegar a data minima e maxima da dCalendario ? 

Hoje ela é assim
 

dCalendario =
VAR vTabelaDatas =
UNION(
    VALUES(Score[FECHA APROBACION]),//Pega todas as datas da sua primeira coluna de data
    VALUES(Score[FECHA FIRMA]),//Pega todas as datas da sua segunda coluna de data
    VALUES(Score[FECHA GB]),//Pega todas as datas da sua terceira coluna de data
    VALUES(Score[Fecha Abertura/Reabertura])//Pega todas as datas da sua quarta coluna de data
)
 
VAR vMenorData = //Pega a menor data da tabela virtual acima
MINX(
    vTabelaDatas,
    [FECHA APROBACION]
)
 
VAR vMaiorData = //Pega a menor data da tabela virtual acima
MAXX(
    vTabelaDatas,
    [FECHA APROBACION]
)
RETURN
ADDCOLUMNS(
    CALENDAR(vMenorData,vMaiorData),
    "Ano",YEAR([Date]),
    "Mês",MONTH([Date]),
    "Nome do mês",FORMAT([Date],"MMMM"),
    "Mês/Ano",CONCATENATE(LEFT(FORMAT([Date],"mmmm"),3),"/"&YEAR([Date])))
 
Link para o comentário
Compartilhar em outros sites

  • 0
  • Admin
48 minutos atrás, Pâmella Dias disse:

Entendi....
Mas ai tenho uma duvida, a minha dCalendario considera a união de todas as datas que tenho na minha tabela d , então tem datas desde 2013 por exemplo, e pode ser que em cada atualização, entre datas antes . 
Consigo colocar uma variavel para ele pegar a data minima e maxima da dCalendario ? 

Hoje ela é assim
 

dCalendario =
VAR vTabelaDatas =
UNION(
    VALUES(Score[FECHA APROBACION]),//Pega todas as datas da sua primeira coluna de data
    VALUES(Score[FECHA FIRMA]),//Pega todas as datas da sua segunda coluna de data
    VALUES(Score[FECHA GB]),//Pega todas as datas da sua terceira coluna de data
    VALUES(Score[Fecha Abertura/Reabertura])//Pega todas as datas da sua quarta coluna de data
)
 
VAR vMenorData = //Pega a menor data da tabela virtual acima
MINX(
    vTabelaDatas,
    [FECHA APROBACION]
)
 
VAR vMaiorData = //Pega a menor data da tabela virtual acima
MAXX(
    vTabelaDatas,
    [FECHA APROBACION]
)
RETURN
ADDCOLUMNS(
    CALENDAR(vMenorData,vMaiorData),
    "Ano",YEAR([Date]),
    "Mês",MONTH([Date]),
    "Nome do mês",FORMAT([Date],"MMMM"),
    "Mês/Ano",CONCATENATE(LEFT(FORMAT([Date],"mmmm"),3),"/"&YEAR([Date])))
 

@Pâmella Dias 
tem a possibilidade de anexar seu pbix? 

Link para o comentário
Compartilhar em outros sites

  • 0
  • Alunos

Não posso Tiago, mas acho que é possivel na propria dcalendario, 

 

naquela formula da sequencia que vc me passou, como eu altero para ser td que for <2023  como 0 e apartir do primeiro mes (janeiro/2023) ser 1 ...2...3

 

Mes sequencia =
var anoMin = min(dCalendario[Ano])
var mes = dCalendario[Mês]
var anoContexto = dCalendario[Ano]
var difAno =  anoContexto - anoMin
 
var resultado =
SWITCH(TRUE(),
    difAno = 0, mes,
    difAno * 12 + mes
)
 
return resultado
Link para o comentário
Compartilhar em outros sites

  • 0
  • Alunos

Tiago e amigos Bom dia 

A quem puder interessar, a solução para realizar a ordem cronologica é a seguinte : 

OrdemCronologica = VAR AnoBase = 2023 VAR MesBase = 1 VAR DiaBase = 1 VAR DataBase = DATE(AnoBase, MesBase, DiaBase) VAR DiffAno = YEAR(dCalendario[Data]) - AnoBase VAR DiffMes = MONTH(dCalendario[Data]) - MesBase RETURN IF( DiffAno < 0 || (DiffAno = 0 && DiffMes <= 0), 0, DiffAno * 12 + DiffMes + 1 )

Link para o comentário
Compartilhar em outros sites

Faça login para comentar

Você vai ser capaz de deixar um comentário após fazer o login



Entrar Agora
×
×
  • Criar Novo...