使用Power BI API 向流数据集推送实时数据并在仪表板可视化

640?wx_fmt=png

使用Power BI 实现实时数据的可视化是大家比较关心的一个话题,在仪表盘上实现推送数据的展示,可以在诸如指挥大屏等场景下使用。


本视频实战内容如下:https://v.qq.com/x/page/y3030euh6do.html




先看下效果,下图中的曲线会自动刷新:

640?wx_fmt=png


步骤如下:

  1. 创建流数据集,选择API 方式

    其中Azure 流分析,截至到2019年12月,中国区Azure流分析暂时不支持将输出直接写入到Power BI 中。

    640?wx_fmt=png


  2. 填写数据集名称和值及值类型并打开历史数据分析:

    其中历史数据分析是用来暂存数据的,暂存的数据可以呈现一条曲线。


    640?wx_fmt=png

  3. 创建一个仪表盘并向仪表盘添加一个实时数据磁贴


    640?wx_fmt=png


4. 选择已经创建好的流数据集


640?wx_fmt=png

5. 在仪表板页面添加一个自定义的流数据磁贴

可视化效果选择折线图

“轴”选择时间

温度湿度添加为“值”

640?wx_fmt=png

6. 通过如下图示的信息调用Post请求即可将数据推送到数据集

640?wx_fmt=png


Postman发送的结果为200表示执行成功。

640?wx_fmt=png

7. 在数据集上创建报表,可以查阅使用POST请求推送到流数据集的结果

640?wx_fmt=png



8.调用示例代码如下:

using Newtonsoft.Json;using System;using System.IO;using System.Net;using System.Text;using System.Threading.Tasks;namespace pushdatatopowerbidataset{    class Program    {        private static int s_telemetryInterval = 1; // Seconds        private static string PowerBIPushDataUrl = "https://api.powerbi.cn/beta/729c6bf9-debe-4b7f-b56a-5fb0c70c9a80/datasets/fc445a3c-9a25-4298-8188-89112874e5c3/rows?key=seAORXugMKybekrdRAxfSWM5o1MS%2F9d4pcPF9zAgblivdNXz9pRivqyVwAS%2FXMoo8wA01vuAu%2B2hBHI8gdAWMg%3D%3D";       private static void Main(string[] args)        {            Console.WriteLine("Send realtime data to power bi dataset by api. Ctrl-C to exit.\n");            SendMessageToPbiDataSetAsync();            Console.ReadLine();        }        private static async void SendMessageToPbiDataSetAsync()        {             while (true)            {                // Initial telemetry values                double minTemperature = 20;                double minHumidity = 60;                Random rand = new Random();                double currentTemperature = minTemperature + rand.NextDouble() * 15;                double currentHumidity = minHumidity + rand.NextDouble() * 20;                // Create JSON message                var telemetryDataPoint = new                {                    temperature = currentTemperature,                    humidity = currentHumidity,                    time=DateTime.Now                };                var messageString = JsonConvert.SerializeObject(telemetryDataPoint);                PostUrlAsync(PowerBIPushDataUrl, messageString);                await Task.Delay(s_telemetryInterval * 1000);            }        }        public static string PostUrlAsync(string url, string postData)        {            string result = "";            HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url);            req.Method = "POST";            req.Timeout = 8000;//设置请求超时时间,单位为毫秒            req.ContentType = "application/json";            byte[] data = Encoding.UTF8.GetBytes("["+ postData+"]");            req.ContentLength = data.Length;            using (Stream reqStream = req.GetRequestStream())            {                reqStream.Write(data, 0, data.Length);                reqStream.Close();            }            HttpWebResponse resp = (HttpWebResponse)req.GetResponse();            Stream stream = resp.GetResponseStream();            //获取响应内容             if(resp.StatusCode==HttpStatusCode.OK)            {                Console.WriteLine("OK"+"    "+postData);            }            return result;        }    } }

至此,可以在仪表板上看到实时刷新的可视化效果:

640?wx_fmt=png




640?wx_fmt=gif



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章