У меня есть отчет power bi с настольным и мобильным представлениями. Я бы хотел, чтобы браузер переключался между этими представлениями по мере изменения размера. Единственный способ, которым я могу в настоящее время достичь этого, - это вставить два экземпляра отчета в браузер, один мобильный, другой рабочий стол, и скрыть и показать их в зависимости от размера браузера.
Проблема в том, что если я установлю некоторые значения фильтра в представлении рабочего стола, то сужу браузер так, чтобы отображалось мобильное представление, тогда значения фильтра не будут одинаковыми, это очевидно потому, что в действительности существует два отдельные отчеты.
Другим недостатком этого подхода является то, что я, вероятно, также несу затраты на производительность моей базы данных при создании двух отчетов.
Что можно сделать, чтобы встроить только один отчет, который может динамически переключаться между мобильным и настольным представлениями?
ОБНОВЛЕНИЕ После ответа ниже, тестовый код для переключения макета между мобильным и пользовательским макетом
angular.element($window).on('resize', function () {
if (vm.report === null)
return;
var models = window['powerbi-client'].models;
var newLayout = models.LayoutType.Custom;
if (window.innerWidth < 768) {
newLayout = models.LayoutType.MobilePortrait;
}
if (vm.report.config.settings.layoutType !== newLayout) {
const newSettings = { layoutType: newLayout };
vm.report.updateSettings(newSettings);
}}
ОБНОВЛЕНИЕ 2, Добавлен код, чтобы показать, как создается отчет
// report config
var models = window['powerbi-client'].models;
var config = {
type: 'report',
tokenType: models.TokenType.Embed,
accessToken: result.accessToken,
embedUrl: result.embedUrl,
id: result.reportId,
permissions: models.Permissions.View,
viewMode: models.ViewMode.Read,
settings: {
filterPaneEnabled: false,
navContentPaneEnabled: false,
background: models.BackgroundType.Transparent,
layoutType: models.LayoutType.Custom,
customLayout: {
displayOption: models.DisplayOption.FitToPage
}
}
};
// get elements and embed them
var desktopReportContainer = $('.reportContainer')[0];
vm.report = powerbi.embed(desktopReportContainer, config);