Bemærk
Adgang til denne side kræver godkendelse. Du kan prøve at logge på eller ændre mapper.
Adgang til denne side kræver godkendelse. Du kan prøve at ændre mapper.
Power BI indeholder to måder at interagere med visualiseringer på – valg og filtrering. I følgende eksempel kan du se, hvordan du vælger et element fra én visualisering og giver de andre visualiseringer i rapporten besked om den nye markeringstilstand.
Grænsefladen svarer til et Selection objekt:
export interface ISelectionId {
equals(other: ISelectionId): boolean;
includes(other: ISelectionId, ignoreHighlight?: boolean): boolean;
getKey(): string;
getSelector(): Selector;
getSelectorsByColumn(): SelectorsByColumn;
hasIdentity(): boolean;
}
Brug valgstyringen til at vælge datapunkter
Det visuelle værtsobjekt indeholder en metode til oprettelse af en forekomst af valgstyringen. Valgstyringen har en tilsvarende metode for hver af følgende handlinger:
- Markér
- Ryd markeringen
- Vis genvejsmenuen
- Gem de aktuelle markeringer
- Kontrollér markeringstilstanden
Opret en forekomst af valgstyringen
Hvis du vil bruge valgstyringen, skal du oprette forekomsten af en valgstyring. Visualiseringer opretter normalt en forekomst af valgstyringen constructor i afsnittet i visualiseringsobjektet.
export class Visual implements IVisual {
private target: HTMLElement;
private host: IVisualHost;
private selectionManager: ISelectionManager;
// ...
constructor(options: VisualConstructorOptions) {
this.host = options.host;
// ...
this.selectionManager = this.host.createSelectionManager();
}
// ...
}
Opret en forekomst af valggeneratoren
Når forekomsten af valgstyringen oprettes, skal du oprette selections for hvert datapunkt i visualiseringen. Metoden for visualiseringens createSelectionIdBuilder værtsobjekt genererer et valg for hvert datapunkt. Denne metode returnerer en forekomst af objektet med grænsefladen powerbi.visuals.ISelectionIdBuilder:
export interface ISelectionIdBuilder {
withCategory(categoryColumn: DataViewCategoryColumn, index: number): this;
withSeries(seriesColumn: DataViewValueColumns, valueColumn: DataViewValueColumn | DataViewValueColumnGroup): this;
withMeasure(measureId: string): this;
withMatrixNode(matrixNode: DataViewMatrixNode, levels: DataViewHierarchyLevel[]): this;
withTable(table: DataViewTable, rowIndex: number): this;
createSelectionId(): ISelectionId;
}
Dette objekt har tilsvarende metoder til at oprette selections for forskellige typer tilknytninger af datavisninger.
Bemærk
Metoderne withTable og withMatrixNode blev introduceret i API 2.5.0 af Power BI-visualiseringerne.
Hvis du har brug for at bruge valg til tilknytninger af tabel- eller matrixdatavisninger, skal du opdatere til API-version 2.5.0 eller nyere.
Opret valg til tilknytning af kategoriske datavisninger
Lad os gennemgå, hvordan valg repræsenterer tilknytning af kategoriske datavisninger for en semantisk eksempelmodel:
| Producent | Skriv | Værdi |
|---|---|---|
| Chrysler | Privat bil | 28883 |
| Chrysler | Indenlandsk lastbil | 117131 |
| Chrysler | Importér bil | 0 |
| Chrysler | Importér lastbil | 6362 |
| Ford | Privat bil | 50032 |
| Ford | Indenlandsk lastbil | 122446 |
| Ford | Importér bil | 0 |
| Ford | Importér lastbil | 0 |
| GM | Privat bil | 65426 |
| GM | Indenlandsk lastbil | 138122 |
| GM | Importér bil | 197 |
| GM | Importér lastbil | 0 |
| Honda | Privat bil | 51450 |
| Honda | Indenlandsk lastbil | 46115 |
| Honda | Importér bil | 2932 |
| Honda | Importér lastbil | 0 |
| Nissan | Privat bil | 51476 |
| Nissan | Indenlandsk lastbil | 47343 |
| Nissan | Importér bil | 5485 |
| Nissan | Importér lastbil | 1430 |
| Toyota | Privat bil | 55643 |
| Toyota | Indenlandsk lastbil | 61227 |
| Toyota | Importér bil | 20799 |
| Toyota | Importér lastbil | 23614 |
Visualiseringen bruger følgende tilknytning af datavisninger:
{
"dataRoles": [
{
"displayName": "Columns",
"name": "columns",
"kind": "Grouping"
},
{
"displayName": "Rows",
"name": "rows",
"kind": "Grouping"
},
{
"displayName": "Values",
"name": "values",
"kind": "Measure"
}
],
"dataViewMappings": [
{
"categorical": {
"categories": {
"for": {
"in": "columns"
}
},
"values": {
"group": {
"by": "rows",
"select": [
{
"for": {
"in": "values"
}
}
]
}
}
}
}
]
}
I det foregående eksempel Manufacturer er columns og Type er rows. En serie oprettes ved at gruppere værdier efter rows (Type).
Visualiseringen skal kunne opdele data efter Manufacturer eller Type.
Hvis en bruger f.eks. vælger Chrysler efter Manufacturer, skal andre visualiseringer vise følgende data:
| Producent | Skriv | Værdi |
|---|---|---|
| Chrysler | Privat bil | 28883 |
| Chrysler | Indenlandsk lastbil | 117131 |
| Chrysler | Importér bil | 0 |
| Chrysler | Importér lastbil | 6362 |
Når brugeren vælger Import Car efter Type (vælger data efter serie), skal de andre visualiseringer vise følgende data:
| Producent | Skriv | Værdi |
|---|---|---|
| Chrysler | Importér bil | 0 |
| Ford | Importér bil | 0 |
| GM | Importér bil | 197 |
| Honda | Importér bil | 2932 |
| Nissan | Importér bil | 5485 |
| Toyota | Importér bil | 20799 |
Hvis du vil have vist udsnitsdata, skal du udfylde visualiseringens datakurve på følgende måde:
I det foregående eksempel Manufacturer er kategorien (kolonner), Type er serie (rækker) og Sales er Values til serier.
Bemærk
Values er påkrævet for at vise en serie, fordi grupperes efter data i henhold til tilknytningen Values af Rows datavisning.
Opret valg for kategorier
// categories
const categories = dataView.categorical.categories;
// create label for 'Manufacturer' column
const p = document.createElement("p") as HTMLParagraphElement;
p.innerText = categories[0].source.displayName.toString();
this.target.appendChild(p);
// get count of category elements
const categoriesCount = categories[0].values.length;
// iterate all categories to generate selection and create button elements to use selections
for (let categoryIndex = 0; categoryIndex < categoriesCount; categoryIndex++) {
const categoryValue: powerbi.PrimitiveValue = categories[0].values[categoryIndex];
const categorySelectionId = this.host.createSelectionIdBuilder()
.withCategory(categories[0], categoryIndex) // we have only one category (only one `Manufacturer` column)
.createSelectionId();
this.dataPoints.push({
value: categoryValue,
selection: categorySelectionId
});
console.log(categorySelectionId);
// create button element to apply selection on click
const button = document.createElement("button") as HTMLButtonElement;
button.value = categoryValue.toString();
button.innerText = categoryValue.toString();
button.addEventListener("click", () => {
// handle click event to apply correspond selection
this.selectionManager.select(categorySelectionId);
});
this.target.appendChild(button);
}
I den foregående eksempelkode gentager vi alle kategorier. I hver gentagelse kalder createSelectionIdBuilder vi for at oprette det næste valg for hver kategori ved at kalde withCategory metoden for valggeneratoren. Metoden createSelectionId bruges som en endelig metode til at returnere det genererede selection objekt.
I metoden withCategory overfører vi kolonnen for categoryi eksemplet, dens Manufacturerog indekset for kategorielementet.
Opret markeringer for serier
// get groupped values for series
const series: powerbi.DataViewValueColumnGroup[] = dataView.categorical.values.grouped();
// create label for 'Type' column
const p2 = document.createElement("p") as HTMLParagraphElement;
p2.innerText = dataView.categorical.values.source.displayName;
this.target.appendChild(p2);
// iterate all series to generate selection and create button elements to use selections
series.forEach( (ser: powerbi.DataViewValueColumnGroup) => {
// create selection id for series
const seriesSelectionId = this.host.createSelectionIdBuilder()
.withSeries(dataView.categorical.values, ser)
.createSelectionId();
this.dataPoints.push({
value: ser.name,
selection: seriesSelectionId
});
// create button element to apply selection on click
const button = document.createElement("button") as HTMLButtonElement;
button.value =ser.name.toString();
button.innerText = ser.name.toString();
button.addEventListener("click", () => {
// handle click event to apply correspond selection
this.selectionManager.select(seriesSelectionId);
});
this.target.appendChild(button);
});
Opret valg til tilknytning af tabeldatavisning
I følgende eksempel vises tilknytning af tabeldatavisninger:
{
"dataRoles": [
{
"displayName": "Values",
"name": "values",
"kind": "GroupingOrMeasure"
}
],
"dataViewMappings": [
{
"table": {
"rows": {
"for": {
"in": "values"
}
}
}
}
]
}
Hvis du vil oprette en markering for hver række i tilknytningen af tabeldatavisninger, skal du kalde withTable metoden for valggenerator.
public update(options: VisualUpdateOptions) {
const dataView = options.dataViews[0];
dataView.table.rows.forEach((row: DataViewTableRow, rowIndex: number) => {
this.target.appendChild(rowDiv);
const selection: ISelectionId = this.host.createSelectionIdBuilder()
.withTable(dataView.table, rowIndex)
.createSelectionId();
}
}
Visualkoden gentager rækkerne i tabellen, og hver række kalder tabelmetoden withTable . Parametrene withTable for metoden er table objektet og indekset for tabelrækken.
Opret valg til tilknytning af matrixdatavisning
public update(options: VisualUpdateOptions) {
const host = this.host;
const rowLevels: powerbi.DataViewHierarchyLevel[] = dataView.matrix.rows.levels;
const columnLevels: powerbi.DataViewHierarchyLevel[] = dataView.matrix.rows.levels;
// iterate rows hierarchy
nodeWalker(dataView.matrix.rows.root, rowLevels);
// iterate columns hierarchy
nodeWalker(dataView.matrix.columns.root, columnLevels);
function nodeWalker(node: powerbi.DataViewMatrixNode, levels: powerbi.DataViewHierarchyLevel[]) {
const nodeSelection = host.createSelectionIdBuilder().withMatrixNode(node, levels);
if (node.children && node.children.length) {
node.children.forEach(child => {
nodeWalker(child, levels);
});
}
}
}
I eksemplet nodeWalker kalder rekursivt hver node og den underordnede node.
nodeWalker opretter et nodeSelection objekt ved hvert opkald. Hver nodeSelection repræsenterer en selection af de tilsvarende noder.
Vælg datapunkter for at opdele andre visualiseringer
I dette eksempel har vi oprettet en klikhandler for knapelementer. Handleren kalder select metoden for valgstyringen og overfører markeringsobjektet.
button.addEventListener("click", () => {
// handle click event to apply correspond selection
this.selectionManager.select(categorySelectionId);
});
Grænsefladen for select metoden:
interface ISelectionManager {
// ...
select(selectionId: ISelectionId | ISelectionId[], multiSelect?: boolean): IPromise<ISelectionId[]>;
// ...
}
Metoden select kan acceptere en matrix af valg. Dette gør det muligt for visualiseringen at markere flere datapunkter på én gang. Den anden parameter, , multiSelecter ansvarlig for flere valg. Hvis multiSelect er true, rydder Power BI ikke den forrige markeringstilstand, når den aktuelle markering anvendes. Hvis værdien er false, overskrives den forrige markering.
Et typisk eksempel på brug multiSelect er håndtering af ctrlknaptilstanden for en klikhændelse. Når ctrlknappen holdes nede, kan du markere mere end ét objekt.
button.addEventListener("click", (mouseEvent) => {
const multiSelect = (mouseEvent as MouseEvent).ctrlKey;
this.selectionManager.select(seriesSelectionId, multiSelect);
});