Compartilhar via


Entender o mapeamento de exibição de dados em visuais do Power BI

Este artigo discute o mapeamento de exibição de dados e descreve como as funções de dados são usadas para criar diferentes tipos de visuais. Ele explica como especificar requisitos condicionais para funções de dados e os diferentes tipos de dataMappings.

Cada mapeamento válido produz uma exibição de dados. Você pode fornecer vários mapeamentos de dados sob determinadas condições. As opções de pesquisa compatíveis são:

"dataViewMappings": [
    {
        "conditions": [ ... ],
        "categorical": { ... },
        "single": { ... },
        "table": { ... },
        "matrix": { ... }
    }
]

O Power BI criará um mapeamento para uma exibição de dados se o mapeamento válido também estiver definido em dataViewMappings.

Em outras palavras, categorical pode ser definido em dataViewMappings, mas outros mapeamentos, como table ou single, podem não ser. Nesse caso, o Power BI produz uma exibição de dados com um só mapeamento categorical, enquanto table e outros mapeamentos permanecem indefinidos. Por exemplo:

"dataViewMappings": [
    {
    "categorical": {
        "categories": [ ... ],
        "values": [ ... ]
    },
    "metadata": { ... }
    }
]

Condições

A seção conditions estabelece regras para um mapeamento de dados específico. Se os dados corresponderem a um dos conjuntos de condições descritos, o visual aceitará os dados como válidos.

Para cada campo, você pode especificar um valor mínimo e um máximo. O valor representa o número de campos que podem ser associados a essa função de dados.

Observação

Se uma função de dados for omitida na condição, ela poderá ter qualquer número de campos.

No exemplo a seguir, você o categoryé limitado a um campo de dados e measure a dois campos de dados.

"conditions": [
    { "category": { "max": 1 }, "measure": { "max": 2 } },
]

Você também pode definir várias condições para uma função de dados. Nesse caso, os dados serão válidos se qualquer uma das condições for atendida.

"conditions": [
    { "category": { "min": 1, "max": 1 }, "measure": { "min": 2, "max": 2 } },
    { "category": { "min": 2, "max": 2 }, "measure": { "min": 1, "max": 1 } }
]

No exemplo anterior, uma das duas seguintes condições é necessária:

  • Exatamente um campo de categoria e exatamente duas medidas
  • Exatamente duas categorias e exatamente uma medida

Mapeamento de dados único

O mapeamento de dados único é a forma mais simples de mapeamento de dados. Ele aceita apenas um campo de medida e fornece o total. Se o campo for numérico, ele retornará a soma. Caso contrário, ele retornará uma contagem de valores exclusivos.

Para usar o mapeamento de dados único, defina o nome da função de dados que você deseja mapear. Esse mapeamento funciona apenas com um único campo de medida. Se um segundo campo for atribuído, nenhuma exibição de dados será gerada, portanto, é uma boa prática incluir uma condição que limite os dados a um único campo.

Observação

Esse mapeamento de dados não pode ser usado junto com nenhum outro mapeamento de dados. Ele se destina a reduzir os dados a apenas um valor numérico.

Por exemplo:

{
    "dataRoles": [
        {
            "displayName": "Y",
            "name": "Y",
            "kind": "Measure"
        }
    ],
    "dataViewMappings": [
        {
            "conditions": [
                {
                    "Y": {
                        "max": 1
                    }
                }
            ],
            "single": {
                "role": "Y"
            }
        }
    ]
}

A exibição de dados resultante ainda contém os outros tipos de mapeamento, como de tabela ou categórico, mas cada mapeamento contém apenas o valor único. A prática recomendada é acessar o valor somente no mapeamento de formato único.

{
    "dataView": [
        {
            "metadata": null,
            "categorical": null,
            "matrix": null,
            "table": null,
            "tree": null,
            "single": {
                "value": 94163140.3560001
            }
        }
    ]
}

O exemplo de código a seguir processa o mapeamento de exibições de dados simples:

