问题描述
问题定义:我有带有时间戳的 Azure Percept 数据通过 Azure 流分析提供给 PowerBI 报告。我想添加一个自定义日历表并将其与关系联系在一起,但日期时间数据类型不允许 PowerBI 桌面中的两个表之间的关系正常工作。
可能的解决方案:有没有办法更改 DirectQuery 连接中字段的数据类型,或者有没有办法将数据类型定义为日期并在流分析中为时间创建单独的字段?
重现步骤:
- 启动 Azure Percept
- 开始流分析作业
- 启动 PowerBI Desktop 并使用 Get Data -> PowerBI Datasets 连接到 PowerBI 服务中的数据集
- 在 PowerQuery 中创建日历表
- 使用日历表中的日期字段与 powerBI 服务数据集中的日期时间戳字段之间的关系将这两个表连接在一起。
- 弹出窗口询问您是否要转换为 DirectQuery 连接,说是,然后连接两个日期字段。
- 但在报告视图中,日历表日期字段上的切片器不会过滤其他直接连接的表。
我尝试过的:
我用来将 Percept 数据放入 PowerBI 的查询代码(用于流分析)。
SELECT
Percept.ArrayValue.label,Percept.ArrayValue.confidence,GetArrayElement(Percept.ArrayValue.bBox,0) AS bBox0,1) AS bBox1,2) AS bBox2,3) AS bBox3,Percept.ArrayValue.bBox,CAST (udf.main(Percept.ArrayValue.timestamp) as Datetime) as DETECTION_TIMESTAMP,Percept.ArrayValue.timestamp
INTO
"PowerBI Output"
FROM
"IoT HUB Input" as event
CROSS APPLY GetArrayElements(event.Neural_Network) AS Percept
WHERE
CAST(Percept.ArrayValue.confidence as Float) > 0.6
解决方法
我认为您可以在 ASA 端实现类似下面的内容。我试图解决的逻辑是读取日期时间的“部分”并将其连接起来以构建日期和时间字段。
,CONCAT ( DATEPART ( YYYY,(udf.main(Percept.ArrayValue.timestamp)),'-',DATEPART ( mm,DATEPART ( dd,(udf.main(Percept.ArrayValue.timestamp) ) as 'Date-Only',CONCAT ( DATEPART ( hr,':',DATEPART ( mi,DATEPART ( ss,(udf.main(Percept.ArrayValue.timestamp) ) as 'time Only'
您还提到您正在使用直接查询在 PowerBI 中提取数据,我知道您也可以在 PowerBI 端实现 simalar 逻辑
请告诉我进展如何。
,如果我理解正确,您的 ASA 作业中有 Power BI 输出,而不是数据库中的表。
如果是这种情况,则在 Power BI 中创建的用于保存数据的内容是 Streaming Dataset。流式数据集的限制之一是它们不能成为模型的一部分。我不明白为什么 Desktop 允许您创建关系,这应该是不可能的。
如果您需要这种关系,您可以:
- 从 Power BI 输出切换到 ASA 的 Azure SQL 输出,以新创建的表为目标。然后使用直接查询模式在该表的顶部构建您的模型。这不是一种实时解决方案,但您可以将数据长期存储在 SQL 数据库中。
- 从 ASA 切换到新发布的(仍在预览中)Power BI Streaming Dataflows。在幕后,它仍然是 ASA,但除了与 Power Bi 更一致的开发体验之外,您还可以获得带有冷热存储的新输出表。