Power BI的Azure Stream Analytics查询

时间:2017-12-12 17:09:15

标签: azure azure-stream-analytics stream-analytics

我在从Azure IOT Hub到Azure流分析(ASA)到Power BI的事件中提取数据时遇到问题。

以下是进入Azure IOT中心的Feed的示例:

"data": "[{\"Temperature\":74.15750885,\"Humidity\":26.32574463}]",
"device_id": "1e0037000d47353136383631",
"event": "Photon_WeatherData",
"published_at": "2017-12-12T16:52:18.405Z"

我可以通过ASA通过直接查询将其推送到Power BI:

SELECT *
INTO PowerBI
FROM PhotonEventData

结果如下:     Screenshot of PBI Dataset

[{"Temperature":73.81002045,"Humidity":26.56988525}]

但我似乎无法剥离ASA中的数据点,以便我可以将每个键/值对传递给Power BI。我尝试了一些不同的东西,例如:

SELECT data.Temperature
INTO PowerBI
FROM PhotonEventData

2 个答案:

答案 0 :(得分:0)

由于数据是一个数组,而不是一个复杂的类型Class将不起作用。

您需要使用SELECT data.Temperate方法,请参阅the docs。由于数组包含复杂类型,因此需要GetRecordPropertyValue来获取GetArrayElement属性的值:

Temperature

编辑:正如另一个答案所指出的,您的数据属性包含一个字符串数组而不是一个json对象数组。如果您可以解决这个问题,那么它可以正确代表下面的对象,您可以使用我的解决方案:

SELECT GetRecordPropertyValue(GetArrayElement(data, 0), 'Temperature') AS Temperature
INTO PowerBI
FROM PhotonEventData

答案 1 :(得分:0)

似乎"数据"字段被格式化为字符串而不是JSON对象。您可能希望使用JavaScript UDF函数将其解析为JSON。 为此,您可以在Azure Stream Analytics中创建此功能:

function main(input, key) {
   //  return key
    var myinput = String(input)
    myinput = myinput.substring(1, myinput.length - 1);
    values = JSON.parse(myinput);
    return values[key]
 }

然后您的查询将是:

select udf.extract(data,'Temperature') as temp, udf.extract(data,'Humidity') as hmdt from PhotonEventData

如果您有任何进一步的问题,请与我们联系。