使用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 包添加到项目中
添加包含 SqlClient 库的 NuGet 包。 需要此数据访问库以连接到 SQL 数据库。
在 Visual Studio 2022 中打开本地函数应用项目。
在“解决方案资源管理器”中,右键单击函数应用项目,并选择“管理 NuGet 包”。
转到“浏览”选项卡,搜索 System.Data.SqlClient,找到后将其选中。
在“System.Data.SqlClient”页面,选择版本 4.8.3,然后单击“安装” 。
安装完成后,查看所做的更改,然后单击“确定”以关闭“预览”窗口。
如果显示“接受许可证”窗口,则单击“我接受”
找到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、创建实时仪表板


添加磁贴

选择自定义流数据

选择定义好的数据流

选择可视化效果

选择值

确定即可
再添加一个选择为折线图
选择如下:

测试效果如下:
