You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

能否使用VB.NET代码嵌入Power BI报表并完成程序化创建全流程?

VB.NET与Power BI的集成方案

一、VB.NET嵌入Power BI报表

完全可以用VB.NET实现Power BI报表的嵌入,核心依赖Power BI Embedded的.NET SDK(兼容VB.NET,基于.NET平台),常见嵌入场景分为两种:

1. 桌面应用嵌入(WinForms/WPF)

通过WebView2控件加载Power BI嵌入页面,VB.NET后端负责生成合法的嵌入令牌与配置:

  • 先安装NuGet包:Microsoft.PowerBI.Api、Microsoft.Identity.Client
  • 示例代码片段:
Imports Microsoft.PowerBI.Api
Imports Microsoft.Identity.Client
Imports Microsoft.PowerBI.Api.Models

' 获取嵌入令牌
Dim clientId As String = "你的客户端ID"
Dim tenantId As String = "你的租户ID"
Dim workspaceId As String = "工作区ID"
Dim reportId As String = "报表ID"
Dim clientSecret As String = "客户端密钥"

Dim authority = $"https://login.microsoftonline.com/{tenantId}"
Dim app = ConfidentialClientApplicationBuilder.Create(clientId).WithClientSecret(clientSecret).WithAuthority(New Uri(authority)).Build()
Dim scopes = New List(Of String) From {"https://analysis.windows.net/powerbi/api/.default"}
Dim result = Await app.AcquireTokenForClient(scopes).ExecuteAsync()

' 构造嵌入配置
Dim embedConfig = New EmbedConfig With {
    .Token = result.AccessToken,
    .EmbedUrl = $"https://app.powerbi.com/reportEmbed?reportId={reportId}&groupId={workspaceId}",
    .Id = reportId
}
' 将embedConfig传递给WebView2控件加载对应的HTML页面(页面中用Power BI JS API渲染报表)

2. Web应用嵌入

VB.NET后端生成嵌入令牌与配置,前端页面通过Power BI JavaScript API渲染报表,后端逻辑和桌面场景类似,只需将配置返回给前端即可。


二、VB.NET程序化创建Power BI报表全流程

可以完成从数据获取、可视化设计到配置设置的完整流程,核心是调用Power BI REST API或对应的.NET SDK,分步骤实现:

1. 数据获取与数据集创建

用VB.NET连接目标数据源(SQL Server、Excel、API等)提取数据,再通过Power BI SDK将数据导入新建的数据集:

Imports Microsoft.PowerBI.Api
Imports Microsoft.PowerBI.Api.Models
Imports System.Net.Http.Headers

' 初始化Power BI客户端
Dim token = "你的访问令牌"
Dim client = New PowerBIClient(New Uri("https://api.powerbi.com/"))
client.DefaultRequestHeaders.Authorization = New AuthenticationHeaderValue("Bearer", token)

' 创建数据集
Dim dataset = New Dataset() With {
    .Name = "销售数据数据集",
    .Tables = New List(Of Table) From {
        New Table() With {
            .Name = "销售明细",
            .Columns = New List(Of Column) From {
                New Column() With {.Name = "日期", .DataType = "DateTime"},
                New Column() With {.Name = "产品", .DataType = "String"},
                New Column() With {.Name = "销售额", .DataType = "Double"}
            }
        }
    }
}
Dim createdDataset = Await client.Datasets.PostDatasetAsync(dataset)

' 插入数据
Dim rows = New List(Of Object()) From {
    {New DateTime(2024, 1, 1), "产品A", 1000},
    {New DateTime(2024, 1, 2), "产品B", 1500}
}
Await client.Datasets.PostRowsAsync(createdDataset.Id, "销售明细", rows)

2. 可视化设计与报表创建

Power BI暂不支持完全通过代码实现拖拽式布局,但可以通过API创建报表并添加指定类型的视觉对象:

' 创建空白报表
Dim report = New CreateReportRequest() With {
    .Name = "销售分析报表",
    .DatasetId = createdDataset.Id
}
Dim createdReport = Await client.Reports.CreateReportInGroupAsync(workspaceId, report)

' 添加柱状图视觉对象
Dim visual = New Visual() With {
    .Type = "clusteredColumnChart",
    .Title = "产品销售额对比",
    .DataRoles = New List(Of DataRole) From {
        New DataRole() With {.Name = "Category", .DatasetColumn = New DatasetColumn() With {.Name = "产品", .DatasetId = createdDataset.Id}},
        New DataRole() With {.Name = "Values", .DatasetColumn = New DatasetColumn() With {.Name = "销售额", .DatasetId = createdDataset.Id}}
    }
}
' 将视觉对象添加到报表页面(需先获取报表页面ID)
Dim page = Await client.Reports.GetPagesAsync(workspaceId, createdReport.Id)
Await client.Reports.AddVisualAsync(workspaceId, createdReport.Id, page(0).Name, visual)

3. 配置设置

  • 权限配置:通过API添加报表的访问用户或组:
Dim principal = New Principal() With {
    .Identifier = "用户邮箱/组ID",
    .PrincipalType = PrincipalType.User
}
Dim permission = New ReportUserAccessRight() With {.AccessRight = "ReadWrite"}
Await client.Reports.AddGroupUserAsync(workspaceId, createdReport.Id, principal, permission)
  • 刷新计划:设置数据集的自动刷新:
Dim refreshSchedule = New RefreshSchedule() With {
    .Enabled = True,
    .Frequency = RefreshFrequency.Daily,
    .TimeZone = "China Standard Time",
    .Times = New List(Of String) From {"08:00"}
}
Await client.Datasets.SetRefreshScheduleInGroupAsync(workspaceId, createdDataset.Id, refreshSchedule)

内容的提问来源于stack exchange,提问作者pyeoh 17

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 16:13:18