Personalisieren eines Berichtslayouts
Mit einem benutzerdefinierten Berichtslayout können Sie einen Power BI-Bericht mit einem anderen Layout einbetten als das, was im ursprünglichen Bericht gespeichert wurde. Wenn Sie ein benutzerdefiniertes Berichtslayout definieren, können Sie die Größe einer Berichtsseite variieren und die Größe, Position und Sichtbarkeit visueller Elemente auf der Seite steuern.
Übersicht über das benutzerdefinierte Layout
Um ein benutzerdefiniertes Berichtslayout zu erstellen, definieren Sie ein benutzerdefiniertes Layoutobjekt und übergeben es an das Einstellungsobjekt in einer Einbettungskonfiguration.
Legen Sie im Einstellungsobjekt layoutType
auf models.LayoutType.Custom
fest, und legen Sie customLayout
auf Ihr benutzerdefiniertes Layoutobjekt fest:
let embedConfig = {
...
settings: {
layoutType: models.LayoutType.Custom
customLayout: {...}
}
};
Weitere Informationen zu Berichtseinstellungen finden Sie unter Konfigurieren von Berichtseinstellungen.
So definieren Sie ein benutzerdefiniertes Berichtslayout
Jedes benutzerdefinierte Berichtslayout wird durch ein benutzerdefiniertes Layoutobjekt dargestellt, das Sie definieren, um das Seitenformat, die Canvasskala und das Seitenlayout anzugeben. Innerhalb des Seitenlayouts können Sie ein visuelles Layout für jedes visuelle Layout und ein standardmäßiges visuelles Layout für den Bericht angeben.
Definition der benutzerdefinierten Layoutschnittstelle
Verwenden Sie die ICustomLayout
-Schnittstelle, um ein benutzerdefiniertes Layoutobjekt zu definieren:
interface ICustomLayout {
pageSize?: IPageSize;
displayOption?: DisplayOption;
pagesLayout?: PagesLayout;
}
Die ICustomLayout Schnittstelle weist die folgenden Eigenschaften auf:
pageSize
– EinIPageSize
-Objekt, das die Seitengröße des Zeichenbereichs für den Bericht definiert.interface IPageSize { type: PageSizeType; }
Das
IPageSize
-Objekt verwendet diePageSizeType
Enumeration, um die Seitengröße festzulegen:enum PageSizeType { Widescreen, Standard, Cortana, Letter, Custom }
displayOption
– EineDisplayOption
Enumeration, die steuert, wie die Canvas so skaliert wird, dass sie in den Frame passt.enum DisplayOption { FitToPage, FitToWidth, ActualSize }
pagesLayout
– EinPagesLayout
-Objekt, das das Layout für jedes visuelle Element auf einer Seite steuert. Diese Eigenschaft ordnet einemPageLayout
-Objekt einen Seitennamen zu. Weitere Informationen finden Sie unter Definieren eines Seitenlayouts.type PagesLayout = { [key: string]: IPageLayout; }
Definieren eines Seitenlayouts
Verwenden Sie die IPageLayout
Schnittstelle, um ein Seitenlayoutobjekt zu definieren. Über die Schnittstelle können Sie eine visuelle Layoutzuordnung definieren, die jedem visuellen Namen ein neues Layoutobjekt und ein standardmäßiges visuelles Layout zuordnet. Das Definieren eines Seitenlayouts ist optional. Wenn Sie kein Layout für einen Bericht bereitstellen, wendet Power BI das Standardlayout auf den Bericht an. Das Standardlayout gilt also für alle visuellen Elemente, die Sie im visuellen Layoutobjekt nicht angeben. Sie können z. B. zunächst alle visuellen Elemente in einem Bericht ausblenden und dann ausgewählte visuelle Elemente im Layout Ihrer Wahl anzeigen.
interface IPageLayout {
defaultLayout: IVisualLayout,
visualsLayout: { [key: string]: IVisualLayout; };
}
Die IPageLayout Schnittstelle weist die folgenden Eigenschaften auf:
defaultLayout
– EinIVisualLayout
-Objekt, das das standardmäßige visuelle Layout definiert. Das Standardlayout wird automatisch auf alle visuellen Elemente auf der Berichtsseite angewendet.defaultLayout?: IVisualLayout
visualsLayout
– EinVisualsLayout
-Objekt, das eine Zuordnung zwischen den visuellen Namen und visuellen Layouts auf der Berichtsseite definiert.visualsLayout: VisualsLayout
VisualsLayout = { [key: string]: IVisualLayout; }
Definieren eines visuellen Layouts
Verwenden Sie zum Definieren eines visuellen Layouts die IVisualLayout
Schnittstelle, um ein visuelles Layoutobjekt zu erstellen und seine Position, Größe und Sichtbarkeit festzulegen.
interface IVisualLayout {
x?: number;
y?: number;
z?: number;
width?: number;
height?: number;
displayState?: IVisualContainerDisplayState;
}
Die IVisualLayout Schnittstelle weist die folgenden Eigenschaften auf:
x
,y
,z
– Definiert die X-, Y- und Z-Koordinaten des visuellen Elements.width
,height
– Definiert die Breite und Höhe des visuellen Elements.displayState
– EinIVisualContainerDisplayState
-Objekt, das die Sichtbarkeit des visuellen Elements definiert.interface IVisualContainerDisplayState { mode: VisualContainerDisplayMode; }
Das
IVisualContainerDisplayState
-Objekt verwendet dieVisualContainerDisplayMode
Enumeration, um die Sichtbarkeit festzulegen:enum VisualContainerDisplayMode { Visible, Hidden }
Aktualisieren des Layouts
Um das Berichtslayout zu aktualisieren, wenn der Bericht bereits geladen wurde, verwenden Sie die report.updateSettings
-Methode. Weitere Informationen finden Sie unter Aktualisieren der Berichtseinstellungen zur Laufzeit.
Beispiel
In diesem vollständigen Codebeispiel wird gezeigt, wie Sie einen Bericht mit einem benutzerdefinierten Berichtslayout einbetten. Alle visuellen Elemente sind mit Ausnahme von zwei visuellen Elementen ausgeblendet: VisualContainer1 und VisualContainer2. VisualContainer1 verfügt über ein neues Layout, eine neue Position und größe, während VisualContainer2- mit dem Standardlayout des Berichts sichtbar ist.
// 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);