在嵌入时而非初始嵌入后过滤报表的视觉对象 - Power BI Embedded (JS)

Filter a report's visual at embed time rather than after initial embed - Power BI Embedded (JS)

目前通过 JS powerbi-client 嵌入特定视觉的配置不允许传入过滤器。参见 "Embed a report visual" for the configuration supported. Note that you are able to pass in filters at embed time for a report. See "Embed a report"。无法在嵌入时过滤视觉对象会导致 2 个跃点(一次使用默认过滤器加载视觉对象,然后另一个使用预期过滤器加载视觉对象)。

功能请求:我希望在嵌入时添加功能以过滤视觉效果,就像它存在于报告中一样。

我现在这样做的方法是隐藏视觉对象,嵌入它,加载时设置过滤器,然后在渲染时显示它。

this.visualReady = false;

let visual = this.powerbi.embed(
  embedElement,
  visualLoadConfig
) as pbi.Visual;

visual.on('loaded', async () => {
  await visual.setFilters([upcFilter, dateFilter]);
});

visual.on('rendered', async () => {
  this.visualReady = true;
});

同时还有更好的方法吗?

目前,视觉嵌入不支持在嵌入时添加过滤器的配置,即 phased embedding 无法用于视觉效果。

您目前采用的方法是更新视觉效果过滤器的最佳方法。

一个小的更正是您不需要隐藏视觉对象,因为它只会在过滤器更新后呈现。

请参考以下代码片段以嵌入带有过滤器的视觉对象:

const visual = powerbi.embed(PowerBIEmbed.visualContainer.get(0), visualConfig);

// Clear any other loaded handler events
visual.off("loaded");

// Triggers when a visual schema is successfully loaded
visual.on("loaded", function () {
    console.log("visual load successful");

    const basicFilter = {
        $schema: "http://powerbi.com/product/schema#basic",
        target: {
            table: "Dates",
            column: "Month"
        },
        operator: "In",
        values: ['Feb'],
        filterType: 1,
        requireSingleSelection: true
    }

    visual.setFilters([basicFilter]).then(res => {
        visual.getFilters().then(filters => {
            console.log(filters);
        });
    }).catch(error => {
        console.error(error);
    });
});

// Clear any other rendered handler events
visual.off("rendered");

// Triggers when a visual is successfully embedded in UI
visual.on("rendered", function () {
    console.log("visual render successful");
});

应用过滤器的视觉嵌入:

未应用过滤器的视觉嵌入: