Получить все страницы встроенного отчета о мощности - PullRequest
0 голосов
/ 11 июня 2018

Я разрабатываю встроенное приложение power bi для angular 4. Это приложение группирует несколько отчетов (хранящихся в Azure), и я хотел бы получить все страницы каждого отчета без необходимости загружать его в контейнер.Power bi api явно не позволяет этого;есть ли способ сделать это?

Ответы [ 2 ]

0 голосов
/ 18 января 2019

Я знаю, что уже поздно, но, возможно, полезно для других, таких как я, которые ищут фрагменты кода. Следующее получает все страницы отчета и создает кнопки для их встраивания на другую страницу.

Обратите внимание, что это из ASP.NETCORE MVC и я можем предоставить мою защищенную информацию для встраивания из предоставленной модели.

Надеюсь, это поможет ...

$(document).ready(function() {

        var preloadElement = powerbi.preload({ type: 'report', baseUrl: 'https://embedded.powerbi.com/reportEmbed' });

        $(preloadElement).on('preloaded', function () {
            setupEnhancedReportLinks("#enhanced-report-container", @Json.Serialize(Model.EnhancedReports));
        });

    });


function setupEnhancedReportLinks(containerName, reportsModel) {

        $.each(reportsModel, function () {

            const config = {
                type: 'report',
                id: this.id,
                embedUrl: this.embedUrl,
                accessToken: this.embedToken.token,
                tokenType: models.TokenType.Embed,
                permissions: models.Permissions.All,
                viewMode: models.ViewMode.View,
                settings: {
                    filterPaneEnabled: false,
                    navContentPaneEnabled: false
                }
            };

            let elements = [];
            elements.push($("<h4> ").attr({ id: `title-for-${config.id}` }).text(this.displayName));
            elements.push($("<div>").attr({ id: `buttons-for-${config.id}` }));

            // Note this element is hidden; loading a report still requires a page element to contain it, so we hide it on creation
            elements.push($("<div>").attr({ id: `report-for-${config.id}` }).hide());

            // add all report information into the main dom element
            $(containerName).append(($("<div>").attr({ id: `container-for-${config.id}`, 'class': 'well col-lg-12' }).append(elements)));

            // Load the report
            // fetch, then iterate the pages to create the buttons which are added to the report's button container
            var report = powerbi.load($(`#report-for-${config.id}`)[0], config);
            report.on('loaded',function() {

                report.getPages().then(function (pages) {
                    $.each(pages, function() {
                        console.log("is this a page", this, config);
                        $(`#buttons-for-${config.id}`)
                            .append($('<a>')
                                .text(this.displayName)
                                .attr({
                                    href: `/EmbeddedReport/EmbedReport?reportId=${config.id}&reportSection=${this.name}`,
                                    class: 'enh-button' 
                                }
                        ));
                    });
                });
            });
        });
    }
0 голосов
/ 25 июля 2018

К сожалению, сделать это невозможно с использованием текущих API REST, которые есть в Power BI.Вам, вероятно, потребуется использовать preload (или теплый запуск) для загрузки метаданных отчета без необходимости его отображения на экране.

Подробнее см. Здесь: https://github.com/Microsoft/PowerBI-JavaScript/wiki/Phased-Embedding-API

...