PowerBI Tile数据集变化背后的奥秘

问题描述 投票:0回答:0

.NET PowerBI SDK 在 Microsoft.PowerBI.Api.Models 命名空间中提供Tile 类。

这个 Tile 类,有趣的是,有一个 DatasetId 公共属性,它有 both a public getter 和 public setter

我在下面有以下方法,旨在最终返回一个类型为PowerBITileEmbedInfo的自定义对象,其中包含前端PowerBI JS SDK所需的所有渲染配置值:

public async Task<PowerBITileEmbedInfo> GetDefaultTileEmbedInfo()
        {
                var currentUserId = 1;

                // Get a list of dashboards.
                var dashboards = await m_PowerBIClient.Dashboards.GetDashboardsInGroupAsync(m_ReportsWorkspaceId);

                // Get the first report in the workspace.
                var dashboard = dashboards.Value.FirstOrDefault();

                if (dashboard == null)
                {
                    throw new NullReferenceException("Workspace has no dashboards");
                }

                var tiles = await m_PowerBIClient.Dashboards.GetTilesInGroupAsync(m_ReportsWorkspaceId, dashboard.Id);

                // Get the first tile in the workspace.
                var tile = tiles.Value.FirstOrDefault();

                string datasetId = tile.DatasetId;

                // Generate Embed Token for a tile.
                var effectiveIdentities = new List<EffectiveIdentity>();
                var effectiveIdentity = new EffectiveIdentity()
                {
                    Username = currentUserId.ToString(),
                    Roles = new List<string>() { "Reader" },
                    Datasets = new List<string>() { datasetId }
                };

                effectiveIdentities.Add(effectiveIdentity);

                var generateTokenRequestParameters = new GenerateTokenRequest(accessLevel: "view", identities: effectiveIdentities);
                var tokenResponse = await m_PowerBIClient.Tiles.GenerateTokenInGroupAsync(m_ReportsWorkspaceId, dashboard.Id, tile.Id, generateTokenRequestParameters);

                if (tokenResponse == null)
                {
                    throw new NullReferenceException("Failed to generate embed token");
                }


                // Generate Embed Configuration.
                var tileEmbedConfig = new PowerBITileEmbedInfo()
                {
                    AccessToken = tokenResponse.Token,
                    EmbedUrl = tile.EmbedUrl,
                    TileId = tile.Id.ToString(),
                    DashboardId = dashboard.Id.ToString()
                };

                return tileEmbedConfig;
           

        }

我基本上是将直接来自图块对象的 DataSetId 属性分配给我随后用于我的 EffectiveIdentity(用于 RLS)的 datasetId 变量。

根据我的理解,tilereport 的一部分,它背后有一个数据集。

我的目标是能够更改数据集,从而让图块的数据相应地反映这一点。我需要它,因为我正在开发的应用程序是多租户的,我希望该图块与与每个租户链接的数据集相关。

在线提供的 PowerBI 文档在明确说明什么时候应该使用 V1 生成嵌入令牌,什么时候使用 V2,或者如何处理这个方面通常是模糊的。

是否有可能以编程方式更改图块后面的数据集并让 UI 数据充分反映这一点?

我是否需要先更改从中获取图块的报告背后的数据集,然后再尝试获取图块?如果是这样,我怎样才能正确生成嵌入令牌?

附言我推测重新绑定不是要走的路。

c# .net powerbi dataset powerbi-embedded
© www.soinside.com 2019 - 2024. All rights reserved.