Unlock a world of possibilities! Login now and discover the exclusive benefits awaiting you.
Olá, pessoal
Preciso criar uma dinâmica que estabeleça agregações de intervalos de tempos conforme a dimensão envolvida.
A regra se dá a partir do intervalo de horas entre o tempo mínimo de início e o tempo máximo do fim.
Para exemplificar bem, criei um modelo que ilustra bem o que preciso.
No exemplo abaixo, se estamos visualizando produto é um valor por produto. Se o grupo, outro valor pro grupo. E no final, preciso chegar a um valor que estabeleça a soma dos valores dos grupos.
Preciso de um expressão que consiga estabelecer todas essas situações, sendo que, no exemplo que dei, o valor final seja 12:30 (ou 12,5 horas) . Alguém poderia me sinalizar uma solução? Deixei em anexo um arquivo com a mesma base do exemplo.
Obrigado!
Boa noite,
Fiz no objeto gráfico, não é a mesma coisa mas pode servir, caso precise de um objeto de texto com o valor, basta fazer uma agregação (Da um pouco mais de trabalho)
Tempo inicio:
Date(min(aggr(Date(
FirstSortedValue(Tempo, Tempo)
),Grupo, Produto, Tempo, Status)),'DD/MM/YYYY HH:mm:ss')
Tempo Fim:
Date(max(aggr(Date(
FirstSortedValue(Tempo, Tempo)
),Grupo, Produto, Tempo, Status)),'DD/MM/YYYY HH:mm:ss')
Tempo:
Time(Interval(Column(2)-Column(1)))
//Observação: Marcar a opção "Função Totais"="Sum"
Olá, tudo bem?
Creio que isso possa dar certo:
//Via script
dados:
LOAD
if(Status='Início',
Date(FirstSortedValue(Tempo, Tempo),'DD/MM/YYYY HH:mm:ss'),
if(Status='Fim',
Date(FirstSortedValue(Tempo, -Tempo),'DD/MM/YYYY HH:mm:ss')
)
)as PrimeiroTempo,
Grupo,
Produto,
Status
FROM
[C:\Users\danilo.stochi\Downloads\ArquivoExemplo.xlsx]
(ooxml, embedded labels, table is Tempos)
Group by
Grupo,
Produto,
Status;
dados2:
LOAD
*,
Time#(Interval( if(Previous(Grupo)=Grupo and
Previous(Produto)=Produto,
Previous(PrimeiroTempo)
)-PrimeiroTempo)) as Tempo
Resident dados
order by
Grupo,
Produto,
PrimeiroTempo desc;
DROP table dados;
Obrigado, Danilo
Antes de tudo, algumas correções sobre os resultados do exemplo que compartilhei:
1 - Na primeira imagem, no intervalo entre os produtos A1, o valor correto é 06:00 (entre 10 e 16hs)
2 - Na segunda imagem, o intervalo do Grupo A deve ser 07:00 (entre 10 e 17hs)
3 - A soma entre os grupos deve dar 15:30 (07:00 + 08:30)
Um detalhe que não mencionei: os valores devem mudar conforme o filtro que o usuário estiver fazendo, razão pela qual preciso de uma expressão que faça as agregações conforme esses filtros. A opção pelo load script poderia resolver em parte, mas no caso aqui deixa os valores travados.
Por exemplo, podem existir ocasiões de um mesmo produto constar em diferentes grupos. Digamos que temos o produto A1 em 10 grupos distintos. Se o o usuário filtrar por esse produto o resultado deve ser a soma dos intervalos desse produto em cada grupo. Indo além, se o usuário filtrar por 3 produtos, deve ser feito um cálculo por grupo, através da dinâmica entre o tempo mínimo do início e o máximo do fim. E então, somar esses tempos distintos em cada grupo.
No mais, obrigado novamente pela sua sugestão!
Boa noite,
Fiz no objeto gráfico, não é a mesma coisa mas pode servir, caso precise de um objeto de texto com o valor, basta fazer uma agregação (Da um pouco mais de trabalho)
Tempo inicio:
Date(min(aggr(Date(
FirstSortedValue(Tempo, Tempo)
),Grupo, Produto, Tempo, Status)),'DD/MM/YYYY HH:mm:ss')
Tempo Fim:
Date(max(aggr(Date(
FirstSortedValue(Tempo, Tempo)
),Grupo, Produto, Tempo, Status)),'DD/MM/YYYY HH:mm:ss')
Tempo:
Time(Interval(Column(2)-Column(1)))
//Observação: Marcar a opção "Função Totais"="Sum"
Excelente, Danilo.
Era essa a ideia mesmo nesse protótipo. Perfeito. Agora irei adaptar a mesma lógica aos dados reais que tenho aqui.
Obrigado pela disponibilidade e, sobretudo, paciência também. Espero que seja útil para outros profissionais aqui também!