"use strict";
import powerbi from "powerbi-visuals-api";
import DataView = powerbi.DataView;
import DataViewSingle = powerbi.DataViewSingle;
// standard imports
// ...

export class Visual implements IVisual {
    private target: HTMLElement;
    private host: IVisualHost;
    private valueText: HTMLParagraphElement;

    constructor(options: VisualConstructorOptions) {
        // constructor body
        this.target = options.element;
        this.host = options.host;
        this.valueText = document.createElement("p");
        this.target.appendChild(this.valueText);
        // ...
    }

    public update(options: VisualUpdateOptions) {
        const dataView: DataView = options.dataViews[0];
        const singleDataView: DataViewSingle = dataView.single;

        if (!singleDataView ||
            !singleDataView.value ) {
            return
        }

        this.valueText.innerText = singleDataView.value.toString();
    }
}

O exemplo de código anterior resulta na exibição de apenas um valor do Power BI:

Captura de tela de um único visual de mapeamento de exibição de dados.

Mapeamento de dados categóricos

O mapeamento de dados categóricos é usado para obter agrupamentos independentes também chamados de categorias de dados. As categorias também podem ser agrupadas usando “group by” no mapeamento de dados.

Mapeamento de dados categórico básico

Considere as seguintes funções de dados e mapeamentos:

"dataRoles":[
    {
        "displayName": "Category",
        "name": "category",
        "kind": "Grouping"
    },
    {
        "displayName": "Y Axis",
        "name": "measure",
        "kind": "Measure"
    }
],
"dataViewMappings": {
    "categorical": {
        "categories": {
            "for": { "in": "category" }
        },
        "values": {
            "select": [
                { "bind": { "to": "measure" } }
            ]
        }
    }
}

O exemplo anterior diz: "Mapear minha função de dados category para que cada campo que eu arrasto para category seja mapeado para categorical.categories. Mapear também a minha função de dados measure para categorical.values".

  • for...in: Inclui todos os itens nessa função de dados, na consulta de dados.
  • bind...to: Produz o mesmo resultado que for...in, mas espera que a função de dados tenha uma condição que a restrinja a apenas um campo.

Agrupar dados categóricos

O exemplo a seguir usa as mesmas duas funções de dados do exemplo anterior, além de mais duas funções de dados chamadas grouping e measure2.

"dataRoles":[
    {
        "displayName": "Category",
        "name": "category",
        "kind": "Grouping"
    },
    {
        "displayName": "Y Axis",
        "name": "measure",
        "kind": "Measure"
    },
    {
        "displayName": "Grouping with",
        "name": "grouping",
        "kind": "Grouping"
    },
    {
        "displayName": "X Axis",
        "name": "measure2",
        "kind": "Grouping"
    }
],
"dataViewMappings": [
    {
        "categorical": {
            "categories": {
                "for": {
                    "in": "category"
                }
            },
            "values": {
                "group": {
                    "by": "grouping",
                    "select": [{
                            "bind": {
                                "to": "measure"
                            }
                        },
                        {
                            "bind": {
                                "to": "measure2"
                            }
                        }
                    ]
                }
            }
        }
    }
]

A diferença entre esse mapeamento e o mapeamento básico está em como mapeamos categorical.values. Quando você mapeia as funções de dadosmeasure e measure2 para a função de dados grouping, o eixo x e o eixo y podem ser dimensionados adequadamente.

Consultar dados hierárquicos

No próximo exemplo, os dados categóricos são usados para criar uma hierarquia, que pode ser usada para dar suporte a ações de drill down.

O exemplo a seguir mostra as funções de dados e os mapeamentos:

"dataRoles": [
    {
        "displayName": "Categories",
        "name": "category",
        "kind": "Grouping"
    },
    {
        "displayName": "Measures",
        "name": "measure",
        "kind": "Measure"
    },
    {
        "displayName": "Series",
        "name": "series",
        "kind": "Measure"
    }
],
"dataViewMappings": [
    {
        "categorical": {
            "categories": {
                "for": {
                    "in": "category"
                }
            },
            "values": {
                "group": {
                    "by": "series",
                    "select": [{
                            "for": {
                                "in": "measure"
                            }
                        }
                    ]
                }
            }
        }
    }
]

