2016-11-09 2 views
1

Я пытаюсь отправить данные IoT Hub в Power BI через Stream Analytics. Это прекрасно работает, пока в json-данных с устройства IoT нет массивов.Azure Stream Analytics Query: отправить данные массива json в PowerBI

Мои вопросы: Как мне изменить запрос Stream Analytics, чтобы PowerBI мог интерпретировать данные как массив/таблицу? Как TIMESTAMP по каждому элементу массива (используя «timecreated»)?

JSON строку я отправить IoT Hub выглядит следующим образом:

{"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"}]} 

Что поток Analytics получает от IoT Hub:

[{"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}}] 

Мой поток Analytics Query выглядит следующим образом:

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 посылает в 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 и имеющие значения для Temp_0 по оси y.

Есть идеи по этому вопросу? Ваша помощь будет принята с благодарностью.

(кстати: JSON строки из IoT устройства имеют различные количества элементов массива!)

ответ

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 BY на отдельных элементах массива сегодня, к сожалению. Существует ограничение, что одно событие может иметь только одну метку времени. Тем не менее, вы можете разделить свою работу на две части, где первое задание CROSS APPLY и вставляет события в промежуточный центр событий, а второе задание - TIMESTAMP BY и агрегация

+0

Это супер полезно, thx! (Я должен был оставить «.data» в инструкции SELECT, хотя ..) PowerBI теперь может переваривать данные и генерировать графики. Я не могу отделить «Temp_0» и «Temp_1» еще и попытаюсь следовать вашей идее, чтобы использовать промежуточный центр событий. –

+0

(Простой способ separete «Temp_0» и «Temp_1» в графике сервисов PowerBI использовать фильтр на «имя».) –

Смежные вопросы