Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Power BI menyediakan dua cara untuk berinteraksi dengan visual - memilih dan memfilter. Contoh berikut menunjukkan cara memilih item dari satu visual dan memberi tahu visual lain dalam laporan tentang status pilihan baru.
Antarmuka sesuai dengan Selection objek:
export interface ISelectionId {
equals(other: ISelectionId): boolean;
includes(other: ISelectionId, ignoreHighlight?: boolean): boolean;
getKey(): string;
getSelector(): Selector;
getSelectorsByColumn(): SelectorsByColumn;
hasIdentity(): boolean;
}
Menggunakan manajer pemilihan untuk memilih titik data
Objek host visual menyediakan metode untuk membuat instans manajer pemilihan. Manajer pilihan memiliki metode yang sesuai untuk setiap tindakan berikut:
- Pilih
- Menghapus pilihan
- Menampilkan menu konteks
- Menyimpan pilihan saat ini
- Memeriksa status pilihan
Membuat instans manajer pemilihan
Untuk menggunakan pengelola pilihan, buat instans manajer pilihan. Biasanya, visual membuat instans manajer pilihan di bagian constructor objek visual.
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();
}
// ...
}
Membuat instans penyusun pilihan
Saat instans manajer pemilihan dibuat, Anda perlu membuat selections untuk setiap titik data visual. Metode createSelectionIdBuilder objek host visual menghasilkan pilihan untuk setiap titik data. Metode ini mengembalikan instans objek dengan antarmuka 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;
}
Objek ini memiliki metode yang sesuai untuk membuat selections untuk berbagai jenis pemetaan tampilan data.
Catatan
Metode withTable dan withMatrixNode diperkenalkan pada API 2.5.0 dari visual Power BI.
Jika Anda perlu menggunakan pilihan untuk pemetaan tampilan data tabel atau matriks, perbarui ke API versi 2.5.0 atau yang lebih tinggi.
Membuat pilihan untuk pemetaan tampilan data kategoris
Mari kita tinjau bagaimana pilihan mewakili pemetaan tampilan data kategoris untuk contoh model semantik:
| Produsen | Tipe | Nilai |
|---|---|---|
| Chrysler | Mobil Domestik | 28883 |
| Chrysler | Truk Domestik | 117131 |
| Chrysler | Mobil Impor | 0 |
| Chrysler | Truk Impor | 6362 |
| Ford | Mobil Domestik | 50032 |
| Ford | Truk Domestik | 122446 |
| Ford | Mobil Impor | 0 |
| Ford | Truk Impor | 0 |
| GM | Mobil Domestik | 65426 |
| GM | Truk Domestik | 138122 |
| GM | Mobil Impor | 197 |
| GM | Truk Impor | 0 |
| Honda | Mobil Domestik | 51450 |
| Honda | Truk Domestik | 46115 |
| Honda | Mobil Impor | 2932 |
| Honda | Truk Impor | 0 |
| Nissan | Mobil Domestik | 51476 |
| Nissan | Truk Domestik | 47343 |
| Nissan | Mobil Impor | 5485 |
| Nissan | Truk Impor | 1430 |
| Toyota | Mobil Domestik | 55643 |
| Toyota | Truk Domestik | 61227 |
| Toyota | Mobil Impor | 20799 |
| Toyota | Truk Impor | 23614 |
Visual menggunakan pemetaan tampilan data berikut:
{
"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"
}
}
]
}
}
}
}
]
}
Dalam contoh sebelumnya, Manufacturer adalah columns dan Type adalah rows. Seri dibuat dengan mengelompokkan nilai menurut rows (Type).
Visual harus dapat menggoreng data dengan Manufacturer atau Type.
Misalnya, jika pengguna memilih Chrysler menurut Manufacturer, visual lain harus menampilkan data berikut:
| Produsen | Tipe | Nilai |
|---|---|---|
| Chrysler | Mobil Domestik | 28883 |
| Chrysler | Truk Domestik | 117131 |
| Chrysler | Mobil Impor | 0 |
| Chrysler | Truk Impor | 6362 |
Saat pengguna memilih Import Car berdasarkan Type (memilih data menurut seri), visual lain harus menampilkan data berikut:
| Produsen | Tipe | Nilai |
|---|---|---|
| Chrysler | Mobil Impor | 0 |
| Ford | Mobil Impor | 0 |
| GM | Mobil Impor | 197 |
| Honda | Mobil Impor | 2932 |
| Nissan | Mobil Impor | 5485 |
| Toyota | Mobil Impor | 20799 |
Untuk menampilkan data irisan, isi keranjang data visual sebagai berikut:
Dalam contoh sebelumnya, Manufacturer adalah kategori (kolom), Type adalah seri (baris), dan Sales untuk Values seri.
Catatan
Values diperlukan untuk menampilkan seri karena, menurut pemetaan tampilan data, Values dikelompokkan menurut Rows data.
Membuat pilihan untuk kategori
// 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);
}
Dalam kode sampel sebelumnya, kita melakukan iterasi melalui semua kategori. Dalam setiap perulangan, kami memanggil createSelectionIdBuilder untuk membuat pilihan berikutnya untuk setiap kategori dengan memanggil withCategory metode penyusun pilihan. Metode createSelectionId ini digunakan sebagai metode akhir untuk mengembalikan objek yang dihasilkan selection .
withCategory Dalam metode , kami meneruskan kolom category, dalam sampel, Manufacturer, dan indeks elemen kategori.
Membuat pilihan untuk seri
// 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);
});
Membuat pilihan untuk pemetaan tampilan data tabel
Contoh berikut menunjukkan pemetaan tampilan data tabel:
{
"dataRoles": [
{
"displayName": "Values",
"name": "values",
"kind": "GroupingOrMeasure"
}
],
"dataViewMappings": [
{
"table": {
"rows": {
"for": {
"in": "values"
}
}
}
}
]
}
Untuk membuat pilihan untuk setiap baris pemetaan tampilan data tabel, panggil withTable metode penyusun pilihan.
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();
}
}
Kode visual melakukan iterasi baris tabel dan setiap baris memanggil withTable metode tabel. withTable Parameter metode adalah table objek dan indeks baris tabel.
Buat pilihan untuk pemetaan tampilan data matriks
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);
});
}
}
}
Dalam sampel, nodeWalker secara rekursif memanggil setiap node dan node turunan.
nodeWalker membuat objek nodeSelection pada setiap panggilan. Setiap nodeSelection mewakili selection node yang sesuai.
Pilih titik data untuk menggorok visual lain
Dalam contoh ini, kita membuat handler klik untuk elemen tombol. Handler memanggil metode select dari manajer pemilihan dan meneruskan objek pemilihan.
button.addEventListener("click", () => {
// handle click event to apply correspond selection
this.selectionManager.select(categorySelectionId);
});
Antarmuka select metode :
interface ISelectionManager {
// ...
select(selectionId: ISelectionId | ISelectionId[], multiSelect?: boolean): IPromise<ISelectionId[]>;
// ...
}
Metode select ini dapat menerima array pilihan. Ini memungkinkan visual Anda memilih beberapa titik data sekaligus. Parameter kedua, multiSelect, bertanggung jawab atas multi-pilihan. Jika multiSelect benar, Power BI tidak menghapus status pilihan sebelumnya saat menerapkan pilihan saat ini. Jika nilai salah, pilihan sebelumnya akan ditimpa.
Contoh umum penggunaan multiSelect adalah menangani status tombol Ctrl pada peristiwa klik. Saat tombol Ctrl ditahan, Anda dapat memilih lebih dari satu objek.
button.addEventListener("click", (mouseEvent) => {
const multiSelect = (mouseEvent as MouseEvent).ctrlKey;
this.selectionManager.select(seriesSelectionId, multiSelect);
});