Considere os seguintes dados categóricos:

País/Região 2013 2014 2015 2016
EUA x x 650 350
Canada x 630 490 x
México 645 x x x
Reino Unido x x 831 x

O Power BI produz uma exibição de dados categóricos com o conjunto de categorias a seguir.

{
    "categorical": {
        "categories": [
            {
                "source": {...},
                "values": [
                    "Canada",
                    "USA",
                    "UK",
                    "Mexico"
                ],
                "identity": [...],
                "identityFields": [...],
            }
        ]
    }
}

Cada category é mapeado para um conjunto de values. Cada um desses values é agrupado por series, que é expresso como anos.

Por exemplo, cada matriz values representa um ano. Além disso, cada matriz values tem quatro valores: Canada, USA, UK e Mexico.

{
    "values": [
        // Values for year 2013
        {
            "source": {...},
            "values": [
                null, // Value for `Canada` category
                null, // Value for `USA` category
                null, // Value for `UK` category
                645 // Value for `Mexico` category
            ],
            "identity": [...],
        },
        // Values for year 2014
        {
            "source": {...},
            "values": [
                630, // Value for `Canada` category
                null, // Value for `USA` category
                null, // Value for `UK` category
                null // Value for `Mexico` category
            ],
            "identity": [...],
        },
        // Values for year 2015
        {
            "source": {...},
            "values": [
                490, // Value for `Canada` category
                650, // Value for `USA` category
                831, // Value for `UK` category
                null // Value for `Mexico` category
            ],
            "identity": [...],
        },
        // Values for year 2016
        {
            "source": {...},
            "values": [
                null, // Value for `Canada` category
                350, // Value for `USA` category
                null, // Value for `UK` category
                null // Value for `Mexico` category
            ],
            "identity": [...],
        }
    ]
}

O exemplo de código a seguir é para processar o mapeamento categórico de exibição de dados. Este exemplo cria a estrutura hierárquica Valor > Ano >País/Região.

"use strict";
import powerbi from "powerbi-visuals-api";
import DataView = powerbi.DataView;
import DataViewCategorical = powerbi.DataViewCategorical;
import DataViewValueColumnGroup = powerbi.DataViewValueColumnGroup;
import PrimitiveValue = powerbi.PrimitiveValue;
// standard imports
// ...

export class Visual implements IVisual {
    private target: HTMLElement;
    private host: IVisualHost;
    private categories: HTMLElement;

    constructor(options: VisualConstructorOptions) {
        // constructor body
        this.target = options.element;
        this.host = options.host;
        this.categories = document.createElement("pre");
        this.target.appendChild(this.categories);
        // ...
    }

    public update(options: VisualUpdateOptions) {
        const dataView: DataView = options.dataViews[0];
        const categoricalDataView: DataViewCategorical = dataView.categorical;

        if (!categoricalDataView ||
            !categoricalDataView.categories ||
            !categoricalDataView.categories[0] ||
            !categoricalDataView.values) {
            return;
        }

        // Categories have only one column in data buckets
        // To support several columns of categories data bucket, iterate categoricalDataView.categories array.
        const categoryFieldIndex = 0;
        // Measure has only one column in data buckets.
        // To support several columns on data bucket, iterate years.values array in map function
        const measureFieldIndex = 0;
        let categories: PrimitiveValue[] = categoricalDataView.categories[categoryFieldIndex].values;
        let values: DataViewValueColumnGroup[] = categoricalDataView.values.grouped();

        let data = {};
        // iterate categories/countries-regions
        categories.map((category: PrimitiveValue, categoryIndex: number) => {
            data[category.toString()] = {};
            // iterate series/years
            values.map((years: DataViewValueColumnGroup) => {
                if (!data[category.toString()][years.name] && years.values[measureFieldIndex].values[categoryIndex]) {
                    data[category.toString()][years.name] = []
                }
                if (years.values[0].values[categoryIndex]) {
                    data[category.toString()][years.name].push(years.values[measureFieldIndex].values[categoryIndex]);
                }
            });
        });

        this.categories.innerText = JSON.stringify(data, null, 6);
        console.log(data);
    }
}

