Kontrol latihan dinamis
Catatan
Fitur ini tersedia dari API versi 5.7.0.
Fitur kontrol latihan dinamis memungkinkan visual mengaktifkan atau menonaktifkan fitur latihan secara dinamis menggunakan panggilan API. Saat fitur latihan diaktifkan, semua fungsi penelusuran dan fitur perluas/ciutkan tersedia, termasuk panggilan API, perintah menu konteks, tombol latihan header, dan dukungan untuk data hierarki. Saat dinonaktifkan, fungsionalitas ini tidak tersedia.
Gambar berikut menunjukkan contoh visual dengan fitur kontrol latihan dinamis diaktifkan dan dinonaktifkan:
Fitur kontrol latihan dinamis mencakup elemen API berikut:
Bendera
isDrillDisabled
diDataRolesInfo
:export interface DataRolesInfo { //… isDrillDisabled?: boolean; // ----- NEW ----- }
Metode
setCanDrill
dalam antarmukaIVisualHost
:export interface IVisualHost extends extensibility.IVisualHost { //… setCanDrill: (drillAllowed: boolean) => void; // ----- NEW ----- }
Untuk mengidentifikasi apakah latihan dinonaktifkan, gunakan isDrillDisabled
properti dalam metode pembaruan:
private update(options: VisualUpdateOptions) {
//…
const isDrillDisabled = options.dataViews[0].metadata.dataRoles.isDrillDisabled;
//…
}
Kemudian gunakan panggilan API untuk mengaktifkan atau menonaktifkan latihan sesuai kebutuhan:
Untuk mengaktifkan:
this.host.setCanDrill(true /* drillAllowed */);
Untuk menonaktifkan:
this.host.setCanDrill(false /* drillAllowed */);
Persyaratan kontrol latihan dinamis
Pengeboran diaktifkan secara default, tetapi fitur kontrol latihan dinamis memungkinkan visual mengaktifkan atau menonaktifkan pengeboran menggunakan panggilan API.
Visual dengan fitur kontrol latihan dinamis, memiliki kode berikut dalam file capabilities.json :
Dengan latihan dinonaktifkan secara default:
"drilldown": { "roles": [ "Rows", "Columns" ], "canDisableDrill": { "disabledByDefault": true } },
Dengan latihan diaktifkan secara default:
"drilldown": { "roles": [ "Rows", "Columns" ], "canDisableDrill": {} },
Properti canDisableDrill
menunjukkan bahwa visual mendukung fitur ini. Tanpa properti ini, panggilan API tidak dihormati.
Properti disabledByDefault
menunjukkan apakah akan menonaktifkan fitur latihan secara default atau tidak.
Catatan
Properti disabledByDefault
berlaku saat Anda melakukan salah satu tindakan berikut:
- Menambahkan visual baru ke kanvas
- Konversikan visual dari visual yang tidak mendukung fitur ini.
Misalnya, jika Anda mengonversi sourceVisual ke targetVisual, properti targetVisualdisabledByDefault
dianggap hanya jika sourceVisual tidak mendukung fitur ini. Jika sourceVisual mendukung fitur ini, targetVisual menyimpan status sourceVisual dan bukan default.
Menambahkan dukungan telusuri paling detail ke versi baru visual yang sudah ada
Menggunakan fitur telusuri paling detail mewakili perubahan yang melanggar. Oleh karena itu, untuk transisi terhalus, kami sarankan Anda menggunakan GUID visual baru untuk versi baru.
Namun, jika Anda ingin menyimpan GUID yang sama, ingatlah poin-poin berikut:
Saat Anda bermigrasi dari versi yang tidak dapat digabungkan ke versi baru yang dapat dibor, beberapa data mungkin tidak disediakan karena
dataView
dukungan data hierarkis yang diperkenalkan sebagai bagian dari fitur latihan. Fitur kontrol latihan dinamis tidak menawarkan dukungan otomatis untuk masalah ini tetapi dapat digunakan untuk mengelola proses migrasi.Untuk migrasi mandiri visual, visual harus mengambil tindakan berikut:
Identifikasi pertama kali versi baru dimuat alih-alih versi yang lebih lama, dan terapkan
persistProperties
API.Nonaktifkan latihan untuk menerima semua data, menggunakan
setCanDrill
API.
Contoh berikut menunjukkan cara memigrasikan sendiri visual yang lebih lama ke visual yang menggunakan kontrol penelusuran dinamis:
Tambahkan objek berikut ke file capabilities.json:
"DrillMigration": { "displayName": "Drill Migration", "properties": { "isMigrated": { "displayName": "Is Drill Migrated", "type": { "bool": true } } } },
Tambahkan yang berikut ini ke file visual.ts :
export class Visual implements IVisual { //... private isCalledToDisableDrillInMigrationScenario = false; private drillMigration = { disabledByDefault: true }; constructor(options: VisualConstructorOptions) { //... this.host = options.host; //... } private update(options: VisualUpdateOptions) { this.handleSelfDrillMigration(options); //... } private handleSelfDrillMigration(options: VisualUpdateOptions): void { if (options && options.dataViews && options.dataViews[0] && options.dataViews[0].metadata) { const metadata = options.dataViews[0].metadata; if (metadata && metadata.dataRoles) { const isDrillDisabled = metadata.dataRoles.isDrillDisabled; if (isDrillDisabled === undefined) { return; } // Continue in case the visual is already migrated if (!metadata.objects?.DrillMigration?.isMigrated) { // Persist the isMigrated property when the drill has the correct state if (this.drillMigration.disabledByDefault === isDrillDisabled) { this.persistMigrationProperty(); } else if (!this.isCalledToDisableDrillInMigrationScenario) { // Use the API call only once this.host.setCanDrill(!this.drillMigration.disabledByDefault); this.isCalledToDisableDrillInMigrationScenario = true; } } } } } private persistMigrationProperty(): void { let property = { merge: [{ objectName: "DrillMigration", properties: { isMigrated: true }, selector: null }] }; this.host.persistProperties(property); } }
Pertama kali visual dibuka setelah menambahkan kode ini, variabel DrillMigration diatur ke true dan visual terbuka dalam status default.
Pertimbangan dan batasan
Status latihan tidak disimpan setelah menonaktifkan latihan. Jika Anda mengaktifkan kembali latihan setelah menonaktifkannya, hanya tingkat pertama yang ditampilkan terlepas dari apa yang ditampilkan sebelum dinonaktifkan.
Status perluas/ciutkan tidak disimpan setelah menonaktifkan latihan. Semua baris diciutkan setelah latihan diaktifkan kembali.
Panggilan API tidak didukung untuk dasbor.
Kondisi pemetaan tampilan data: Gunakan
"max": 1
untuk semua kondisi untuk peran yang dapat dibor untuk membatasi visual agar hanya menampilkan satu bidang saat latihan dinonaktifkan. Misalnya:Untuk tampilan data kategoris:
"conditions": [ { "category": { "min": 1 }, "measure": { "max": 1 }} ]
Untuk tampilan data matriks:
"conditions": [ { "Rows": { "max": 0 }, "Columns": { "max": 0 }, "Value": { "min": 1 } }, { "Rows": { "min": 1 }, "Columns": { "min": 0 }, "Value": { "min": 0 } }, { "Rows": { "min": 0 }, "Columns": { "min": 1 }, "Value": { "min": 0 } }, ]