2016-11-09 77 views
1

我试图通过流分析将我的IoT Hub数据发送到Power BI。 只要没有包含在物联网设备的json数据中的数组,就可以正常工作。Azure流分析查询:将json阵列数据发送到PowerBI

我的问题是:我希望如何修改我的分析数据查询,以便PowerBI能够解释数据作为数组/表?我如何使用TIMESTAMP BY每个数组元素(使用“timecreated”)?

JSON字符串我发送到物联网中心看起来像这样:

{"sensordata":[{"name":"Temp_0","value":3,"timecreated":"2016-11-09T11:08:00Z"}, 
{"name":"Temp_0","value":7,"timecreated":"2016-11-09T11:08:02Z"}, 
{"name":"Temp_1","value":2,"timecreated":"2016-11-09T11:08:04Z"}]} 

流分析从物联网中心收到什么:

[{"sensordata":[{"name":"Temp_0","value":3,"timecreated":"2016-11-09T11:08:00.0000000Z"}, 
{"name":"Temp_0","value":7,"timecreated":"2016-11-09T11:08:02.0000000Z"}, 
{"name":"Temp_1","value":2,"timecreated":"2016-11-09T11:08:04.0000000Z"}],  
"EventProcessedUtcTime":"2016-11-09T10:08:57.9325156Z","PartitionId":0, 
"EventEnqueuedUtcTime":"2016-11-09T10:08:47.8050000Z","IoTHub": 
{"MessageId":null,"CorrelationId":null,"ConnectionDeviceId":"toCloudDevice", 
"ConnectionDeviceGenerationId":"607350268321425367", 
"EnqueuedTime":"0001-01-01T00:00:00.0000000","StreamId":null}}] 

我的分析数据查询看起来是这样的:

SELECT sensordata.ArrayValue AS data, 
    COUNT(*) 
INTO 
    [transmit-data] 
FROM 
    [receive-data] AS e 
CROSS APPLY GetArrayElements(e.sensordata) AS sensordata 
GROUP BY 
    sensordata, 
    tumblingWindow(Second, 10) 

IoT Hub发送给Power BI的内容:

[{"data":{"name":"Temp_1","value":2,"timecreated":"2016-11-09T11:08:04.0000000Z"}, 
"count":1},{"data":{"name":"Temp_0","value":7,"timecreated":"2016-11-09T11:08:02.0000000Z"}, 
"count":1},{"data":{"name":"Temp_0","value":3,"timecreated":"2016-11-09T11:08:00.0000000Z"}, 
"count":1}] 

PowerBI无法以合理的方式解释这些数据。

我希望能够生成图形,例如在x轴上有时间并且在y轴上具有Temp_0的值。

关于这个问题的任何想法?你的帮助将不胜感激。

(顺便说一句:从设备的IoT JSON串具有不同的数组元素的数!)

回答

1

电源BI不允许像阵列或记录复杂的对象。你的情况的问题是“数据”字段是一个记录。

请尝试以下查询,而不是:

SELECT 
    sensordata.ArrayValue.data.Name, 
    sensordata.ArrayValue.data.Value, 
    sensordata.ArrayValue.data.Timecreated, 
    COUNT(*) 
INTO 
    [transmit-data] 
FROM 
    [receive-data] AS e 
CROSS APPLY GetArrayElements(e.sensordata) AS sensordata 
GROUP BY 
    sensordata, 
    tumblingWindow(Second, 10) 

不能对单独的数组元素应用TIMESTAMP今天很遗憾。有一个限制,即单个事件只能有一个时间戳。但是,您可以将作业分成两部分,第一部分作业是CROSS APPLY并将事件插入到中间事件集线器中,第二个作业是由TIMESTAMP BY和集合部分组成的集合。

+0

这是非常有用的thx! (尽管我不得不在SELECT语句中忽略'.data'。)PowerBI现在能够消化数据并生成图形。我暂时不能分开“Temp_0”和“Temp_1”,并会尝试按照您的想法使用中间事件中心。 –

+0

(在PowerBI服务图表中分隔“Temp_0”和“Temp_1”的简单方法是在“名称”上使用过滤器。) –