Pobieranie większej ilości danych z usługi Power BI

Interfejs API fetchMoreData umożliwia ładowanie fragmentów danych o różnych rozmiarach jako sposób umożliwienia wizualizacjom usługi Power BI obejścia twardego limitu widoku danych 30 000 wierszy. Oprócz oryginalnego podejścia agregowania wszystkich żądanych fragmentów interfejs API obsługuje teraz również przyrostowe ładowanie fragmentów danych.

Możesz skonfigurować liczbę wierszy do pobrania z wyprzedzeniem lub użyć dataReductionCustomization polecenia , aby zezwolić autorowi raportu na dynamiczne ustawianie rozmiaru fragmentu.

Uwaga

Interfejs fetchMoreData API jest dostępny w wersji 3.4 lub nowszej.

Dynamiczny dataReductionCustomization interfejs API jest dostępny w wersji 5.2 lub nowszej.

Aby dowiedzieć się, której wersji używasz, sprawdź apiVersion plik pbiviz.json .

Włączanie segmentowanego pobierania dużych modeli semantycznych

Zdefiniuj rozmiar okna dla dataReductionAlgorithm w pliku capabilities.json wizualizacji dla wymaganego pliku dataViewMapping. Określa count rozmiar okna, który ogranicza liczbę nowych wierszy danych, które można dołączyć do dataview w każdej aktualizacji.

Na przykład dodaj następujący kod w pliku capabilities.json , aby dołączyć 100 wierszy danych jednocześnie:

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

Nowe segmenty są dołączane do istniejącej dataview i udostępniane wizualizacji jako wywołanie update .

Używanie funkcji fetchMoreData w wizualizacji usługi Power BI

W usłudze Power BI możesz fetchMoreData na jeden z dwóch sposobów:

  • tryb agregacji segmentów
  • tryb aktualizacji przyrostowych

Tryb agregacji segmentów (ustawienie domyślne)

W trybie agregacji segmentów widok danych udostępniany wizualizacji zawiera skumulowane dane ze wszystkich poprzednich fetchMoreData requestselementów . W związku z tym rozmiar widoku danych rośnie wraz z każdą aktualizacją zgodnie z rozmiarem okna. Jeśli na przykład oczekiwano łącznie 100 000 wierszy, a rozmiar okna to 10 000, pierwszy widok danych aktualizacji powinien zawierać 10 000 wierszy, drugi widok danych aktualizacji powinien zawierać 20 000 wierszy itd.

Wybierz tryb agregacji segmentów, wywołując polecenie za pomocą polecenia fetchMoreDataaggregateSegments = true.

Możesz określić, czy dane istnieją, sprawdzając istnienie elementu dataView.metadata.segment:

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

Możesz również sprawdzić, czy aktualizacja jest pierwszą aktualizacją, czy kolejną, sprawdzając element options.operationKind. W poniższym kodzie VisualDataChangeOperationKind.Create odwołuje się do pierwszego segmentu i VisualDataChangeOperationKind.Append odwołuje się do kolejnych segmentów.

// 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
}

Możesz również wywołać metodę fetchMoreData z programu obsługi zdarzeń interfejsu użytkownika:

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
        }
    }
}

W odpowiedzi na wywołanie this.host.fetchMoreData metody usługa Power BI wywołuje update metodę wizualizacji z nowym segmentem danych.

Uwaga

Aby uniknąć ograniczeń pamięci klienta, usługa Power BI ogranicza ilość pobranych danych do 100 MB. Po osiągnięciu fetchMoreData() tego limitu zwraca wartość false.

Tryb aktualizacji przyrostowych

W trybie aktualizacji przyrostowych widok danych udostępniany wizualizacji zawiera tylko następny zestaw danych przyrostowych. Rozmiar widoku danych jest równy zdefiniowanemu rozmiarowi okna (lub mniejszemu, jeśli ostatni bit danych jest mniejszy niż rozmiar okna). Jeśli na przykład oczekiwano łącznie 101 000 wierszy, a rozmiar okna zostanie ustawiony na 10 000, wizualizacja otrzyma 10 aktualizacji z rozmiarem widoku danych wynoszącym 10 000, a jedna aktualizacja z widokiem danych o rozmiarze 10 000.

Tryb aktualizacji przyrostowych jest wybierany przez wywołanie metody fetchMoreDataaggregateSegments = false.

Możesz określić, czy dane istnieją, sprawdzając istnienie elementu dataView.metadata.segment:

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

Możesz również sprawdzić, czy aktualizacja jest pierwszą aktualizacją, czy kolejną, sprawdzając wartość options.operationKind. W poniższym kodzie VisualDataChangeOperationKind.Create odwołuje się do pierwszego segmentu i VisualDataChangeOperationKind.Segment odwołuje się do kolejnych segmentów.

// 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
}

Możesz również wywołać metodę fetchMoreData z programu obsługi zdarzeń interfejsu użytkownika:

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
        }
    }
}

W odpowiedzi na wywołanie this.host.fetchMoreData metody usługa Power BI wywołuje update metodę wizualizacji z nowym segmentem danych.

Uwaga

Chociaż dane w różnych aktualizacjach widoków danych są w większości wyłączne, istnieje pewne nakładanie się między kolejnymi widokami danych.

W przypadku mapowania tabel i danych kategorii można oczekiwać, że pierwsze N wiersze widoku danych będą zawierać dane skopiowane z poprzedniego widoku danych.

N można określić przez: (dataView.table['lastMergeIndex'] === undefined) ? 0 : dataView.table['lastMergeIndex'] + 1

Wizualizacja przechowuje widok danych przekazywany do niego, aby mógł uzyskiwać dostęp do danych bez dodatkowej komunikacji z usługą Power BI.

Dostosowywanie redukcji danych

Ponieważ deweloper nie zawsze może wiedzieć z wyprzedzeniem, jakiego typu dane będą wyświetlane w wizualizacji, może chcieć zezwolić autorowi raportu na dynamiczne ustawianie rozmiaru fragmentu danych. Z interfejsu API w wersji 5.2 możesz zezwolić autorowi raportu na ustawianie rozmiaru fragmentów danych pobieranych za każdym razem.

Aby zezwolić autorowi raportu na ustawianie liczby, najpierw zdefiniuj obiekt okienka właściwości o nazwie dataReductionCustomization w pliku capabilities.json :

    "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
                }
            }
        }
    },

Następnie po ustawieniu zdefiniuj dataViewMappingswartości domyślne dla elementu dataReductionCustomization.

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

Informacje o redukcji danych są wyświetlane w obszarze wizualizacji w okienku formatowania.

Zrzut ekranu przedstawiający okienko formatu z opcją ustawiania liczby redukcji danych.

Rozważania i ograniczenia

  • Rozmiar okna jest ograniczony do zakresu od 2 do 30 000.

  • Łączna liczba wierszy widoku danych jest ograniczona do 1 048 576 wierszy.

  • Rozmiar pamięci widoku danych jest ograniczony do 100 MB W trybie agregacji segmentów.