代码之家  ›  专栏  ›  技术社区  ›  Dan Cundy

电源BI嵌入布局未使用更新设置更新

  •  0
  • Dan Cundy  · 技术社区  · 7 年前

    因此,我试图通过使用报表分阶段来更改报表的布局类型。

    https://github.com/Microsoft/PowerBI-JavaScript/wiki/Embed-For-Mobile

    问题

    updateSettings() 我的新 LayoutType 不遵守,尽管其他设置也遵守,例如 filterPaneEnabled .

    过滤器窗格确实会消失,但报告类型不会更改。

    1. 预加载报告
    2. 使用配置加载报告
    3. 检查设备是否可移动,检查报告是否可移动
    4. 提交报告

    我的代码

    function PreloadReport(accessToken, embedUrl, embedReportId, reportTitle) {
    
        // Create embedding config
        var config = {
            type: 'report',
            embedUrl: 'https://app.powerbi.com/reportEmbed'
        };
    
        var PreloadElement = powerbi.preload(config);
    
        $(PreloadElement).on('preloaded', function () {
            console.log("Report Preloaded.");
            LoadMetadata(accessToken, embedUrl, embedReportId, reportTitle);
        });
    }
    

    function LoadMetadata(accessToken, embedUrl, embedReportId, reportTitle) {
    
        try {
    
            // Get navigation container.
            ReportPagesList = $('#reportpagesbuttons');
    
            // Add on click event.
            ReportPagesList.on('click', 'a', function (event) {
    
                var button = event.target;
                var report = $(button).data('report');
                var page = $(button).data('page');
    
                //console.log('Attempting to set page to: ', page.name);
                Report.setPage(page.name)
                    .then(function (response) {
    
                        ReportPageName = page.displayName;
    
                        // For appsights custom event.
                        ReportFullName = ReportTitle + ": " + ReportPageName;
                    });
            });
    
            // Get models. models contains enums that can be used.
            var models = window['powerbi-client'].models;
    
            var config = {
                type: 'report',
                tokenType: models.TokenType.Embed,
                accessToken: accessToken,
                embedUrl: embedUrl,
                id: embedReportId,
                permissions: models.Permissions.All,
                settings: {
                    filterPaneEnabled: true,
                    navContentPaneEnabled: false,
                    background: models.BackgroundType.Transparent,
                    layoutType: models.LayoutType.Master,
                    customLayout: {
                        displayOption: models.DisplayOption.FitToWidth
                    }
                }
            };
    
            // Get a reference to the embedded report HTML element
            var embedContainer = $('#reportContainer')[0];
    
            // Embed the report and display it within the div container.
            Report = powerbi.load(embedContainer, config);
    
            Report.on("loaded",
                function () {
    
                    console.log("Report loaded");
                    if (jQuery.browser.mobile) {
    
                        //Do we need to load a different report based on view screen size?
                        Report.getPages().then(function (pages) {
                            pages[0].hasLayout(models.LayoutType.MobilePortrait).then(function (hasLayout) {
                                console.log("Has mobile layout = " + hasLayout);
                                console.log("Is Mobile device = " + jQuery.browser.mobile);
    
                                if (hasLayout === true) {
    
                                    const newSettings = {
                                        filterPaneEnabled: false,
                                        layoutType: models.LayoutType.MobilePortrait
                                    };
                                    console.log("Updating mobile layout");
                                    Report.updateSettings(newSettings);
    
                                }
                            });
                        });
                    }
    
                    Timer = new Timer();
                    Timer.Start();
    
                    //Generate nav items.
                    generateReportNav(Report);
                    Report.render();
    
    
                });
    
        } catch (ex) {
    
            //Send to app insights.
            appInsights.trackException(ex);
        }
    
    1 回复  |  直到 7 年前
        1
  •  0
  •   Omri    7 年前

    如果这样做,加载后甚至不需要更改layoutType。