使用Power BI 流数据集API实时推送数据

发布于:2022-12-07 ⋅ 阅读:(819) ⋅ 点赞:(0)

使用Power BI 流数据集API实时推送数据

Power BI实现实时的数据流,由于21v azure 流还不支持powerbi,因此另外一个方案就是使用API推送,请见下面步骤

1、创建流数据集

 

 

选择API

我这里定义了一个数据 FlowData,

 

数据集的Json格式

[
{
"timespan" :"2022-06-20T03:21:46.639Z",
"flow" :98.6
}
]

完成后:

 

现在可以使用:推送URL把数据推送上来。

2、使用函数应用推送数据

创建函数应用

推送是数据就有很多种了,这里我使用Function 来进行。

首先创建一个Function ,

创建一个函数应用

 

选择

类似这样的界面:

 

我使用.net 6 喝linux系统创建一个函数应用。

由于是模拟从数据库取出数据,这里我创建一个Azure SQL 。获取Azure的连接字符串。具体过程不做讲诉。由于是测试我使用公网进行连接

字符串类似如下

Server=tcp:xxx.database.chinacloudapi.cn,1433;Initial Catalog=pbitest;Persist Security Info=False;User ID=max;Password={your_password};MultipleActiveResultSets=False;Encrypt=True;TrustServerCertificate=False;Connection Timeout=30;

创建函数应用程序

创建Function也有很多方法,由于我习惯使用visual Studio,因此使用VS来创建。

1、新建项目

2、选择 Azure Functions

3、选择Time trigger, schedule 设置为*/5 * * * * *,就是5秒钟执行一次。

 

 

点击创建完成。

将 SqlClient 包添加到项目中

  1. 添加包含 SqlClient 库的 NuGet 包。 需要此数据访问库以连接到 SQL 数据库。

  2. 在 Visual Studio 2022 中打开本地函数应用项目。

  3. 在“解决方案资源管理器”中,右键单击函数应用项目,并选择“管理 NuGet 包”。

  4. 转到“浏览”选项卡,搜索 System.Data.SqlClient,找到后将其选中。

  5. 在“System.Data.SqlClient”页面,选择版本 4.8.3,然后单击“安装” 。

  6. 安装完成后,查看所做的更改,然后单击“确定”以关闭“预览”窗口。

  7. 如果显示“接受许可证”窗口,则单击“我接受”

  8. 找到local.settings.json ,在values 里面添加连接字符串如:

     "AzureSQL_Connect": "Server=tcp:xxxxr.database.chinacloudapi.cn,1433;Initial Catalog=pbitest;Persist Security Info=False;User ID=max;Password= ;MultipleActiveResultSets=False;Encrypt=True;TrustServerCertificate=False;Connection Timeout=30;"
​

程序代码如下:

using System;
using System.Net.Http;
using System.Threading.Tasks;
using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Host;
using Microsoft.Extensions.Logging;
using Newtonsoft.Json;
using System.Data.SqlClient;
​
namespace FunctionApp1
{
    public class Function1
    {
        [FunctionName("Function1")]
        public static async Task Run([TimerTrigger("*/5 * * * * *")] TimerInfo myTimer, ILogger log)
        {
​
            Random random = new Random();
            string pbiurl = "自己数据集的API URL"; 
            // Use class-level HttpClient as a best practice
            DateTime currentTime;
         
            var str = Environment.GetEnvironmentVariable("AzureSQL_Connect");
            log.LogInformation(str);
​
            using (SqlConnection conn = new SqlConnection(str))
            {
                conn.Open();
                var text = "select top 1 [timespan] ,[flow] from[flowdata] order by timespan desc";
                FlowRecording flowRecording = new FlowRecording();
​
                using (SqlCommand cmd = new SqlCommand(text, conn))
                {
                    // Execute the command and log the # rows affected.
                    SqlDataReader reader = cmd.ExecuteReader();
                    while (reader.Read())
                    {
                        flowRecording.flow = Convert.ToInt16(reader["flow"]);
                        flowRecording.timespan=Convert.ToDateTime(reader["timespan"]);
​
​
                    }
​
                    var jsonString = JsonConvert.SerializeObject(flowRecording);
                    var postToPowerBi = HttpPostAsync(pbiurl, "[" + jsonString + "]"); // Add brackets for Power BI
​
                    currentTime = GetDateTimeUtc();
                    log.LogInformation($"C# Timer trigger function executed at: {DateTime.Now}");
​
                }
            }
​
​
         
​
           
​
​
        }
​
        private static async Task<HttpResponseMessage> HttpPostAsync(string url, string data)
        {
            // Construct an HttpContent object from StringContent
            HttpClient client = new HttpClient();
            HttpContent content = new StringContent(data);
            HttpResponseMessage response = await client.PostAsync(url, content);
            response.EnsureSuccessStatusCode();
            return response;
        }
        private static DateTime GetDateTimeUtc()
        {
            return DateTime.UtcNow;
        }
​
        public class FlowRecording
        {
            public int flow { get; set; }
            public DateTime timespan { get; set; }
        }
    }
​
}

发布应用

完成后可以本地运行测试,测试完成后发布到function。浏览创建的function,下载发布配置文件:

 

鼠标右键点击程序,选择发布,导入配置文件

 

点击发布即可发布到应用程序

发布完成后,在函数应用中可以看到状态,

选择配置,添加应用配置

 

添加应用程序设置:

 

添加连接字符串

AzureSQL_Connect
值为 数据库连接串

3、创建实时仪表板

 

 

添加磁贴

 

选择自定义流数据

 

选择定义好的数据流

选择可视化效果

 

选择值

 

确定即可

再添加一个选择为折线图

选择如下:

 

测试效果如下:

 

本文含有隐藏内容,请 开通VIP 后查看