Este é o visual resultante:

 Captura de tela de um visual com mapeamento categórico de exibição de dados.

Tabelas de mapeamento

A exibição de dados da tabela é essencialmente uma lista de pontos de dados, em que os pontos de dados numéricos podem ser agregados.

Por exemplo, use os mesmos dados da seção anterior, mas com as seguintes funcionalidades:

"dataRoles": [
    {
        "displayName": "Column",
        "name": "column",
        "kind": "Grouping"
    },
    {
        "displayName": "Value",
        "name": "value",
        "kind": "Measure"
    }
],
"dataViewMappings": [
    {
        "table": {
            "rows": {
                "select": [
                    {
                        "for": {
                            "in": "column"
                        }
                    },
                    {
                        "for": {
                            "in": "value"
                        }
                    }
                ]
            }
        }
    }
]

Visualize a exibição de dados da tabela como nesse exemplo:

País/Região Year Sales
EUA 2016 100
EUA 2015 50
Canada 2015 200
Canada 2015 50
México 2013 300
Reino Unido 2014 150
EUA 2015 75

Associação de dados:

Captura de tela das associações de dados de mapeamento da exibição de dados da tabela.

O Power BI exibe os dados como a exibição de dados da tabela. Não presuma que os dados sejam ordenados.

{
    "table" : {
        "columns": [...],
        "rows": [
            [
                "Canada",
                2014,
                630
            ],
            [
                "Canada",
                2015,
                490
            ],
            [
                "Mexico",
                2013,
                645
            ],
            [
                "UK",
                2014,
                831
            ],
            [
                "USA",
                2015,
                650
            ],
            [
                "USA",
                2016,
                350
            ]
        ]
    }
}

Para agregar os dados, selecione o campo desejado e, em seguida, selecione Soma.

Captura de tela da opção Soma selecionada na lista suspensa do campo.

Exemplo de código para processar o mapeamento de exibição de dados de tabela.

"use strict";
import "./../style/visual.less";
import powerbi from "powerbi-visuals-api";
// ...
import DataViewMetadataColumn = powerbi.DataViewMetadataColumn;
import DataViewTable = powerbi.DataViewTable;
import DataViewTableRow = powerbi.DataViewTableRow;
import PrimitiveValue = powerbi.PrimitiveValue;
// standard imports
// ...

export class Visual implements IVisual {
    private target: HTMLElement;
    private host: IVisualHost;
    private table: HTMLParagraphElement;

    constructor(options: VisualConstructorOptions) {
        // constructor body
        this.target = options.element;
        this.host = options.host;
        this.table = document.createElement("table");
        this.target.appendChild(this.table);
        // ...
    }

    public update(options: VisualUpdateOptions) {
        const dataView: DataView = options.dataViews[0];
        const tableDataView: DataViewTable = dataView.table;

        if (!tableDataView) {
            return
        }
        while(this.table.firstChild) {
            this.table.removeChild(this.table.firstChild);
        }

        //draw header
        const tableHeader = document.createElement("th");
        tableDataView.columns.forEach((column: DataViewMetadataColumn) => {
            const tableHeaderColumn = document.createElement("td");
            tableHeaderColumn.innerText = column.displayName
            tableHeader.appendChild(tableHeaderColumn);
        });
        this.table.appendChild(tableHeader);

        //draw rows
        tableDataView.rows.forEach((row: DataViewTableRow) => {
            const tableRow = document.createElement("tr");
            row.forEach((columnValue: PrimitiveValue) => {
                const cell = document.createElement("td");
                cell.innerText = columnValue.toString();
                tableRow.appendChild(cell);
            })
            this.table.appendChild(tableRow);
        });
    }
}

O arquivo de estilos visuais style/visual.less contém o layout da tabela:

table {
    display: flex;
    flex-direction: column;
}

tr, th {
    display: flex;
    flex: 1;
}

