Ir para conteúdo
  • 0

Ultimas 4 datas da seleção


Flávio Pinheiro
Ir para solução Solucionado por Flávio Pinheiro ,

Pergunta

  • Alunos

Boa tarde amigos.

Tenho o seguinte problema e recorro á quem possa me ajudar.

Seguinte:

Minha pretensão é exibir um gráfico de colunas com com 4 datas no eixo x, porem essas datas devem ser dinâmicas com base na data que será filtrada.

Conforme print após selecionar o dia 03/03/2022 devo ter 4 colunas com as respectivas datas: 03/03/2022, 23/02/2022, 14/02/2022 e 08/02/2022.

A regra para esse comportamento é: retornar as 4 ultimas datas anteriores a data atual  selecionada inclusive a própria data. (vide print).

Obs.: consegui gerar uma tabela via dax com o resultado esperado, porem não consegui plota-las no grafico.
 

Desde de já agradeço por qualquer ajuda.

 

image.png.02bfb1ce1d4b3a6e29ab6150d61641dd.png

PAINEL RH_EXEMPLO_ENVIO.pbix

Link para o comentário
Compartilhar em outros sites

9 respostass a esta questão

Posts Recomendados

  • 0
  • Alunos
  • Solução
Em 30/05/2022 em 14:34, Rodrigo R1 disse:

Boa tarde, @Flávio Pinheiro, tudo bem amigo?

Quanto tempo? Achei que já tivesse solucionado...rsrsrsrsrs

Fico feliz que a minha indicação da Live tenha te ajudado a compreender o seu problema.

Vamos lá....no caso da diferença de granularidade entre o seu caso e o da Live não tem problema algum.

Basta somente ajustar à sua necessidade.

O Leo usa a Dateinsperiod para o mês e você irá usar para o dia - colocando no último argumento da medida que você deseja o período em dias - day.

Para tanto, no seu modelo será preciso criar uma dcalendário auxiliar.

Pode ser criada em Dax mesmo - sem problemas - como o Leo faz na Live.

Aí vc irá criar um relacionamento inativo entre essa dcalendário auxiliar e sua tabela fato de onde vem os valores da medida.

No eixo do visual você irá colocar a coluna de dias da sua tabela calendário auxiliar.

Feito isso, você irá criar a medida abaixo e depois coloca-la no seu visual:

Medida R1 =

VAR vDataFiltrada = MAX(dCalendario[Data])

VAR vPeriodo =

DATESINPERIOD(

'Auxdcalendario'[Data],

vDataFiltrada,

-4,

DAY)

VAR vResultado =

CALCULATE(

[SUA MEDIDA],

ALL(dCalendario),

KEEPFILTERS(vPeriodo),

USERELATIONSHIP('Auxdcalendario'[Data], suatabelaFato[Data])

)

RETURN

vResultado

Na segmentação de dados você continuará usando normalmente a coluna de data da sua dcalendário original, ok? - IMPORTANTE ISSO!!!

Bom....acredito que seguindo os passos acima você irá conseguir.

Caso ainda não consiga, favor anexar seu PBIX atualizado com suas tentativas, dcalendário auxiliar e medidas criadas, pra ficar mais fácil identificar os erros.

Sucesso aí, amigo.

Show de bola.
Consegui reproduzir conforme sua orientçaao.
Muito obrigado por sua disposição e ajuda.
 

Link para o comentário
Compartilhar em outros sites

  • 0
  • Alunos

Boa tarde, @Flávio Pinheiro, precisa criar uma dCalendario e com ela vai conseguir fazer o filtro dinâmico, abri o seu PBI, porém o arquivo não me deixa fazer alterações, caso não consiga solucionar, providencia uma base teste.

 

Caso alguma resposta tenha ajudado, você pode marcá-la como Solução e votar positivamente a resposta. Com isso o tópico será fechado, obrigado!

Atenciosamente,
Nelson Maroni

Link para o comentário
Compartilhar em outros sites

  • 0
  • Alunos

Boa noite, @Flávio Pinheiro. Tudo bem, amigo?

