首页 > 解决方案 > 使用 DAX 在 Powerbi 中计算平均速度

问题描述

我有来自 2 个摄像头的数据:车号、摄像头、日期时间。相机 A 是第一台,B 是第二台相机。

我需要计算通过两个摄像头的汽车的平均速度,并且通过时间至少为 5 分钟且不超过 30 分钟。摄像机之间的距离为 6 公里。

我只计算了同一辆车最近的交叉路口时间。我找不到最近的 A 交叉时间的相机 B 交叉时间。

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] 是车牌号。

数据示例

在此处输入图像描述

标签: powerbidax

解决方案


当你有一个看起来像这样的表时:

在此处输入图像描述

然后像这样的 DAX 表达式将创建计算的列 [MIN_diff_Minutes_with_Camera A]。对于带有摄像头 B 的行,它返回最小的差异(以分钟为单位),摄像头 A 的 DT_stamp 小于该行中的 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 ()
    )

推荐阅读