Рассчитать среднюю скорость в Powerbi с помощью DAX - PullRequest
1 голос
/ 21 июня 2019

У меня есть данные с 2 камер: номер автомобиля, камера, дата и время.Камера A - первая, B - вторая камера.

Мне нужно рассчитать среднюю скорость для автомобилей, которые прошли обе камеры, и время прохождения составляет не менее 5 минут и не более 30 минут.Расстояние между камерами составляет 6 км.

Я посчитал только время прохождения ближайшего автомобиля для того же автомобиля.Я не смог найти время пересечения камеры B для ближайшего времени пересечения A.

Diff_time = 
VAR temp =
    TOPN (
        1;
        FILTER (
            'TEST2';
            'TEST2'[license_plate] = EARLIER ( 'TEST2'[license_plate])
                && 'TEST2'[Date_time] < EARLIER ( 'TEST2'[Date_time] ) 
        );
        'TEST2'[Date_time]; DESC
    )
RETURN
    DATEDIFF ( MINX ( temp; 'TEST2'[Date_time] ); 'TEST2'[Date_time]; MINUTE )

[license_plate] - номер автомобиля.

пример данных

enter image description here

1 Ответ

0 голосов
/ 21 июня 2019

Если у вас есть таблица, которая выглядит примерно так:

enter image description here

, то подобное DAX-выражение создаст вычисляемый столбец [MIN_diff_Minutes_with_Camera A].Для строк с камерой B он возвращает наименьшую разницу в минутах с DT_stamp от камеры A, который меньше DT в этом ряду, относится к той же машине и составляет от 5 до 30 минут.Для строк с камерой A возвращается пустое значение.

MIN_diff_Minutes_with_Camera A =
VAR DT_camera_A =
    CALCULATE (
        MAX ( TEST2[DT_Stamp] ),
        ALLEXCEPT ( TEST2, TEST2[Car] ),
        'TEST2'[Camera] = "A",
        'TEST2'[DT_Stamp] < EARLIER ( TEST2[DT_Stamp] )
    )
VAR Time_Diff_in_Minutes =
    DATEDIFF ( DT_camera_A, 'TEST2'[DT_Stamp], MINUTE )
RETURN
    IF (
        'TEST2'[Camera] = "B"
            && TIme_Diff_in_Minutes >= 5
            && Time_Diff_in_Minutes <= 30,
        Time_Diff_in_Minutes, --For avg speed in km/h use: 6*(Time_Diff_in_Minutes/60)
        BLANK ()
    )
...