A solução para a sua dúvida está na Live 72: [Live #72 Mestre Power BI] Tornando os Eixos Dinâmicos em visuais com DAX Avançado - Lives sobre Linguagem DAX - Pilar 4 (powerbiexperience.com)

Espero que tenha ajudado e se for a melhor resposta, gentileza marcá-la para fechar o tópico.

Sucesso, amigo.

Link para o comentário
Compartilhar em outros sites

  • 0
  • Alunos

Prezado @Flávio Pinheiro, segue abaixo o PBI com as medidas desenvolvidas, faltou deixar o eixo X dinâmico, entretanto as medidas para trazer os valores retroativos conforme solicitou estão prontas, também criei a tabela Calendário através do DAX. Abaixo da imagem seguem as medidas criadas.

 

image.thumb.png.ecada0895e7daf060628d8a67506beb0.png
 

ATIVOS + FERIAS EF 1 = SUM(Z_PAINEL_HC[EFETIVO_ATIVO])

 

ATIVOS + FERIAS EF 1 (DATA) = MAX(Z_PAINEL_HC[DATA])

 

EFETIVO -1M (1) =
VAR vMAX_DATA = MAX(Z_PAINEL_HC[DATA])
VAR vMAX_DATA_ANTERIOR = CALCULATE(
MAX(Z_PAINEL_HC[DATA]);
FILTER(
ALL(
Z_PAINEL_HC);
Z_PAINEL_HC[DATA] < vMAX_DATA
)
)
VAR vATIVOS_MAIS_FERIAS = CALCULATE(
[ATIVOS + FERIAS EF 1];
FILTER(
ALL(
Z_PAINEL_HC);
Z_PAINEL_HC[DATA] = vMAX_DATA_ANTERIOR
)
)
RETURN
vATIVOS_MAIS_FERIAS

 

EFETIVO -1M (1) DATA =
VAR vMAX_DATA = MAX(Z_PAINEL_HC[DATA])
VAR vMAX_DATA_ANTERIOR = CALCULATE(
MAX(Z_PAINEL_HC[DATA]);
FILTER(
ALL(
Z_PAINEL_HC);
Z_PAINEL_HC[DATA] < vMAX_DATA
)
)
RETURN
vMAX_DATA_ANTERIOR

 

EFETIVO -2M (1) =
VAR vMAX_DATA = MAX(Z_PAINEL_HC[DATA])
VAR vMAX_DATA_ANTERIOR_1 = CALCULATE(
MAX(Z_PAINEL_HC[DATA]);
FILTER(
ALL(
Z_PAINEL_HC);
Z_PAINEL_HC[DATA] < vMAX_DATA
)
)
VAR vMAX_DATA_ANTERIOR_2 = CALCULATE(
MAX(Z_PAINEL_HC[DATA]);
FILTER(
ALL(
Z_PAINEL_HC);
Z_PAINEL_HC[DATA] < vMAX_DATA_ANTERIOR_1
)
)
VAR vATIVOS_MAIS_FERIAS = CALCULATE(
[ATIVOS + FERIAS EF 1];
FILTER(
ALL(
Z_PAINEL_HC);
Z_PAINEL_HC[DATA] = vMAX_DATA_ANTERIOR_2
)
)
RETURN
vATIVOS_MAIS_FERIAS

 

EFETIVO -2M (1) (DATA) =
VAR vMAX_DATA = MAX(Z_PAINEL_HC[DATA])
VAR vMAX_DATA_ANTERIOR_1 = CALCULATE(
MAX(Z_PAINEL_HC[DATA]);
FILTER(
ALL(
Z_PAINEL_HC);
Z_PAINEL_HC[DATA] < vMAX_DATA
)
)
VAR vMAX_DATA_ANTERIOR_2 = CALCULATE(
MAX(Z_PAINEL_HC[DATA]);
FILTER(
ALL(
Z_PAINEL_HC);
Z_PAINEL_HC[DATA] < vMAX_DATA_ANTERIOR_1
)
)
RETURN
vMAX_DATA_ANTERIOR_2

 

EFETIVO -3M (1) =
VAR vMAX_DATA = MAX(Z_PAINEL_HC[DATA])
VAR vMAX_DATA_ANTERIOR_1 = CALCULATE(
MAX(Z_PAINEL_HC[DATA]);
FILTER(
ALL(
Z_PAINEL_HC);
Z_PAINEL_HC[DATA] < vMAX_DATA
)
)
VAR vMAX_DATA_ANTERIOR_2 = CALCULATE(
MAX(Z_PAINEL_HC[DATA]);
FILTER(
ALL(
Z_PAINEL_HC);
Z_PAINEL_HC[DATA] < vMAX_DATA_ANTERIOR_1
)
)
VAR vMAX_DATA_ANTERIOR_3 = CALCULATE(
MAX(Z_PAINEL_HC[DATA]);
FILTER(
ALL(
Z_PAINEL_HC);
Z_PAINEL_HC[DATA] < vMAX_DATA_ANTERIOR_2
)
)
VAR vATIVOS_MAIS_FERIAS = CALCULATE(
[ATIVOS + FERIAS EF 1];
FILTER(
ALL(
Z_PAINEL_HC);
Z_PAINEL_HC[DATA] = vMAX_DATA_ANTERIOR_3
)
)
RETURN
vATIVOS_MAIS_FERIAS

 

EFETIVO -3M (1) (DATA) =
VAR vMAX_DATA = MAX(Z_PAINEL_HC[DATA])
VAR vMAX_DATA_ANTERIOR_1 = CALCULATE(
MAX(Z_PAINEL_HC[DATA]);
FILTER(
ALL(
Z_PAINEL_HC);
Z_PAINEL_HC[DATA] < vMAX_DATA
)
)
VAR vMAX_DATA_ANTERIOR_2 = CALCULATE(
MAX(Z_PAINEL_HC[DATA]);
FILTER(
ALL(
Z_PAINEL_HC);
Z_PAINEL_HC[DATA] < vMAX_DATA_ANTERIOR_1
)
)
VAR vMAX_DATA_ANTERIOR_3 = CALCULATE(
MAX(Z_PAINEL_HC[DATA]);
FILTER(
ALL(
Z_PAINEL_HC);
Z_PAINEL_HC[DATA] < vMAX_DATA_ANTERIOR_2
)
)
RETURN
vMAX_DATA_ANTERIOR_3

 

dCalendario =
ADDCOLUMNS(
CALENDARAUTO();
"Ano"; FORMAT([Date]; "yyyy");
"Mês"; FORMAT([Date]; "mm");
"Nome Mês"; FORMAT([Date]; "mmm");
"Dia"; FORMAT([Date]; "dd")
)

 

Caso alguma resposta tenha ajudado, você pode marcá-la como Solução e votar positivamente a resposta. Com isso o tópico será fechado, obrigado!

Atenciosamente,
Nelson Maroni

1425308057_PAINELRH_Solução Parcial.pbix

Editado por Nelson Maroni
esqueci de incluir o arquivo do pbi solução parcial
Link para o comentário
Compartilhar em outros sites

  • 0
  • Alunos

@Flávio Pinheiro

 

Criei uma dCalendario, mas sem realizar o relacionamento. Depois fiz a seguinte medida:

Efetivos afastado teste = 
    VAR vData = 
        MAX(Z_PAINEL_HC[DATA])
    VAR v4Datas = 
        TOPN(
            4,
            FILTER(
                ALL(Z_PAINEL_HC[DATA]),
                Z_PAINEL_HC[DATA] <= vData
            ),
            [DATA]
        )
    VAR vDataContexto = 
        MAX(dCalendario[Date])
RETURN
    CALCULATE(
        [AFASTADO EF],
        FILTER(
            v4Datas,
            [DATA] = vDataContexto
        )
    )

 

PAINELRH_EXEMPLO_ENVIO.pbix

Link para o comentário
Compartilhar em outros sites

  • 0
  • Alunos

Bom dia Srs.,

Quero agradecer a todos vocês pelo tempo que empreenderam em me ajudar, e também pela rapidez de resposta.

Todas as soluções contribuíram com meu aprendizado, e estou avaliando todas as soluções independente de qual vou utilizar.

Estou assistindo a aula citada pelo amigo @Rodrigo R1 que apresenta realmente necessidade.
 

Todos vocês estão de parabéns! Que Deus vos abençoem.

Link para o comentário
Compartilhar em outros sites

  • 0
  • Alunos
Em 06/05/2022 em 21:12, Rodrigo R1 disse:

Boa noite, @Flávio Pinheiro. Tudo bem, amigo?

A solução para a sua dúvida está na Live 72: [Live #72 Mestre Power BI] Tornando os Eixos Dinâmicos em visuais com DAX Avançado - Lives sobre Linguagem DAX - Pilar 4 (powerbiexperience.com)

Espero que tenha ajudado e se for a melhor resposta, gentileza marcá-la para fechar o tópico.

Sucesso, amigo.

Bom dia Rodrigo,
Seguinte amigo, dei uma olhada na aula live 72 e realmente é o que preciso, porem não consegui evoluir pois minha granularidade é diferente. O Leo faz um Datesinperiod no mes e no meu caso preciso que retorne o range de datas que contem dias intercalados como expliquei no exemplo.

Consegue me ajudar?

Segue anexa base que uso, o pbix está na postagem original

Z_PAINEL_HC.xlsx

Link para o comentário
Compartilhar em outros sites

  • 0
  • Alunos

Boa tarde, @Flávio Pinheiro, tudo bem amigo?

Quanto tempo? Achei que já tivesse solucionado...rsrsrsrsrs

Fico feliz que a minha indicação da Live tenha te ajudado a compreender o seu problema.

Vamos lá....no caso da diferença de granularidade entre o seu caso e o da Live não tem problema algum.

Basta somente ajustar à sua necessidade.

O Leo usa a Dateinsperiod para o mês e você irá usar para o dia - colocando no último argumento da medida que você deseja o período em dias - day.

Para tanto, no seu modelo será preciso criar uma dcalendário auxiliar.

Pode ser criada em Dax mesmo - sem problemas - como o Leo faz na Live.

Aí vc irá criar um relacionamento inativo entre essa dcalendário auxiliar e sua tabela fato de onde vem os valores da medida.

No eixo do visual você irá colocar a coluna de dias da sua tabela calendário auxiliar.

Feito isso, você irá criar a medida abaixo e depois coloca-la no seu visual:

Medida R1 =

VAR vDataFiltrada = MAX(dCalendario[Data])

VAR vPeriodo =

DATESINPERIOD(

'Auxdcalendario'[Data],

vDataFiltrada,

-4,

DAY)

VAR vResultado =

CALCULATE(

[SUA MEDIDA],

ALL(dCalendario),

KEEPFILTERS(vPeriodo),

USERELATIONSHIP('Auxdcalendario'[Data], suatabelaFato[Data])

)

RETURN

vResultado

Na segmentação de dados você continuará usando normalmente a coluna de data da sua dcalendário original, ok? - IMPORTANTE ISSO!!!

Bom....acredito que seguindo os passos acima você irá conseguir.

Caso ainda não consiga, favor anexar seu PBIX atualizado com suas tentativas, dcalendário auxiliar e medidas criadas, pra ficar mais fácil identificar os erros.

Sucesso aí, amigo.

Link para o comentário
Compartilhar em outros sites

  • 0
  • Alunos
3 horas atrás, Flávio Pinheiro disse:

Show de bola.
Consegui reproduzir conforme sua orientçaao.
Muito obrigado por sua disposição e ajuda.
 

Boa noite, @Flávio Pinheiro, tudo bem amigo?

Que bom que com minha orientação conseguimos encontrar a solução mais indicada para o seu case. 

Poderia marcar a minha resposta como melhor solução, por gentileza?

Isso contribui para que os demais usuários da comunidade encontrem a melhor solução, caso tenham passado pelo mesmo problema, além de ser uma premissa do fórum.

Obrigado, amigo. Sucesso aí. 

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...