我有一个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
我想在地图上显示设备的最新位置。 我可以使用一个度量来显示特定设备的最新Lat和Lon,如下所示:
GpsLonLast = CALCULATE(MAX('PowerBI'[lon]);FILTER('PowerBi';PowerBI[time]=[LastTime]))
其中LastTime是接收设备发送消息的最新时间的度量。
这可以在表格中显示,但是我无法将这些度量映射到Power BI中的地图控件,它不支持度量或聚合。
如果我在地图控件上使用普通的Lat / Lon和Device字段作为位置和名称,我将获得设备所在的所有位置。但那不是我想要的,我只想要设备的最后位置。
请注意,我使用Azure Stream Analytics将实时数据发送到Power BI,在Power BI中,这是作为推送数据集接收的,因此我无法在Power BI中使用自定义建模。
答案 0 :(得分:1)
我建议创建一个计算表,该表只包含每个设备的最后位置,并使用该表作为地图的数据集。
这可以为您提供所需的表格:
= 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])))
现在,每次实时数据更新时,此计算表格也应更新,并为您提供最新的GPS坐标,以便在地图上显示。
答案 1 :(得分:1)
我不认为你想做什么。
但是,您可以将Power BI API直接用于推送数据集而不是Azure Stream Analytics,并将自己的GPS坐标发布到API。
您可以事先清除表格,这样您最终只会得到最新的值。遗憾的是,您无法删除或更新单行,因此您每次都必须发布完整的表格。这有点麻烦,但它确实有效。如果地图上有一些项目,删除表格中的所有行并再次添加它们的性能影响不是很大的问题。
我们在某些项目中使用这种技术,它的工作速度非常快。我们每隔几分钟才更新一次GPS坐标,并且仅在更改时发布到API。
您可以使用https://github.com/Microsoft/PowerBI-CSharp C#API库来简化向API的发布。
答案 2 :(得分:0)
我会首先计算一个"帮助"用于测试最新的每设备时间的列,例如
Latest Time per Device =
IF (
[Time]
= CALCULATE (
MAX ( 'PowerBI'[Time] ),
FILTER ( 'PowerBI', 'PowerBI'[Device] = EARLIER ( [Device] ) )
),
"Is Latest Time per Device",
"Other"
)
然后我会将该列用作过滤器,例如添加到可视级别过滤器,然后选择"每个设备的最新时间"条目。然后,您可以在过滤后的视觉效果中使用Lat和Lon列。
答案 3 :(得分:0)
这可能不是您正在寻找的答案,但我建议您解决几个问题: