Captura de más datos desde Power BI

La API fetchMoreData le permite cargar fragmentos de datos de diferentes tamaños como una manera de permitir que los objetos visuales de Power BI omitan el límite máximo de una vista de datos de 30 000 filas. Además del enfoque original de agregar todos los fragmentos solicitados, ahora la API también admite cargar fragmentos de datos de forma incremental.

Puede configurar el número de filas que se van a capturar a la vez de antemano, o bien puede usar dataReductionCustomization para permitir que el autor del informe establezca el tamaño del fragmento dinámicamente.

Nota:

La API fetchMoreData está disponible en la versión 3.4 y posteriores.

La API dinámica dataReductionCustomization está disponible en la versión 5.2 y posteriores.

Para averiguar qué versión usa, compruebe apiVersion en el archivo pbiviz.json.

Habilitación de una captura segmentada de modelos semánticos de gran tamaño

Defina un tamaño de ventana para dataReductionAlgorithm en el archivo capabilities.json del objeto visual para el elemento dataViewMapping necesario. El elemento count determina el tamaño de la ventana, que limita el número de filas de datos nuevas que se pueden anexar a dataview en cada actualización.

Por ejemplo, agregue el código siguiente en el archivo capabilities.json para anexar 100 filas de datos a la vez:

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

Los segmentos nuevos se anexan al objeto dataview existente y se proporcionan al objeto visual como una llamada a update.

Uso de fetchMoreData en el objeto visual de Power BI

En Power BI, hay dos maneras de usar fetchMoreData:

  • modo de agregación de segmentos
  • modo de actualizaciones incrementales

Modo de agregación de segmentos (valor predeterminado)

Con el modo de agregación de segmentos, la vista de datos que se proporciona al objeto visual contiene los datos acumulados de todos los elementos fetchMoreData requests anteriores. Por lo tanto, el tamaño de la vista de datos crece con cada actualización según el tamaño de la ventana. Por ejemplo, si se espera un total de 100 000 filas y el tamaño de la ventana se establece en 10 000, la primera vista de datos de actualización debe incluir 10 000 filas, la segunda debe incluir 20 000, etc.

Seleccione el modo de agregación de segmentos mediante una llamada a fetchMoreData con aggregateSegments = true.

Puede determinar si los datos existen comprobando si dataView.metadata.segment existe:

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

También puede ver si la actualización es la primera actualización o una posterior comprobando options.operationKind. En el código siguiente, VisualDataChangeOperationKind.Create hace referencia al primer segmento, y VisualDataChangeOperationKind.Append, a los siguientes.

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

También puede invocar el método fetchMoreData desde un controlador de eventos de la interfaz de usuario:

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

Como respuesta a la llamada al método this.host.fetchMoreData, Power BI llama al método update del objeto visual con un nuevo segmento de datos.

Nota

Para evitar restricciones de memoria del cliente, Power BI limita el total de datos recuperados a 100 MB. Cuando se alcanza este límite, fetchMoreData() devuelve false.

Modo de actualizaciones incrementales

Con el modo de actualizaciones incrementales, la vista de datos que se proporciona al objeto visual contiene solo el siguiente conjunto de datos incrementales. El tamaño de la vista de datos es igual al tamaño de ventana definido (o menor, si el último fragmento de datos es menor que el tamaño de la ventana). Por ejemplo, si se espera un total de 101 000 filas y el tamaño de la ventana se establece en 10 000, el objeto visual obtendría 10 actualizaciones con un tamaño de la vista de datos de 10 000 y una actualización con un tamaño de la vista de datos de 1000.

El modo de actualizaciones incrementales se selecciona mediante una llamada a fetchMoreData con aggregateSegments = false.

Puede determinar si los datos existen comprobando si dataView.metadata.segment existe:

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

También puede comprobar si la actualización es la primera actualización o una posterior comprobando options.operationKind. En el código siguiente, VisualDataChangeOperationKind.Create hace referencia al primer segmento y VisualDataChangeOperationKind.Segment hace referencia a los segmentos siguientes.

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

También puede invocar el método fetchMoreData desde un controlador de eventos de la interfaz de usuario:

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

Como respuesta a la llamada al método this.host.fetchMoreData, Power BI llama al método update del objeto visual con un nuevo segmento de datos.

Nota

Aunque los datos de las diferentes actualizaciones de las vistas de datos son principalmente exclusivos, hay cierta superposición entre vistas de datos consecutivas.

En el caso de la asignación de datos de tabla y categorías, se puede esperar que las primeras N filas de la vista de datos contengan datos copiados de la vista de datos anterior.

N se puede determinar mediante: (dataView.table['lastMergeIndex'] === undefined) ? 0 : dataView.table['lastMergeIndex'] + 1

El objeto visual mantiene la vista de datos que se le pasa para que pueda acceder a los datos sin comunicaciones adicionales con Power BI.

Reducción de datos personalizada

Dado que el desarrollador no siempre puede saber de antemano qué tipo de datos se usará para mostrar el objeto visual, es posible que quiera permitir que el autor del informe establezca el tamaño del fragmento de datos dinámicamente. Desde la versión 5.2 de la API, puede permitir que el autor del informe establezca el tamaño de los fragmentos de datos que se capturan cada vez.

Para permitir que el autor del informe establezca el recuento, defina primero un objeto de panel de propiedades llamado dataReductionCustomization en el archivo 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
                }
            }
        }
    },

A continuación, después del elemento dataViewMappings, defina los valores predeterminados para dataReductionCustomization.

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

La información de reducción de datos aparecerá en el objeto visual en el panel de formato.

Screenshot of the format pan with option to set data reduction count.

Consideraciones y limitaciones

  • El tamaño de la ventana está limitado a un intervalo de 2 a 30 000.

  • El número total de filas de la vista de datos está limitado a 1 048 576.

  • En el modo de agregación de segmentos, el tamaño de memoria de la vista de datos está limitado a 100 MB.

Pasos siguientes