2
respostas

CÁLCULO DE HORAS ENTRE PERÍODOS

Boa tarde,

Estou com dificuldade para conseguir extrair uma informação para gerar um gráfico. Exemplificando:

Tenho a tabela abaixo, e preciso gerar um gráfico que mostre o somatório de horas por dia considerando os períodos.

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

O resultado final, deveria mostrar o seguinte somatório de horas:

01/12/2023: 14
02/12/2023: 24
03/12/2023: 24
04/12/2023: 24
05/12/2023: 19
06/12/2023: 6

Existe uma forma de fazer isso usando o DAX?

2 respostas

Olá Henrique,

Para resolver a questão de calcular o somatório de horas por dia considerando os períodos, você realmente pode utilizar o DAX no Power BI para criar uma medida que calcule a diferença entre as datas e horas de início e fim, e depois agrupe esses valores por dia.

Primeiro, você precisará criar uma coluna calculada que identifique cada dia dentro do intervalo de datas. Você pode fazer isso criando uma tabela de datas auxiliar ou utilizando uma função que percorra cada dia entre as datas de início e fim.

Aqui está um exemplo de como você poderia criar uma tabela de datas auxiliar e depois relacioná-la com a sua tabela existente:

TabelaDatas = CALENDAR(MIN(Tabela[DATA INI]), MAX(Tabela[DATA FIM]))

Depois de criar a tabela de datas, você precisará relacioná-la com a sua tabela original (vou chamá-la de 'Tabela') com base nas datas de início e fim. Você pode fazer isso criando relações no modelo de dados.

Com a relação estabelecida, você pode criar uma medida para calcular a quantidade de horas por dia. Aqui está um exemplo de medida que você poderia usar:

HorasPorDia = 
SUMX(
    FILTER(
        ADDCOLUMNS(
            TabelaDatas,
            "Horas", CALCULATE(
                SUMX(
                    Tabela,
                    IF(
                        Tabela[DATA INI] <= TabelaDatas[Data] && TabelaDatas[Data] <= Tabela[DATA FIM],
                        IF(TabelaDatas[Data] = Tabela[DATA FIM], HOUR(Tabela[HORA FIM]), 24) -
                        IF(TabelaDatas[Data] = Tabela[DATA INI], HOUR(Tabela[HORA INI]), 0),
                        0
                    )
                )
            )
        ),
        [Horas] > 0
    ),
    [Horas]
)

Neste exemplo, a função SUMX é utilizada para somar as horas para cada dia. A função FILTER é usada para filtrar apenas os dias que têm horas a serem contabilizadas. A função ADDCOLUMNS é usada para adicionar uma coluna calculada temporária que contém as horas calculadas para cada dia.

Você precisará ajustar os nomes das tabelas e colunas de acordo com o seu modelo de dados. Além disso, certifique-se de que as colunas de data e hora estejam no formato correto para que as funções DAX funcionem como esperado.

Após criar a medida, você pode utilizá-la em um gráfico de barras ou colunas, arrastando a data para o eixo de categorias e a medida de horas para os valores.

Lembrando que vai ser necessário ajustar as fórmulas conforme a estrutura do seu modelo de dados.

Espero ter ajudado e bons estudos!

Boa tarde Natan! Obrigado pela agilidade no apoio!

Entendi a lógica, testei a função, mas não funcionou =/

Dentro da SUMX, no IF, o pbi não identifica a tabela "NOTAS" (equivalente a 'Tabela' no seu código). Imaginei que fosse por conta do relacionamento entre as tabelas, mas revisei e aparentemente está ok! (NOTAS[DATA_INI] x TabelaDatas[Date]), as duas colunas formatadas como data, short date. Testei também com duas conexões (incluindo a NOTAS[DATA_FIM]) e também somente com a NOTAS[DATA_FIM], mas também não rolou.

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Insira aqui a descrição dessa imagem para ajudar na acessibilidade