td {
    flex: 1;
    border: 1px solid black;
}

O visual resultante tem esta aparência:

Captura de tela de um visual com mapeamento de exibição de dados de tabela.

Mapeamento de dados de matriz

O mapeamento de dados de matriz é semelhante ao mapeamento de dados de tabela, mas as linhas são apresentadas hierarquicamente. Qualquer um dos valores de função de dados pode ser usado como um valor de cabeçalho de coluna.

{
    "dataRoles": [
        {
            "name": "Category",
            "displayName": "Category",
            "displayNameKey": "Visual_Category",
            "kind": "Grouping"
        },
        {
            "name": "Column",
            "displayName": "Column",
            "displayNameKey": "Visual_Column",
            "kind": "Grouping"
        },
        {
            "name": "Measure",
            "displayName": "Measure",
            "displayNameKey": "Visual_Values",
            "kind": "Measure"
        }
    ],
    "dataViewMappings": [
        {
            "matrix": {
                "rows": {
                    "for": {
                        "in": "Category"
                    }
                },
                "columns": {
                    "for": {
                        "in": "Column"
                    }
                },
                "values": {
                    "select": [
                        {
                            "for": {
                                "in": "Measure"
                            }
                        }
                    ]
                }
            }
        }
    ]
}

Estrutura hierárquica de dados de matriz

O Power BI cria uma estrutura de dados hierárquica. A raiz da hierarquia de árvore inclui os dados da coluna Pais da função de dados Category, com filhos da coluna Filhos da tabela de função de dados.

Modelo semântico:

Pais Children Netos Colunas Valores
Pai1 Filho1 Neto1 Col1 5
Pai1 Filho1 Neto1 Col2 6
Pai1 Filho1 Neto2 Col1 7
Pai1 Filho1 Neto2 Col2 8
Pai1 Filho2 Neto3 Col1 5
Pai1 Filho2 Neto3 Col2 3
Pai1 Filho2 Neto4 Col1 4
Pai1 Filho2 Neto4 Col2 9
Pai1 Filho2 Neto5 Col1 3
Pai1 Filho2 Neto5 Col2 5
Pai2 Filho3 Neto6 Col1 1
Pai2 Filho3 Neto6 Col2 2
Pai2 Filho3 Neto7 Col1 7
Pai2 Filho3 Neto7 Col2 1
Pai2 Filho3 Neto8 Col1 10
Pai2 Filho3 Neto8 Col2 13

O visual de matriz principal do Power BI renderiza os dados como uma tabela.

Captura de tela de um visual de Matriz renderizado como uma tabela.

O visual obtém sua estrutura de dados conforme descrito no código a seguir (somente as duas primeiras linhas da tabela são mostradas aqui):

{
    "metadata": {...},
    "matrix": {
        "rows": {
            "levels": [...],
            "root": {
                "childIdentityFields": [...],
                "children": [
                    {
                        "level": 0,
                        "levelValues": [...],
                        "value": "Parent1",
                        "identity": {...},
                        "childIdentityFields": [...],
                        "children": [
                            {
                                "level": 1,
                                "levelValues": [...],
                                "value": "Child1",
                                "identity": {...},
                                "childIdentityFields": [...],
                                "children": [
                                    {
                                        "level": 2,
                                        "levelValues": [...],
                                        "value": "Grand child1",
                                        "identity": {...},
                                        "values": {
                                            "0": {
                                                "value": 5 // value for Col1
                                            },
                                            "1": {
                                                "value": 6 // value for Col2
                                            }
                                        }
                                    },
                                    ...
                                ]
                            },
                            ...
                        ]
                    },
                    ...
                ]
            }
        },
        "columns": {
            "levels": [...],
            "root": {
                "childIdentityFields": [...],
                "children": [
                    {
                        "level": 0,
                        "levelValues": [...],
                        "value": "Col1",
                        "identity": {...}
                    },
                    {
                        "level": 0,
                        "levelValues": [...],
                        "value": "Col2",
                        "identity": {...}
                    },
                    ...
                ]
            }
        },
        "valueSources": [...]
    }
}

Expandir e recolher cabeçalhos de linha

Para a API 4.1.0 ou posterior, os dados de matriz dão suporte à expansão e recolhimento de cabeçalhos de linha. Na API 4.2, você pode expandir/recolher todo o nível programaticamente. O recurso expandir/recolher otimiza a busca de dados para o dataView, permitindo que o usuário expanda ou recolha uma linha sem buscar todos os dados para o próximo nível. Ele só busca os dados para a linha selecionada. O estado de expansão do cabeçalho de linha permanece consistente entre indicadores e até mesmo em relatórios salvos. Ele não é específico para cada visual.

Os comandos expandir e recolher podem ser adicionados ao menu de contexto fornecendo o parâmetro dataRoles ao método showContextMenu.

Captura de tela mostrando o menu de contexto com as opções de expandir e recolher.

Para expandir um grande número de pontos de dados, use a API de buscar mais dados com a API de expansão/recolhimento.

Recursos de API

Os seguintes elementos foram adicionados à versão 4.1.0 da API para habilitar a expansão e o recolhimento de cabeçalhos de linha:

  • O sinalizador isCollapsed no DataViewTreeNode:

    interface DataViewTreeNode {
        //...
        /**
        * TRUE if the node is Collapsed
        * FALSE if it is Expanded
        * Undefined if it cannot be Expanded (e.g. subtotal)
        */
        isCollapsed?: boolean;
    }
    
  • O método toggleExpandCollapse na interface ISelectionManger:

    interface ISelectionManager {
        //...
        showContextMenu(selectionId: ISelectionId, position: IPoint, dataRoles?: string): IPromise<{}>; // dataRoles is the name of the role of the selected data point
        toggleExpandCollapse(selectionId: ISelectionId, entireLevel?: boolean): IPromise<{}>;  // Expand/Collapse an entire level will be available from API 4.2.0 
        //...
    }
    
  • O sinalizador canBeExpanded no DataViewHierarchyLevel:

    interface DataViewHierarchyLevel {
        //...
        /** If TRUE, this level can be expanded/collapsed */
        canBeExpanded?: boolean;
    }
    

Requisitos visuais

Para habilitar o recurso de expandir e recolher para um visual usando a exibição de dados de matriz:

  1. Adicione o seguinte código ao arquivo capabilities.json:

       "expandCollapse": {
        "roles": ["Rows"], //”Rows” is the name of rows data role
        "addDataViewFlags": {
            "defaultValue": true //indicates if the DataViewTreeNode will get the isCollapsed flag by default 
        }
    },
    
  2. Confirme se as funções são detalhadas:

        "drilldown": {
        "roles": ["Rows"]
    },
    
  3. Para cada nó, crie uma instância do construtor de seleção e chame o método withMatrixNode no nível de hierarquia do nó selecionado e crie um selectionId. Por exemplo:

        let nodeSelectionBuilder: ISelectionIdBuilder = visualHost.createSelectionIdBuilder();
        // parantNodes is a list of the parents of the selected node.
        // node is the current node which the selectionId is created for. 
        parentNodes.push(node);
        for (let i = 0; i < parentNodes.length; i++) {
            nodeSelectionBuilder = nodeSelectionBuilder.withMatrixNode(parentNodes[i], levels);
        }
      const nodeSelectionId: ISelectionId = nodeSelectionBuilder.createSelectionId(); 
    
  4. Crie uma instância do gerenciador de seleção e use o método selectionManager.toggleExpandCollapse() com o parâmetro do selectionId que você criou para o nó selecionado. Por exemplo:

        // handle click events to apply expand\collapse action for the selected node
        button.addEventListener("click", () => {
        this.selectionManager.toggleExpandCollapse(nodeSelectionId);
    });
    

Observação

  • Se o nó selecionado não for um nó de linha, o PowerBI ignorará as chamadas de expansão e recolhimento e os comandos expandir e recolher serão removidos do menu de contexto.
  • O parâmetro dataRoles será necessário para o método showContextMenu somente se o visual der suporte aos recursos drilldown ou expandCollapse. Se o visual der suporte a esses recursos, mas dataRoles não tiver sido fornecido, um erro será gerado para o console ao usar o visual do desenvolvedor ou ao depurar um visual público com o modo de depuração habilitado.

