Bagikan melalui


Mengambil lebih banyak data dari Power BI

API fetchMoreData memungkinkan Anda memuat potongan data dengan ukuran yang berbeda sebagai cara mengaktifkan visual Power BI untuk melewati batas keras tampilan data baris 30K. Selain pendekatan asli untuk menggabungkan semua gugus yang diminta, API sekarang juga mendukung pemuatan potongan data secara bertahap.

Anda dapat mengonfigurasi jumlah baris untuk diambil pada satu waktu sebelumnya, atau Anda dapat menggunakan dataReductionCustomization untuk mengizinkan penulis laporan mengatur ukuran gugus secara dinamis.

Catatan

fetchMoreData API tersedia dalam versi 3.4 ke atas.

API dinamis dataReductionCustomization tersedia dalam versi 5.2 ke atas.

Untuk mengetahui versi mana yang Anda gunakan, periksa apiVersion di file pbiviz.json .

Mengaktifkan pengambilan tersegmentasi dari model semantik besar

Tentukan ukuran jendela untuk dataReductionAlgorithm dalam file capabilities.json visual untuk yang diperlukandataViewMapping. count menentukan ukuran jendela, yang membatasi jumlah baris data baru yang dapat Anda tambahkan ke dataview di setiap pembaruan.

Misalnya, tambahkan kode berikut dalam file capabilities.json untuk menambahkan 100 baris data pada satu waktu:

"dataViewMappings": [
    {
        "table": {
            "rows": {
                "for": {
                    "in": "values"
                },
                "dataReductionAlgorithm": {
                    "window": {
                        "count": 100
                    }
                }
            }
    }
]

Segmen baru ditambahkan ke dataview yang ada dan diberikan ke visual sebagai panggilan update.

Menggunakan fetchMoreData di visual Power BI

Di Power BI, Anda dapat fetchMoreData dengan salah satu dari dua cara berikut:

  • mode agregasi segmen
  • mode pembaruan inkremental

Mode agregasi segmen (default)

Dengan mode agregasi segmen, tampilan data yang disediakan untuk visual berisi data akumulasi dari semua sebelumnya fetchMoreData requests. Oleh karena itu, ukuran tampilan data tumbuh dengan setiap pembaruan sesuai dengan ukuran jendela. Misalnya, jika total 100.000 baris diharapkan, dan ukuran jendela diatur ke 10.000, tampilan data pembaruan pertama harus menyertakan 10.000 baris, tampilan data pembaruan kedua harus menyertakan 20.000 baris, dan sebagainya.

Pilih mode agregasi segmen dengan memanggil fetchMoreData dengan aggregateSegments = true.

Anda dapat menentukan apakah data ada dengan memeriksa keberadaan dataView.metadata.segment:

    public update(options: VisualUpdateOptions) {
        const dataView = options.dataViews[0];
        console.log(dataView.metadata.segment);
        // output: __proto__: Object
    }

Anda juga dapat memeriksa untuk melihat apakah pembaruan adalah pembaruan pertama atau pembaruan berikutnya dengan memeriksa options.operationKind. Dalam kode berikut, VisualDataChangeOperationKind.Create mengacu pada segmen pertama dan VisualDataChangeOperationKind.Append mengacu pada segmen berikutnya.

// CV update implementation
public update(options: VisualUpdateOptions) {
    // indicates this is the first segment of new data.
    if (options.operationKind == VisualDataChangeOperationKind.Create) {

    }

    // on second or subsequent segments:
    if (options.operationKind == VisualDataChangeOperationKind.Append) {

    }

    // complete update implementation
}

Anda juga dapat memanggil fetchMoreData metode dari penanganan aktivitas UI:

btn_click(){
{
    // check if more data is expected for the current data view
    if (dataView.metadata.segment) {
        // request for more data if available; as a response, Power BI will call update method
        let request_accepted: bool = this.host.fetchMoreData(true);
        // handle rejection
        if (!request_accepted) {
            // for example, when the 100 MB limit has been reached
        }
    }
}

Sebagai respons untuk memanggil metode this.host.fetchMoreData, Power BI memanggil metode update visual dengan segmen data baru.

Catatan

Untuk menghindari batasan memori klien, Power BI membatasi total data yang diambil hingga 100 MB. Ketika batas ini tercapai, fetchMoreData() mengembalikan false.

Mode pembaruan inkremental

Dengan mode pembaruan bertahap, tampilan data yang disediakan untuk visual hanya berisi kumpulan data inkremental berikutnya. Ukuran tampilan data sama dengan ukuran jendela yang ditentukan (atau lebih kecil, jika bit data terakhir lebih kecil dari ukuran jendela). Misalnya, jika total 101.000 baris diharapkan dan ukuran jendela diatur ke 10.000, visual akan mendapatkan 10 pembaruan dengan ukuran tampilan data 10.000 dan satu pembaruan dengan tampilan data berukuran 1.000.

Mode pembaruan inkremental dipilih dengan memanggil fetchMoreData dengan aggregateSegments = false.

Anda dapat menentukan apakah data ada dengan memeriksa keberadaan dataView.metadata.segment:

    public update(options: VisualUpdateOptions) {
        const dataView = options.dataViews[0];
        console.log(dataView.metadata.segment);
        // output: __proto__: Object
    }

Anda juga dapat memeriksa apakah pembaruan adalah pembaruan pertama atau pembaruan berikutnya dengan memeriksa options.operationKind. Dalam kode berikut, VisualDataChangeOperationKind.Create mengacu pada segmen pertama, dan VisualDataChangeOperationKind.Segment mengacu pada segmen berikutnya.

// CV update implementation
public update(options: VisualUpdateOptions) {
    // indicates this is the first segment of new data.
    if (options.operationKind == VisualDataChangeOperationKind.Create) {

    }

    // on second or subsequent segments:
    if (options.operationKind == VisualDataChangeOperationKind.Segment) {
        
    }

    // skip overlapping rows 
    const rowOffset = (dataView.table['lastMergeIndex'] === undefined) ? 0 : dataView.table['lastMergeIndex'] + 1;

    // Process incoming data
    for (var i = rowOffset; i < dataView.table.rows.length; i++) {
        var val = <number>(dataView.table.rows[i][0]); // Pick first column               
            
     }
     
    // complete update implementation
}

Anda juga dapat memanggil fetchMoreData metode dari penanganan aktivitas UI:

btn_click(){
{
    // check if more data is expected for the current data view
    if (dataView.metadata.segment) {
        // request for more data if available; as a response, Power BI will call update method
        let request_accepted: bool = this.host.fetchMoreData(false);
        // handle rejection
        if (!request_accepted) {
            // for example, when the 100 MB limit has been reached
        }
    }
}

Sebagai respons untuk memanggil metode this.host.fetchMoreData, Power BI memanggil metode update visual dengan segmen data baru.

Catatan

Meskipun data dalam berbagai pembaruan tampilan data sebagian besar eksklusif, ada beberapa tumpang tindih antara tampilan data berturut-turut.

Untuk pemetaan data tabel dan kategoris, baris tampilan data pertama N dapat diharapkan berisi data yang disalin dari tampilan data sebelumnya.

N dapat ditentukan oleh: (dataView.table['lastMergeIndex'] === undefined) ? 0 : dataView.table['lastMergeIndex'] + 1

Visual menjaga tampilan data tetap diteruskan ke dalamnya sehingga dapat mengakses data tanpa komunikasi tambahan dengan Power BI.

Pengurangan data yang disesuaikan

Karena pengembang tidak selalu dapat mengetahui terlebih dahulu jenis data apa yang akan ditampilkan visual, mereka mungkin ingin mengizinkan penulis laporan untuk mengatur ukuran potongan data secara dinamis. Dari API versi 5.2, Anda dapat mengizinkan penulis laporan untuk mengatur ukuran potongan data yang diambil setiap kali.

Untuk mengizinkan penulis laporan mengatur hitungan, pertama-tama tentukan objek panel properti yang dipanggil dataReductionCustomization dalam file capabilities.json Anda:

    "objects": {
        "dataReductionCustomization": {
            "displayName": "Data Reduction",
            "properties": {
                "rowCount": {
                    "type": {
                        "numeric": true
                    },
                    "displayName": "Row Reduction",
                    "description": "Show Reduction for all row groups",
                    "suppressFormatPainterCopy": true
                },
                "columnCount": {
                    "type": {
                        "numeric": true
                    },
                    "displayName": "Column Reduction",
                    "description": "Show Reduction for all column groups",
                    "suppressFormatPainterCopy": true
                }
            }
        }
    },

Kemudian, setelah dataViewMappings, tentukan nilai default untuk dataReductionCustomization.

   "dataReductionCustomization": {
        "matrix": {
            "rowCount": {
                "propertyIdentifier": {
                    "objectName": "dataReductionCustomization",
                    "propertyName": "rowCount"
                },
                "defaultValue": "100"
            },
            "columnCount": {
                "propertyIdentifier": {
                    "objectName": "dataReductionCustomization",
                    "propertyName": "columnCount"
                },
                "defaultValue": "10"
            }
        }
    }

Informasi pengurangan data muncul di bawah visual di panel format.

Cuplikan layar pan format dengan opsi untuk mengatur jumlah pengurangan data.

Pertimbangan dan batasan

  • Ukuran jendela dibatasi hingga kisaran 2-30.000.

  • Jumlah baris total tampilan data dibatasi hingga 1.048.576 baris.

  • Ukuran memori tampilan data dibatasi hingga 100 MB Dalam mode agregasi segmen.