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

    本视频实战内容如下:

    api实时数据.mp4 (30.3MB) 先看下效果,下图中的曲线会自动刷新:
    使用Power BI API 向流数据集推送实时数据并在仪表板可视化 - 图3

    步骤如下:

    1. 创建流数据集,选择API 方式
      其中Azure 流分析,截至到2019年12月,中国区Azure流分析暂时不支持将输出直接写入到Power BI 中。
      使用Power BI API 向流数据集推送实时数据并在仪表板可视化 - 图4

    2. 填写数据集名称和值及值类型并打开历史数据分析:
      其中历史数据分析是用来暂存数据的,暂存的数据可以呈现一条曲线。

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

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

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

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

    使用Power BI API 向流数据集推送实时数据并在仪表板可视化 - 图7
    5. 在仪表板页面添加一个自定义的流数据磁贴
    可视化效果选择折线图
    “轴”选择时间
    温度湿度添加为“值”
    使用Power BI API 向流数据集推送实时数据并在仪表板可视化 - 图8
    6. 通过如下图示的信息调用Post请求即可将数据推送到数据集
    使用Power BI API 向流数据集推送实时数据并在仪表板可视化 - 图9

    Postman发送的结果为200表示执行成功。
    使用Power BI API 向流数据集推送实时数据并在仪表板可视化 - 图10
    7. 在数据集上创建报表,可以查阅使用POST请求推送到流数据集的结果
    使用Power BI API 向流数据集推送实时数据并在仪表板可视化 - 图11

    8.调用示例代码如下:

    1. using Newtonsoft.Json;
    2. using System;
    3. using System.IO;
    4. using System.Net;
    5. using System.Text;
    6. using System.Threading.Tasks;
    7. namespace pushdatatopowerbidataset
    8. {
    9. class Program
    10. {
    11. private static int s_telemetryInterval = 1; // Seconds
    12. 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";
    13. private static void Main(string[] args)
    14. {
    15. Console.WriteLine("Send realtime data to power bi dataset by api. Ctrl-C to exit.\n");
    16. SendMessageToPbiDataSetAsync();
    17. Console.ReadLine();
    18. }
    19. private static async void SendMessageToPbiDataSetAsync()
    20. {
    21. while (true)
    22. {
    23. // Initial telemetry values
    24. double minTemperature = 20;
    25. double minHumidity = 60;
    26. Random rand = new Random();
    27. double currentTemperature = minTemperature + rand.NextDouble() * 15;
    28. double currentHumidity = minHumidity + rand.NextDouble() * 20;
    29. // Create JSON message
    30. var telemetryDataPoint = new
    31. {
    32. temperature = currentTemperature,
    33. humidity = currentHumidity,
    34. time=DateTime.Now
    35. };
    36. var messageString = JsonConvert.SerializeObject(telemetryDataPoint);
    37. PostUrlAsync(PowerBIPushDataUrl, messageString);
    38. await Task.Delay(s_telemetryInterval * 1000);
    39. }
    40. }
    41. public static string PostUrlAsync(string url, string postData)
    42. {
    43. string result = "";
    44. HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url);
    45. req.Method = "POST";
    46. req.Timeout = 8000;//设置请求超时时间,单位为毫秒
    47. req.ContentType = "application/json";
    48. byte[] data = Encoding.UTF8.GetBytes("["+ postData+"]");
    49. req.ContentLength = data.Length;
    50. using (Stream reqStream = req.GetRequestStream())
    51. {
    52. reqStream.Write(data, 0, data.Length);
    53. reqStream.Close();
    54. }
    55. HttpWebResponse resp = (HttpWebResponse)req.GetResponse();
    56. Stream stream = resp.GetResponseStream();
    57. //获取响应内容
    58. if(resp.StatusCode==HttpStatusCode.OK)
    59. {
    60. Console.WriteLine("OK"+" "+postData);
    61. }
    62. return result;
    63. }
    64. }
    65. }

    至此,可以在仪表板上看到实时刷新的可视化效果:
    使用Power BI API 向流数据集推送实时数据并在仪表板可视化 - 图12

    image.png