Personalize a report layout
With a custom report layout, you can embed a Power BI report with a different layout than what was saved in the original report. When you define a custom report layout, you can vary the size of a report page, and control the size, position, and visibility of visuals on the page.
Custom layout overview
To create a custom report layout, define a custom layout object and pass it to the settings object in an embed configuration.
In the settings object, set layoutType
to models.LayoutType.Custom
and set customLayout
to your custom layout object:
let embedConfig = {
...
settings: {
layoutType: models.LayoutType.Custom
customLayout: {...}
}
};
For more information about report settings, see Configure report settings.
How to define a custom report layout
Each custom report layout is represented by a custom layout object that you define to specify the page size, canvas scale, and pages layout. Within the pages layout, you can specify a visual layout for each visual and a default visual layout for the report.
Custom layout interface definition
Use the ICustomLayout
interface to define a custom layout object:
interface ICustomLayout {
pageSize?: IPageSize;
displayOption?: DisplayOption;
pagesLayout?: PagesLayout;
}
The ICustomLayout interface has the following properties:
pageSize
- AnIPageSize
object that defines the page size of the canvas area for the report.interface IPageSize { type: PageSizeType; }
The
IPageSize
object uses thePageSizeType
enum to set the page size:enum PageSizeType { Widescreen, Standard, Cortana, Letter, Custom }
displayOption
- ADisplayOption
enum that controls how to scale the canvas to fit in the frame.enum DisplayOption { FitToPage, FitToWidth, ActualSize }
pagesLayout
- APagesLayout
object that controls the layout for each visual on a page. This property maps a page name to aPageLayout
object. For more information, see Define a pages layout.type PagesLayout = { [key: string]: IPageLayout; }
Define a pages layout
Use the IPageLayout
interface to define a pages layout object. The interface enables you to define a visual layout map, which maps each visual name to a new layout object, and a default visual layout. Defining a pages layout is optional. If you don't provide a layout for a report, Power BI applies the default layout to the report. That is, the default layout is what applies to all the visuals that you don't specify in the visuals layout object. For example, you can initially hide all the visuals in a report, and then show selected visuals in the layout of your choice.
interface IPageLayout {
defaultLayout: IVisualLayout,
visualsLayout: { [key: string]: IVisualLayout; };
}
The IPageLayout interface has the following properties:
defaultLayout
- AnIVisualLayout
object that defines the default visual layout. The default layout is automatically applied to all the visuals on the report page.defaultLayout?: IVisualLayout
visualsLayout
- AVisualsLayout
object that defines a map between the visual names and visual layouts on the report page.visualsLayout: VisualsLayout
VisualsLayout = { [key: string]: IVisualLayout; }
Define a visual layout
To define a visual layout, use the IVisualLayout
interface to create a visual layout object and set its position, size, and visibility.
interface IVisualLayout {
x?: number;
y?: number;
z?: number;
width?: number;
height?: number;
displayState?: IVisualContainerDisplayState;
}
The IVisualLayout interface has the following properties:
x
,y
,z
- Defines the x, y, and z coordinates of the visual.width
,height
- Defines the width and height of the visual.displayState
- AnIVisualContainerDisplayState
object that defines the visibility of the visual.interface IVisualContainerDisplayState { mode: VisualContainerDisplayMode; }
The
IVisualContainerDisplayState
object uses theVisualContainerDisplayMode
enum to set the visibility:enum VisualContainerDisplayMode { Visible, Hidden }
Update the layout
To update the report layout when the report is already loaded, use the report.updateSettings
method. For more information, see Update report settings at runtime.
Example
This complete code example shows how to embed a report with a custom report layout. All visuals are hidden except for two visuals: VisualContainer1 and VisualContainer2. VisualContainer1 has a new layout, position, and size, while VisualContainer2 is visible with the report's default layout.
// Get models. Models contains enums that can be used.
let models = window['powerbi-client'].models;
let embedConfig = {
type: 'report',
id: reportId,
embedUrl: 'https://app.powerbi.com/reportEmbed',
tokenType: models.TokenType.Embed,
accessToken: 'H4...rf',
settings: {
layoutType: models.LayoutType.Custom
customLayout: {
pageSize: {
type: models.PageSizeType.Custom,
width: 1600,
height: 1200
},
displayOption: models.DisplayOption.ActualSize,
pagesLayout: {
"ReportSection1" : {
defaultLayout: {
displayState: {
mode: models.VisualContainerDisplayMode.Hidden
}
},
visualsLayout: {
"VisualContainer1": {
x: 1,
y: 1,
z: 1,
width: 400,
height: 300,
displayState: {
mode: models.VisualContainerDisplayMode.Visible
}
},
"VisualContainer2": {
displayState: {
mode: models.VisualContainerDisplayMode.Visible
}
},
}
}
}
}
}
};
...
// Embed the report and display it within the div container.
let report = powerbi.embed(embedContainer, embedConfig);