Considerações e limitações

  • Depois de expandir um nó, novos limites de dados serão aplicados ao DataView. O novo DataView pode não incluir alguns dos nós apresentados no DataView anterior.
  • Ao usar a expansão ou recolhimento, os totais serão adicionados mesmo que o visual não os tenha solicitado.
  • Não há suporte para a expansão e o recolhimento de colunas.

Manter todas as colunas de metadados

Para a API 5.1.0 ou posterior, há suporte para manter todas as colunas de metadados. Esse recurso permite que o visual receba os metadados de todas as colunas, independentemente de suas projeções ativas.

Adicione as seguintes linhas ao arquivo capabilities.json:

"keepAllMetadataColumns": {
    "type": "boolean",
    "description": "Indicates that visual is going to receive all metadata columns, no matter what the active projections are"
}

Definir essa propriedade como true resultará no recebimento de todos os metadados, incluindo de colunas recolhidas. Definir como false ou deixar indefinido resultará no recebimento de metadados somente em colunas com projeções ativas (por exemplo, expandidas).

Algoritmo de redução de dados

O algoritmo de redução de dados controla quais dados e quantos dados são recebidos na exibição de dados.

O count é definido como o número máximo de valores que a exibição de dados pode aceitar. Se houver mais de valores de count, o algoritmo de redução de dados determinará quais valores devem ser recebidos.

Tipos de algoritmo de redução de dados

Há quatro tipos de configurações de algoritmo de redução de dados:

  • top: os primeiros valores de count são obtidos do modelo semântico.
  • bottom: os últimos valores de count são obtidos do modelo semântico.
  • sample: o primeiro e o último itens estão incluídos e há um número de itens equivalente a count entre eles, com intervalos iguais. Por exemplo, se você tiver um modelo semântico [0, 1, 2, ... 100] e um count de 9, receberá os valores [0, 10, 20... 100].
  • window: carrega uma janela de pontos de dados de cada vez contendo elementos count. Atualmente, top e window são equivalentes. No futuro, uma configuração de janela terá suporte total.

Por padrão, todos os visuais do Power BI têm o algoritmo de redução de dados principal aplicado com count definida como 1000 pontos de dados. Esse padrão é equivalente a definir as seguintes propriedades no arquivo capabilities.json:

"dataReductionAlgorithm": {
    "top": {
        "count": 1000
    }
}

Você pode modificar o valor de count para qualquer valor inteiro até 30.000. Os visuais do Power BI baseados em R podem dar suporte a até 150000 linhas.

Uso de algoritmo de redução de dados

O algoritmo de redução de dados pode ser usado em mapeamento categórico, de tabela ou de exibição de dados de matriz.

No mapeamento de dados categóricos, você pode adicionar o algoritmo à seção "categorias" e/ou "grupo" de values para mapeamento de dados categóricos.

"dataViewMappings": {
    "categorical": {
        "categories": {
            "for": { "in": "category" },
            "dataReductionAlgorithm": {
                "window": {
                    "count": 300
                }
            }  
        },
        "values": {
            "group": {
                "by": "series",
                "select": [{
                        "for": {
                            "in": "measure"
                        }
                    }
                ],
                "dataReductionAlgorithm": {
                    "top": {
                        "count": 100
                    }
                }  
            }
        }
    }
}

No mapeamento da exibição de dados de tabela, aplique o algoritmo de redução de dados à seção rows da tabela de mapeamento de Exibição de Dados.

"dataViewMappings": [
    {
        "table": {
            "rows": {
                "for": {
                    "in": "values"
                },
                "dataReductionAlgorithm": {
                    "top": {
                        "count": 2000
                    }
                }
            }
        }
    }
]

Você pode aplicar o algoritmo de redução de dados às seções rows e columns da matriz de mapeamento de Exibição de Dados.