从 ASA 到 Power BI 地图的实时位置数据

Live location data from ASA to Power BI Map

我有一个 ASA 输出,它将一些设备的 GPS 坐标发送到 Power BI Live 数据流。

从 ASA 到 Power BI 的数据如下所示:

Device    Lat        Lon        Time
1         1,12345    2,34567    19-1-2018 11:48:00
2         1,34567    2,66666    19-1-2018 11:49:01
1         1,67890    2,55555    19-1-2018 11:49:13
2         1,33333    2,33333    19-1-2018 11:50:23
2         1,23222    2,44444    19-1-2018 11:50:54

我想在地图上显示设备的最新位置。 我可以使用度量来显示特定设备的最新纬度和经度,如下所示:

GpsLonLast = CALCULATE(MAX('PowerBI'[lon]);FILTER('PowerBi';PowerBI[time]=[LastTime]))

其中 LastTime 是接收设备发送消息的最晚时间的度量。

这有效,当在 table 中显示时,但是我无法将这些度量映射到 Power BI 中的映射控件,它不支持度量或聚合。

如果我使用普通的纬度/经度和设备字段作为地图控件上的位置和名称,我会得到所有找到设备的位置。但这不是我想要的,我只想要设备的最后位置。

请注意,我正在使用 Azure 流分析将实时数据发送到 Power BI,在 Power BI 中,这是作为推送数据集接收的,因此我无法在 Power BI 中使用自定义建模。

我会首先计算一个 "helper" 列来测试每个设备的最新时间,例如

Latest Time per Device =
IF (
    [Time]
        = CALCULATE (
            MAX ( 'PowerBI'[Time] ),
            FILTER ( 'PowerBI', 'PowerBI'[Device] = EARLIER ( [Device] ) )
        ),
    "Is Latest Time per Device",
    "Other"
)

然后我会将该列用作过滤器,例如添加到 Visual Level Filter 井,然后选择 "Is Latest Time per Device" 条目。然后您可以在过滤后的视觉对象中使用纬度和经度列。

我的建议是创建一个仅包含每个设备的最后位置的计算 table,并将该 table 用作地图的数据集。

这应该会给你 table 你想要的:

= ADDCOLUMNS(SUMMARIZECOLUMNS(PowerBI[Device], "LastTime", MAX(PowerBI[Time])),
             "Lat", CALCULATE(MAX(PowerBI[Lat]),
                        FILTER(PowerBI, PowerBI[Time] = [LastTime])),
             "Lon", CALCULATE(MAX(PowerBI[Lon]),
                        FILTER(PowerBI, PowerBI[Time] = [LastTime])))

现在,每次您的实时数据更新时,计算得出的 table 也应该更新并为您提供最新的 GPS 坐标以显示在地图上。

我认为这不可能是你想做的。

但是,您可以使用 Power BI API 直接推送数据集而不是 Azure 流分析,并且 post GPS 将自己坐标到 API。
您可以事先清除 table ,这样您最终只会得到最新的值。遗憾的是,您无法删除或更新单行,因此每次都必须 post 完整 table。这有点麻烦,但它确实有效。如果您的地图上有几个项目,删除 table 中的所有行并再次添加它们的性能影响并不是什么大问题。
我们在一些项目中使用了这种技术,而且效果非常快。我们只会每隔几分钟更新一次 GPS 坐标,并且只有 post 到 API 发生变化时才会更新。

您可以使用 https://github.com/Microsoft/PowerBI-CSharp C# API 库来简化 posting 到 API。

这可能不是您要找的答案,但我建议您采取一些解决方法:

  • 使用按日期排序的前 N ​​个过滤器(您可以在实时数据集中使用其中一个)。您的地图将仅显示最后的点或最短路径。
  • 修改 RoutMap 自定义视觉对象以仅绘制最后一个值。我想如果你有代码应该很容易:) https://github.com/weiweicui/PowerBI-Routemap