从 ASA 到 Power BI Map 的实时位置数据
Posted
技术标签:
【中文标题】从 ASA 到 Power BI Map 的实时位置数据【英文标题】:Live location data from ASA to Power BI Map 【发布时间】:2018-01-19 15:54:57 【问题描述】:我有一个 ASA 输出,它将某些设备的 GPS 坐标发送到 Power BI Live 数据流。
从 ASA 到 Power BI 的数据如下所示:
设备经纬度 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 是接收设备发送消息的最近时间的度量。
这在表格中显示时有效,但是我无法将这些度量映射到 Power BI 中的映射控件,它不支持度量或聚合。
如果我使用普通的纬度/经度和设备字段作为地图控件上的位置和名称,我会得到所有找到设备的位置。但这不是我想要的,我只想要设备的最后一个位置。
请注意,我正在使用 Azure 流分析将实时数据发送到 Power BI,在 Power BI 中这是作为推送数据集接收的,因此我无法在 Power BI 中使用自定义建模。
【问题讨论】:
【参考方案1】:我认为这不可能是您想要做的。
但是,您可以将 Power BI API 直接用于推送数据集,而不是使用 Azure 流分析,然后自己将 GPS 坐标发布到 API。 您可以事先清除表格,这样您就只能得到最新的值。不幸的是,您无法删除或更新单行,因此您必须每次都发布完整的表格。这有点麻烦,但它确实有效。如果您的地图上有一些项目,删除表中的所有行并再次添加它们对性能的影响并不是什么大问题。 我们在一些项目中使用了这种技术,它的运行速度非常快。我们仅每隔几分钟更新一次 GPS 坐标,并且仅在它们发生更改时发布到 API。
您可以使用https://github.com/Microsoft/PowerBI-CSharp C# API 库来简化发布到 API 的过程。
【讨论】:
谢谢!我实际上最终创造了类似的东西。我认为这是目前唯一可能的解决方案。【参考方案2】:我的建议是创建一个仅包含每个设备的最后位置的计算表,并将该表用作地图的数据集。
这应该会给你你想要的表格:
= 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 坐标以显示在地图上。
【讨论】:
谢谢,但因为我使用 Azure 流分析将实时数据发送到 Power BI,所以这是在 Power BI 中作为推送数据集接收的,您不能在 Power BI 中使用自定义建模。所以不幸的是,这个解决方案对我不起作用。 @RodyvanSambeek 好的。所以你说你唯一可以使用的东西是措施,但地图不支持措施?那你在这里寻找什么样的答案? 地图不支持测量。我不知道为什么,因为所有其他 PowerBI 组件都支持它们。但我正在为一个相当简单的用例寻找解决方案。一些 GPS 设备通过流分析不断发送 GPS 数据,我想在地图上显示最新的 GPS 位置。在我看来,这是一个相当简单的要求。也许有不同的解决方案?我不认为我是第一个尝试这个的人。【参考方案3】:我会首先计算一个“帮助”列来测试每台设备的最新时间,例如
Latest Time per Device =
IF (
[Time]
= CALCULATE (
MAX ( 'PowerBI'[Time] ),
FILTER ( 'PowerBI', 'PowerBI'[Device] = EARLIER ( [Device] ) )
),
"Is Latest Time per Device",
"Other"
)
然后我会将该列用作过滤器,例如添加到视觉级别过滤器,然后选择“每个设备的最新时间”条目。然后,您可以在过滤后的视觉对象中使用 Lat 和 Lon 列。
【讨论】:
不幸的是,我处于 Power BI Live 数据流的上下文中,这意味着我无法添加帮助列,只能添加度量值。度量不允许对较早或 [Time] 等列值进行此类过滤。【参考方案4】:这可能不是您正在寻找的答案,但我建议您采取一些解决方法:
使用按日期排序的前 N 个过滤器(您可以在实时数据集中使用其中一个)。您的地图将仅显示最后的点或短路径。 修改 RoutMap 自定义视觉对象以仅绘制最后一个值。我认为如果你有代码应该很容易:) https://github.com/weiweicui/PowerBI-Routemap【讨论】:
以上是关于从 ASA 到 Power BI Map 的实时位置数据的主要内容,如果未能解决你的问题,请参考以下文章
如何从 Node-RED/ Octoblu 获取数据到 Power BI
如何通过阻止实时过滤功能来减少Power BI请求到数据库的数量