Azure 流分析查询:将 json 数组数据发送到 PowerBI
Azure Stream Analytics Query: Send json array data to PowerBI
我正在尝试通过流分析将我的 IoT 中心数据发送到 Power BI。
只要 IoT 设备的 json 数据中不包含任何数组,此方法就可以正常工作。
我的问题是: 我必须如何修改我的流分析查询,以便 PowerBI 能够将数据解释为 array/table?如何按每个数组元素进行时间戳(使用 "timecreated")?
我发送到 IoT 中心的 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"}]}
流分析从 IoT 中心接收的内容:
[{"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 中心向 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 字符串具有不同数量的数组元素!)
Power BI 不允许像数组或记录这样的复杂对象。您遇到的问题是 "data" 字段是一条记录。
请改为尝试以下查询:
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 和聚合
我正在尝试通过流分析将我的 IoT 中心数据发送到 Power BI。 只要 IoT 设备的 json 数据中不包含任何数组,此方法就可以正常工作。
我的问题是: 我必须如何修改我的流分析查询,以便 PowerBI 能够将数据解释为 array/table?如何按每个数组元素进行时间戳(使用 "timecreated")?
我发送到 IoT 中心的 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"}]}
流分析从 IoT 中心接收的内容:
[{"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 中心向 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 字符串具有不同数量的数组元素!)
Power BI 不允许像数组或记录这样的复杂对象。您遇到的问题是 "data" 字段是一条记录。
请改为尝试以下查询:
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 和聚合