2016-11-09 70 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」的簡單方法是在「名稱」上使用過濾器。) –