Entenda o esquema em estrela e a importância para o Power BIUnderstand star schema and the importance for Power BI

Este artigo se destina a modeladores de dados do Power BI Desktop.This article targets Power BI Desktop data modelers. Descreve o design do esquema em estrela e sua relevância para desenvolver modelos de dados do Power BI otimizados para desempenho e usabilidade.It describes star schema design and its relevance to developing Power BI data models optimized for performance and usability.

Este artigo não pretende oferecer uma discussão completa sobre o design do esquema em estrela.This article isn't intended to provide a complete discussion on star schema design. Para obter mais detalhes, leia diretamente o conteúdo publicado, como The Data Warehouse Toolkit: The Definitive Guide to Dimensional Modeling (3ª edição, 2013) de Ralph Kimball et al.For more details, refer directly to published content, like The Data Warehouse Toolkit: The Definitive Guide to Dimensional Modeling (3rd edition, 2013) by Ralph Kimball et al.

Visão geral do esquema em estrelaStar schema overview

O esquema em estrela é uma abordagem de modelagem madura amplamente adotada por data warehouses relacionais.Star schema is a mature modeling approach widely adopted by relational data warehouses. Ele requer que os modeladores classifiquem suas tabelas de modelo como dimensão ou fato.It requires modelers to classify their model tables as either dimension or fact.

Tabelas de dimensões descrevem as entidades de negócios – os itens que você modela.Dimension tables describe business entities—the things you model. As entidades podem incluir produtos, pessoas, locais e conceitos, incluindo o próprio tempo.Entities can include products, people, places, and concepts including time itself. A tabela mais consistente que você encontrará em um esquema em estrela é uma tabela de dimensão de data.The most consistent table you'll find in a star schema is a date dimension table. Uma tabela de dimensões contém uma ou mais colunas de chave, que atuam como um identificador exclusivo, e colunas descritivas.A dimension table contains a key column (or columns) that acts as a unique identifier, and descriptive columns.

Tabelas de fatos armazenam observações ou eventos e podem ser ordens de vendas, saldos de ações, taxas de câmbio, temperaturas, etc. Uma tabela de fatos contém colunas chave de dimensão relacionadas a tabelas de dimensões e colunas de medidas numéricas.Fact tables store observations or events, and can be sales orders, stock balances, exchange rates, temperatures, etc. A fact table contains dimension key columns that relate to dimension tables, and numeric measure columns. As colunas de chave de dimensão determinam a dimensionalidade de uma tabela de fatos, enquanto os valores de chave de dimensão determinam a granularidade de uma tabela de fatos.The dimension key columns determine the dimensionality of a fact table, while the dimension key values determine the granularity of a fact table. Por exemplo, considere uma tabela de fatos projetada para armazenar os destinos de venda que têm duas colunas de chave de dimensão Data e ProductKey.For example, consider a fact table designed to store sale targets that has two dimension key columns Date and ProductKey. É fácil entender que a tabela tem duas dimensões.It's easy to understand that the table has two dimensions. No entanto, a granularidade não pode ser determinada sem considerar os valores de chave de dimensão.The granularity, however, can't be determined without considering the dimension key values. Neste exemplo, considere que os valores armazenados na coluna Data são o primeiro dia de cada mês.In this example, consider that the values stored in the Date column are the first day of each month. Nesse caso, a granularidade está no nível do mês-produto.In this case, the granularity is at month-product level.

Em geral, as tabelas de dimensões contêm um número relativamente pequeno de linhas.Generally, dimension tables contain a relatively small number of rows. As tabelas de fatos, por outro lado, podem conter um número muito grande de linhas e continuar crescendo ao longo do tempo.Fact tables, on the other hand, can contain a very large number of rows and continue to grow over time.

Ilustração de um esquema em estrela

Relevância de esquema em estrela para modelos do Power BIStar schema relevance to Power BI models

O design de esquema em estrela e muitos conceitos relacionados apresentados neste artigo são altamente relevantes para o desenvolvimento de modelos do Power BI otimizados para desempenho e usabilidade.Star schema design and many related concepts introduced in this article are highly relevant to developing Power BI models that are optimized for performance and usability.

Considere que cada elemento do visual de relatório do Power BI gera uma consulta que é enviada para o modelo do Power BI (que o serviço do Power BI chama de conjunto de dados).Consider that each Power BI report visual generates a query that is sent to the Power BI model (which the Power BI service calls a dataset). Essas consultas são usadas para filtrar, agrupar e resumir dados de modelo.These queries are used to filter, group, and summarize model data. Assim, um modelo bem projetado fornece tabelas para filtragem e agrupamento e tabelas para resumo.A well-designed model, then, is one that provides tables for filtering and grouping, and tables for summarizing. Esse design se ajusta bem aos princípios de esquema em estrela:This design fits well with star schema principles:

  • As tabelas de dimensões são compatíveis com filtragem e agrupamentoDimension tables support filtering and grouping
  • Tabelas de fatos são compatíveis com resumoFact tables support summarization

Não há propriedades de tabela que os modeladores definem para configurar o tipo de tabela como dimensão ou fato.There's no table property that modelers set to configure the table type as dimension or fact. Na verdade, isso é determinado pelas relações de modelo.It's in fact determined by the model relationships. Uma relação de modelo estabelece um caminho de propagação de filtro entre duas tabelas, e é a propriedade de Cardinalidade da relação que determina o tipo de tabela.A model relationship establishes a filter propagation path between two tables, and it's the Cardinality property of the relationship that determines the table type. Uma cardinalidade em uma relação comum é uma relação de um para muitos ou seu inverso, de muitos para um.A common relationship cardinality is one-to-many or its inverse many-to-one. O lado "um" é sempre uma tabela de tipo de dimensão, enquanto o lado "muitos" é sempre uma tabela de tipo de fato.The "one" side is always a dimension-type table while the "many" side is always a fact-type table. Para saber mais sobre as relações, confira Relações de modelo no Power BI Desktop.For more information about relationships, see Model relationships in Power BI Desktop.

Esquema em estrela conceitual

Um design de modelo bem estruturado deve incluir tabelas que sejam do tipo de dimensão ou do tipo de fato.A well-structured model design should include tables that are either dimension-type tables or fact-type tables. Evite misturar os dois tipos em uma única tabela.Avoid mixing the two types together for a single table. Também recomendamos que você busque fornecer o número correto de tabelas com as relações corretas em vigor.We also recommend that you should strive to deliver the right number of tables with the right relationships in place. Também é importante que as tabelas do tipo fato sempre carreguem dados em um detalhamento consistente.It's also important that fact-type tables always load data at a consistent grain.

Por fim, é importante entender que o design ideal de modelos é parte ciência e parte arte.Lastly, it's important to understand that optimal model design is part science and part art. Às vezes, você pode dividir com uma boa orientação quando isso faz sentido.Sometimes you can break with good guidance when it makes sense to do so.

Há muitos conceitos adicionais relacionados ao design de um esquema em estrela que podem ser aplicados a um modelo do Power BI.There are many additional concepts related to star schema design that can be applied to a Power BI model. Esses conceitos incluem:These concepts include:

MedidasMeasures

No design de esquema em estrela uma medida é uma coluna de tabela de fatos que armazena valores a serem resumidos.In star schema design, a measure is a fact table column that stores values to be summarized.

Em um modelo do Power BI, uma medida tem uma definição diferente, mas semelhante,.In a Power BI model, a measure has a different—but similar—definition. É uma fórmula escrita em DAX (Expressões de Análise de Dados) que realiza o resumo.It's a formula written in Data Analysis Expressions (DAX) that achieves summarization. As expressões de medida geralmente aproveitam funções de agregação DAX como SUM, MIN, MAX, AVERAGE etc. para produzir um resultado de valor escalar no momento da consulta (os valores nunca são armazenados no modelo).Measure expressions often leverage DAX aggregation functions like SUM, MIN, MAX, AVERAGE, etc. to produce a scalar value result at query time (values are never stored in the model). A expressão de medida pode variar de agregações de coluna simples a fórmulas mais sofisticadas que substituem o contexto de filtro e/ou a propagação de relação.Measure expression can range from simple column aggregations to more sophisticated formulas that override filter context and/or relationship propagation. Para obter mais informações, leia o artigo Noções básicas do DAX no Power BI Desktop.For more information, read the DAX Basics in Power BI Desktop article.

É importante entender que modelos do Power BI dão suporte a um segundo método de obtenção de resumo.It's important to understand that Power BI models support a second method for achieving summarization. Qualquer coluna — e normalmente colunas numéricas — pode ser resumida por um relatório visual ou P e R.Any column—and typically numeric columns—can be summarized by a report visual or Q&A. Essas colunas são denominadas medidas implícitas.These columns are referred to as implicit measures. Elas oferecem uma conveniência para você como desenvolvedor de modelo, já que, em muitas instâncias, você não precisa criar medidas.They offer a convenience for you as a model developer, as in many instances you do not need to create measures. Por exemplo, a coluna Valor de Vendas das vendas do revendedor da Adventure Works pode ser resumida de várias maneiras (soma, contagem, média, mediana, mín., máx. etc.), sem necessidade de criar uma medida para cada tipo de agregação possível.For example, the Adventure Works reseller sales Sales Amount column could be summarized in numerous ways (sum, count, average, median, min, max, etc.), without the need to create a measure for each possible aggregation type.

Exemplo de ícone na lista de campos

No entanto, há três motivos convincentes para você criar medidas, mesmo para resumos simples em nível de coluna:However, there are three compelling reasons for you to create measures, even for simple column-level summarizations:

  • Quando você souber que seus autores de relatório consultarão o modelo usando MDX (Expressões Multidimensionais), o modelo deverá incluir medidas explícitas.When you know your report authors will query the model by using Multidimensional Expressions (MDX), the model must include explicit measures. Medidas explícitas são definidas usando o DAX.Explicit measures are defined by using DAX. Essa abordagem de design é altamente relevante quando um conjunto de dados do Power BI é consultado usando o MDX, porque ele não pode obter o resumo dos valores de coluna.This design approach is highly relevant when a Power BI dataset is queried by using MDX, because MDX can't achieve summarization of column values. Notavelmente, o MDX será usado ao executar Analisar no Excel, pois as Tabelas Dinâmicas emitem consultas MDX.Notably, MDX will be used when performing Analyze in Excel, because PivotTables issue MDX queries.
  • Quando você souber que os autores do relatório criarão relatórios paginados do Power BI usando o designer de consulta do MDX, o modelo deverá incluir medidas explícitas.When you know your report authors will create Power BI paginated reports using the MDX query designer, the model must include explicit measures. Somente o designer de consulta MDX dá suporte a agregações de servidor.Only the MDX query designer supports server aggregates. Portanto, se os autores de relatório precisarem ter medidas avaliadas pelo Power BI (em vez de pelo mecanismo de relatório paginado), eles deverão usar o designer de consulta MDX.So, if report authors need to have measures evaluated by Power BI (instead of by the paginated report engine), they must use the MDX query designer.
  • Quando você precisar verificar se os autores de relatórios só podem resumir colunas de maneiras específicas.When you need to ensure that your report authors can only summarize columns in specific ways. Por exemplo, a coluna Preço da Unidade de vendas do revendedor (que representa uma taxa por unidade) pode ser resumida, mas somente usando funções de agregação específicas.For example, the reseller sales Unit Price column (which represents a per unit rate) can be summarized, but only by using specific aggregation functions. Ela nunca deve ser somada, mas é apropriado resumi-la usando outras funções de agregação, como mín., máx., média etc. Nessa instância, o modelador pode ocultar a coluna de Preço Unitário e criar medidas para todas as funções de agregação apropriadas.It should never be summed, but it's appropriate to summarize by using other aggregation functions like min, max, average, etc. In this instance, the modeler can hide the Unit Price column, and create measures for all appropriate aggregation functions.

Essa abordagem de design funciona bem para relatórios criados no serviço do Power BI e para P e R.This design approach works well for reports authored in the Power BI service and for Q&A. No entanto, as conexões dinâmicas do Power BI Desktop permitem que os autores de relatório mostrem campos ocultos no painel Campos, o que pode resultar em contornar essa abordagem de design.However, Power BI Desktop live connections allow report authors to show hidden fields in the Fields pane, which can result in circumventing this design approach.

Chaves alternativasSurrogate keys

Uma chave alternativa é um identificador exclusivo que você adiciona a uma tabela para dar suporte à modelagem de esquema em estrela.A surrogate key is a unique identifier that you add to a table to support star schema modeling. Por definição, não é definida nem armazenada nos dados de origem.By definition, it's not defined or stored in the source data. Normalmente, as chaves substitutas são adicionadas às tabelas de dimensões relacionais do data warehouse para fornecer um identificador exclusivo para cada linha da tabela de dimensões.Commonly, surrogate keys are added to relational data warehouse dimension tables to provide a unique identifier for each dimension table row.

As relações de modelo do Power BI baseiam-se em uma única coluna exclusiva em uma tabela, que propaga filtros para uma única coluna em uma tabela diferente.Power BI model relationships are based on a single unique column in one table, which propagates filters to a single column in a different table. Quando uma tabela de tipo de dimensão em seu modelo não inclui uma única coluna exclusiva, você deve adicionar um identificador exclusivo para se tornar o lado "um" de um relacionamento.When a dimension-type table in your model doesn't include a single unique column, you must add a unique identifier to become the "one" side of a relationship. No Power BI Desktop, você pode facilmente atender a esse requisito criando uma coluna de índice do Power Query.In Power BI Desktop, you can easily achieve this requirement by creating a Power Query index column.

Criar coluna de índice na barra de ferramentas do Power Query

Você deve mesclar essa consulta com a consulta do lado "muitos" para poder adicionar a coluna de índice a ela também.You must merge this query with the "many"-side query so that you can add the index column to it also. Ao carregar essas consultas para o modelo, você pode criar uma relação de um para muitos entre as tabelas de modelo.When you load these queries to the model, you can then create a one-to-many relationship between the model tables.

Dimensões de floco de neveSnowflake dimensions

Uma dimensão de floco de neve é um conjunto de tabelas normalizadas para uma única entidade de negócios.A snowflake dimension is a set of normalized tables for a single business entity. Por exemplo, a Adventure Works classifica produtos por categoria e subcategoria.For example, Adventure Works classifies products by category and subcategory. As categorias são atribuídas a subcategorias e os produtos, por sua vez, são atribuídos a subcategorias.Categories are assigned to subcategories, and products are in turn assigned to subcategories. No data warehouse relacional da Adventure Works, a dimensão de produto é normalizada e armazenada em três tabelas relacionadas: DimProductCategory, DimProductSubcategory e DimProduct.In the Adventure Works relational data warehouse, the product dimension is normalized and stored in three related tables: DimProductCategory, DimProductSubcategory, and DimProduct.

Se você usar sua imaginação, poderá modelar as tabelas normalizadas posicionadas para cima da tabela de fatos, formando um design de floco de neve.If you use your imagination, you can picture the normalized tables positioned outwards from the fact table, forming a snowflake design.

Exemplo de diagrama de floco de neve

No Power BI Desktop, você pode optar por similar um design de dimensão floco de neve (talvez porque seus dados de origem fazem isso) ou integrar (desnormalizar) as tabelas de origem em uma única tabela de modelo.In Power BI Desktop, you can choose to mimic a snowflake dimension design (perhaps because your source data does) or integrate (denormalize) the source tables into a single model table. Em geral, os benefícios de uma tabela de modelo única superam os benefícios de várias tabelas de modelo.Generally, the benefits of a single model table outweigh the benefits of multiple model tables. A decisão mais ideal pode depender dos volumes de dados e dos requisitos de usabilidade para o modelo.The most optimal decision can depend on the volumes of data and the usability requirements for the model.

Quando você opta por imitar um design de dimensão floco de neve:When you choose to mimic a snowflake dimension design:

  • O Power BI carrega mais tabelas, o que é menos eficiente das perspectivas de armazenamento e desempenho.Power BI loads more tables, which is less efficient from storage and performance perspectives. Essas tabelas devem incluir colunas para dar suporte a relações de modelo e isso pode resultar em um tamanho de modelo maior.These tables must include columns to support model relationships, and it can result in a larger model size.
  • Cadeias de propagação de filtro de relação mais longas precisarão ser atravessadas, o que provavelmente será menos eficiente do que os filtros aplicados a uma única tabela.Longer relationship filter propagation chains will need to be traversed, which will likely be less efficient than filters applied to a single table.
  • O painel Campos apresenta mais tabelas de modelo a autores do relatório, o que pode resultar em uma experiência menos intuitiva, especialmente quando as tabelas de dimensões de flocos de neve contêm apenas uma ou duas colunas.The Fields pane presents more model tables to report authors, which can result in a less intuitive experience, especially when snowflake dimension tables contain just one or two columns.
  • Não é possível criar uma hierarquia que abranja as tabelas.It's not possible to create a hierarchy that spans the tables.

Quando você opta por integrar em uma única tabela de modelo, também pode definir uma hierarquia que abrange as granularidades mais alta e mais baixa da dimensão.When you choose to integrate into a single model table, you can also define a hierarchy that encompasses the highest and lowest grain of the dimension. Possivelmente, o armazenamento de dados desnormalizados redundantes pode resultar em maior tamanho de armazenamento de modelo, especialmente para tabelas de dimensões muito grandes.Possibly, the storage of redundant denormalized data can result in increased model storage size, particularly for very large dimension tables.

Hierarquia dentro da dimensão

Dimensões de alteração lentaSlowly changing dimensions

Uma SCD (dimensão de alteração lenta) é aquela que gerencia adequadamente a alteração dos membros da dimensão ao longo do tempo.A slowly changing dimension (SCD) is one that appropriately manages change of dimension members over time. Ela se aplica quando os valores da entidade comercial mudam com o tempo e de uma maneira ad hoc.It applies when business entity values change over time, and in an ad hoc manner. Um bom exemplo de uma dimensão de alteração lenta é uma dimensão de cliente, especificamente, suas colunas de detalhes de contato, como endereço de email e número de telefone.A good example of a slowly changing dimension is a customer dimension, specifically its contact detail columns like email address and phone number. Por outro lado, algumas dimensões são consideradas de alteração rápida quando um atributo de dimensão é alterado com frequência, como o preço de mercado de um estoque.In contrast, some dimensions are considered to be rapidly changing when a dimension attribute changes often, like a stock's market price. A abordagem de design comum nesses casos é armazenar valores de atributos de alteração rápida em uma medida de tabela de fatos.The common design approach in these instances is to store rapidly changing attribute values in a fact table measure.

A teoria do design do esquema em estrela refere-se a dois tipos comuns de SCD: Tipo 1 e Tipo 2.Star schema design theory refers to two common SCD types: Type 1 and Type 2. Uma tabela de tipo de dimensão poderia ser do Tipo 1 ou do Tipo 2, ou dar suporte a ambos os tipos simultaneamente para colunas diferentes.A dimension-type table could be Type 1 or Type 2, or support both types simultaneously for different columns.

SCD do Tipo 1Type 1 SCD

Uma SCD do Tipo 1 sempre reflete os valores mais recentes e, quando são detectadas alterações nos dados de origem, os dados da tabela de dimensões são substituídos.A Type 1 SCD always reflects the latest values, and when changes in source data are detected, the dimension table data is overwritten. Essa abordagem de design é comum para colunas que armazenam valores suplementares, como o endereço de email ou o número de telefone de um cliente.This design approach is common for columns that store supplementary values, like the email address or phone number of a customer. Quando um endereço de email ou um número de telefone do cliente muda, a tabela de dimensões atualiza a linha de cliente com os novos valores.When a customer email address or phone number changes, the dimension table updates the customer row with the new values. É como se o cliente sempre tivesse essas informações de contato.It's as if the customer always had this contact information.

Uma atualização não incremental de uma tabela de tipo de dimensão de modelo do Power BI atinge o resultado de uma SCD do Tipo 1.A non-incremental refresh of a Power BI model dimension-type table achieves the result of a Type 1 SCD. Ela atualiza os dados da tabela para garantir que os valores mais recentes sejam carregados.It refreshes the table data to ensure the latest values are loaded.

SCD do Tipo 2Type 2 SCD

Uma SCD do Tipo 2 é compatível com o controle de versão de membros de dimensão.A Type 2 SCD supports versioning of dimension members. Se o sistema de origem não armazenar versões, normalmente será usado o processo de carregamento de data warehouse que detecta alterações e gerencia adequadamente a alteração em uma tabela de dimensão.If the source system doesn't store versions, then it's usually the data warehouse load process that detects changes, and appropriately manages the change in a dimension table. Nesse caso, a tabela de dimensões deve usar uma chave substituta para fornecer uma referência exclusiva a uma versão do membro da dimensão.In this case, the dimension table must use a surrogate key to provide a unique reference to a version of the dimension member. Ele também inclui colunas que definem a validade do intervalo de datas da versão (por exemplo, StartDate e EndDate) e, possivelmente, uma coluna de sinalizador (por exemplo, IsCurrent) para filtrar facilmente por membros da dimensão atual.It also includes columns that define the date range validity of the version (for example, StartDate and EndDate) and possibly a flag column (for example, IsCurrent) to easily filter by current dimension members.

Por exemplo, a Adventure Works atribui vendedores a uma região de vendas.For example, Adventure Works assigns salespeople to a sales region. Quando um vendedor realoca a região, uma nova versão do vendedor deve ser criada para garantir que os fatos históricos permaneçam associados à região anterior.When a salesperson relocates region, a new version of the salesperson must be created to ensure that historical facts remain associated with the former region. Para dar suporte à análise histórica precisa das vendas por vendedor, a tabela de dimensões deve armazenar versões de vendedores e suas regiões associadas.To support accurate historic analysis of sales by salesperson, the dimension table must store versions of salespeople and their associated region(s). A tabela também deve incluir valores de data de início e de término para definir a validade do tempo.The table should also include start and end date values to define the time validity. Versões atuais podem definir uma data de término vazia (ou 31/12/9999), que indica que a linha é a versão atual.Current versions may define an empty end date (or 12/31/9999), which indicates that the row is the current version. A tabela também deve definir uma chave substituta, pois a chave comercial (neste caso, ID de funcionário) não será exclusiva.The table must also define a surrogate key because the business key (in this instance, employee ID) won't be unique.

É importante entender que, quando os dados de origem não armazenam versões, você deve usar um sistema intermediário (como um data warehouse) para detectar e armazenar as alterações.It's important to understand that when the source data doesn't store versions, you must use an intermediate system (like a data warehouse) to detect and store changes. O processo de carregamento de tabela deve preservar os dados existentes e detectar alterações.The table load process must preserve existing data and detect changes. Quando uma alteração é detectada, o processo de carregamento de tabela deve expirar a versão atual.When a change is detected, the table load process must expire the current version. Ele registra essas alterações atualizando o valor EndDate e inserindo uma nova versão com o valor StartDate começando do valor EndDate anterior.It records these changes by updating the EndDate value and inserting a new version with the StartDate value commencing from the previous EndDate value. Além disso, os fatos relacionados devem usar uma pesquisa baseada em tempo para recuperar o valor da chave de dimensão relevante para a data do fato.Also, related facts must use a time-based lookup to retrieve the dimension key value relevant to the fact date. Um modelo do Power BI que usa o Power Query não consegue produzir esse resultado.A Power BI model using Power Query can't produce this result. No entanto, ele pode carregar dados de uma tabela de dimensão SCD Tipo 2 pré-carregada.It can, however, load data from a pre-loaded SCD Type 2 dimension table.

O modelo do Power BI deve dar suporte à consulta de dados históricos para um membro, independentemente da alteração, e para uma versão do membro, que representa um estado específico do membro no tempo.The Power BI model should support querying historical data for a member, regardless of change, and for a version of the member, which represents a particular state of the member in time. No contexto da Adventure Works, esse design permite consultar o vendedor, independentemente da região de vendas atribuída ou uma versão específica do vendedor.In the context of Adventure Works, this design enables you to query the salesperson regardless of assigned sales region, or for a particular version of the salesperson.

Para obter esse requisito, a tabela de tipo de dimensão do modelo do Power BI deve incluir uma coluna para filtrar o vendedor e uma coluna diferente para filtrar uma versão específica do vendedor.To achieve this requirement, the Power BI model dimension-type table must include a column for filtering the salesperson, and a different column for filtering a specific version of the salesperson. É importante que a coluna da versão forneça uma descrição não ambígua, como "Michael Blythe (12/15/2008-06/26/2019)" ou "Michael Blythe (atual)".It's important that the version column provides a non-ambiguous description, like "Michael Blythe (12/15/2008-06/26/2019)" or "Michael Blythe (current)". Também é importante treinar autores e consumidores de relatórios sobre os fundamentos de SCD Tipo 2 e como obter designs de relatórios apropriados aplicando os filtros corretos.It's also important to educate report authors and consumers about the basics of SCD Type 2, and how to achieve appropriate report designs by applying correct filters.

Também é uma boa prática de design incluir uma hierarquia que permita que os visuais façam uma busca detalhada no nível de versão.It's also a good design practice to include a hierarchy that allows visuals to drill down to the version level.

Exemplo de hierarquia na lista de campos

Saída de exemplo de hierarquia

Dimensões com função múltiplaRole-playing dimensions

Uma dimensão com função múltipla é uma dimensão que pode filtrar fatos relacionados de forma diferente.A role-playing dimension is a dimension that can filter related facts differently. Por exemplo, na Adventure Works, a tabela de dimensões de data tem três relações com os fatos de vendas do revendedor.For example, at Adventure Works, the date dimension table has three relationships to the reseller sales facts. A mesma tabela de dimensão pode ser usada para filtrar os fatos por data do pedido, data de remessa ou data de entrega.The same dimension table can be used to filter the facts by order date, ship date, or delivery date.

Em um data warehouse, a abordagem de design aceita é definir uma tabela de dimensão de data única.In a data warehouse, the accepted design approach is to define a single date dimension table. No momento da consulta, a "função" da dimensão de data é estabelecida por qual coluna de fato você usa para unir as tabelas.At query time, the "role" of the date dimension is established by which fact column you use to join the tables. Por exemplo, quando você analisa as vendas pela data do pedido, a junção da tabela se relaciona à coluna data do pedido de venda do revendedor.For example, when you analyze sales by order date, the table join relates to the reseller sales order date column.

Em um modelo do Power BI, esse design pode ser imitado com a criação de várias relações entre duas tabelas.In a Power BI model, this design can be imitated by creating multiple relationships between two tables. No exemplo da Adventure Works, as tabelas vendas de data e revendedor teriam três relações.In the Adventure Works example, the date and reseller sales tables would have three relationships. Embora isso seja possível, é importante entender que só pode haver uma relação ativa entre duas tabelas de modelo do Power BI.While this design is possible, it's important to understand that there can only be one active relationship between two Power BI model tables. Todas as relações restantes devem ser definidas como inativas.All remaining relationships must be set to inactive. Ter uma única relação ativa significa que há uma propagação de filtro padrão de data para vendas do revendedor.Having a single active relationship means there is a default filter propagation from date to reseller sales. Neste caso, a relação ativa é definida como o filtro mais comum usado pelos relatórios, que, na Adventure Works, é a relação de data do pedido.In this instance, the active relationship is set to the most common filter that is used by reports, which at Adventure Works is the order date relationship.

Exemplo de uma única dimensão de execução de função e relações

A única maneira de usar uma relação inativa é definir uma expressão DAX que usa a função USERELATIONSHIP.The only way to use an inactive relationship is to define a DAX expression that uses the USERELATIONSHIP function. Em nosso exemplo, o desenvolvedor do modelo deve criar medidas para habilitar a análise de vendas do revendedor por data de remessa e data de entrega.In our example, the model developer must create measures to enable analysis of reseller sales by ship date and delivery date. Esse trabalho pode ser entediante, especialmente quando a tabela de revendedores define muitas medidas.This work can be tedious, especially when the reseller table defines many measures. Também cria uma desordem no painel Campos, com uma superabundância de medidas.It also creates Fields pane clutter, with an overabundance of measures. Também há outras limitações:There are other limitations, too:

  • Quando os autores de relatório contam com colunas de resumo, em vez de definir medidas, eles não podem obter o resumo para as relações inativas sem escrever uma medida em nível de relatório.When report authors rely on summarizing columns, rather than defining measures, they can't achieve summarization for the inactive relationships without writing a report-level measure. As medidas em nível de relatório só podem ser definidas durante a criação de relatórios no Power BI Desktop.Report-level measures can only be defined when authoring reports in Power BI Desktop.
  • Com apenas um caminho de relação ativo entre a data e as vendas do revendedor, não é possível filtrar simultaneamente as vendas do revendedor por diferentes tipos de datas.With only one active relationship path between date and reseller sales, it's not possible to simultaneously filter reseller sales by different types of dates. Por exemplo, você não pode produzir um visual que plote vendas de datas do pedido por remessa de vendas.For example, you can't produce a visual that plots order date sales by shipped sales.

Para superar essas limitações, uma técnica comum de modelagem do Power BI é criar uma tabela de tipo de dimensão para cada instância de execução de função.To overcome these limitations, a common Power BI modeling technique is to create a dimension-type table for each role-playing instance. Normalmente, você cria tabelas de dimensões adicionais como tabelas calculadas, usando DAX.You typically create the additional dimension tables as calculated tables, using DAX. Usando tabelas calculadas, o modelo pode conter uma tabela de Data, uma tabela de Data de Remessa e uma tabela de Data de Entrega, cada uma com uma relação única e ativa com a sua respectivas colunas de tabela de vendas do revendedor.Using calculated tables, the model can contain a Date table, a Ship Date table and a Delivery Date table, each with a single and active relationship to their respective reseller sales table columns.

Exemplo de dimensões e relações de execução de função

Essa abordagem de design não exige que você defina várias medidas para diferentes funções de data e permite a filtragem simultânea por diferentes funções de data.This design approach doesn't require you to define multiple measures for different date roles, and it allows simultaneous filtering by different date roles. No entanto, um preço menor para pagar com essa abordagem de design é que haverá duplicação da tabela de dimensões de data, resultando em um tamanho de armazenamento de modelo maior.A minor price to pay, however, with this design approach is that there will be duplication of the date dimension table resulting in an increased model storage size. Como as tabelas de tipo de dimensão normalmente armazenam menos linhas em relação às tabelas de tipo de fato, isso raramente é uma preocupação.As dimension-type tables typically store fewer rows relative to fact-type tables, it is rarely a concern.

Observe as boas práticas de design a seguir ao criar tabelas de tipo de dimensão de modelo para cada função:Observe the following good design practices when you create model dimension-type tables for each role:

  • Verifique se os nomes de coluna são autodescritivos.Ensure that the column names are self-describing. Embora seja possível ter uma coluna Ano em todas as tabelas de data (os nomes de coluna são exclusivos em sua tabela), ele não é autodescritivo por títulos visuais padrão.While it's possible to have a Year column in all date tables (column names are unique within their table), it's not self-describing by default visual titles. Considere renomear colunas em cada tabela de função de dimensão de modo que a tabela Data da Remessa tenha uma coluna chamada Ano da Remessa etc.Consider renaming columns in each dimension role table, so that the Ship Date table has a year column named Ship Year, etc.
  • Quando relevante, garanta que as descrições da tabela fornecem comentários aos autores do relatório (por meio de dicas de ferramentas do painel Campos) sobre como a propagação do filtro é configurada.When relevant, ensure that table descriptions provide feedback to report authors (through Fields pane tooltips) about how filter propagation is configured. Essa clareza é importante quando o modelo contém uma tabela que tem um nome genérico, como Data, que é usado para filtrar muitas tabelas do tipo fato.This clarity is important when the model contains a generically named table, like Date, which is used to filter many fact-type tables. Caso essa tabela tenha, por exemplo, uma relação ativa com a coluna data do pedido de venda do revendedor, considere fornecer uma descrição de tabela como "Filtra vendas do revendedor por data do pedido".In the case that this table has, for example, an active relationship to the reseller sales order date column, consider providing a table description like "Filters reseller sales by order date".

Para saber mais, confira Diretrizes de relações ativas vs inativas.For more information, see Active vs inactive relationship guidance.

Dimensões de lixo eletrônicoJunk dimensions

Uma dimensão de lixo eletrônico é útil quando há muitas dimensões, especialmente consistindo em alguns atributos (talvez um) e quando esses atributos têm poucos valores.A junk dimension is useful when there are many dimensions, especially consisting of few attributes (perhaps one), and when these attributes have few values. Bons candidatos incluem colunas de status do pedido ou colunas demográficas do cliente (gênero, faixa etária etc.).Good candidates include order status columns, or customer demographic columns (gender, age group, etc.).

O objetivo de design de uma dimensão de lixo eletrônico é consolidar muitas dimensões "pequenas" em uma única dimensão para reduzir o tamanho do armazenamento de modelo e também reduzir a confusão no painel Campos identificando tabelas de modelo.The design objective of a junk dimension is to consolidate many "small" dimensions into a single dimension to both reduce the model storage size and also reduce Fields pane clutter by surfacing fewer model tables.

Em geral, uma tabela de dimensão de lixo eletrônico é o produto cartesiano de todos os membros de atributo de dimensão, com uma coluna de chave substituta.A junk dimension table is typically the Cartesian product of all dimension attribute members, with a surrogate key column. A chave substituta fornece uma referência exclusiva para cada linha na tabela.The surrogate key provides a unique reference to each row in the table. Você pode criar a dimensão em um data warehouse ou usando o Power Query para criar uma consulta que execute junções de consulta externa completa e, em seguida, adicionar uma chave substituta (coluna de índice).You can build the dimension in a data warehouse, or by using Power Query to create a query that performs full outer query joins, then adds a surrogate key (index column).

Exemplo de dimensão de lixo eletrônico

Você carrega essa consulta para o modelo como uma tabela de tipo dimensão.You load this query to the model as a dimension-type table. Você também precisa mesclar essa consulta com a consulta de fato, portanto, a coluna de índice é carregada no modelo para dar suporte à criação de uma relação de modelo de "um para muitos".You also need to merge this query with the fact query, so the index column is loaded to the model to support the creation of a "one-to-many" model relationship.

Dimensões de degeneraçãoDegenerate dimensions

Uma dimensão de degeneração refere-se a um atributo da tabela de fatos que é necessário para a filtragem.A degenerate dimension refers to an attribute of the fact table that is required for filtering. Na Adventure Works, o número da ordem de venda do revendedor é um bom exemplo.At Adventure Works, the reseller sales order number is a good example. Neste caso, não faz sentido em termos de design de modelo criar uma tabela independente que consiste apenas nesta coluna, pois isso aumentaria o tamanho do armazenamento do modelo e resultaria em desordem do painel de Campos.In this case, it doesn't make good model design sense to create an independent table consisting of just this one column, because it would increase the model storage size and result in Fields pane clutter.

No modelo do Power BI, pode ser apropriado adicionar a coluna número de ordem de venda à tabela de tipo de fato para permitir a filtragem ou o agrupamento por número de ordem de venda.In the Power BI model, it can be appropriate to add the sales order number column to the fact-type table to allow filtering or grouping by sales order number. Essa é uma exceção à regra anterior de que você não deve misturar tipos de tabela (em geral, as tabelas de modelo devem ser do tipo dimensão ou fato).It is an exception to the formerly introduced rule that you should not mix table types (generally, model tables should be either dimension-type or fact-type).

Exemplo de degeneração de dimensão

No entanto, se a tabela de vendas de revendedores da Adventure Works tiver um número de pedido e colunas de número de linha de pedido e elas forem necessárias para filtragem, uma tabela de dimensão de degeneração será um bom design.However, if the Adventure Works resellers sales table has order number and order line number columns, and they're required for filtering, a degenerate dimension table would be a good design. Para saber mais, confira as Diretrizes de relação um-para-um (Dimensões de degeneração).For more information, see One-to-one relationship guidance (Degenerate dimensions).

Tabelas de fatos sem fatosFactless fact tables

Uma tabela de fatos sem fatos não inclui nenhuma coluna de medida.A factless fact table doesn't include any measure columns. Ela contém apenas chaves de dimensão.It contains only dimension keys.

Uma tabela de fatos sem fatos poderia armazenar observações definidas por chaves de dimensão.A factless fact table could store observations defined by dimension keys. Por exemplo, em uma determinada data e hora, um cliente específico conectado ao seu site.For example, at a particular date and time, a particular customer logged into your web site. Você pode definir uma medida para contar as linhas da tabela de fatos inexistentes para executar a análise de quando e quantos clientes fizeram logon.You could define a measure to count the rows of the factless fact table to perform analysis of when and how many customers have logged in.

Um uso mais atraente de uma tabela de fatos sem fatos é armazenar relações entre dimensões, e é a abordagem de design de modelo do Power BI que recomendamos definindo relações de dimensão de muitos para muitos.A more compelling use of a factless fact table is to store relationships between dimensions, and it's the Power BI model design approach we recommend defining many-to-many dimension relationships. Em um design de relação de dimensão muitos para muitos, a tabela de fatos sem fatos é conhecida como uma tabela de pontes.In a many-to-many dimension relationship design, the factless fact table is referred to as a bridging table.

Por exemplo, considere que os vendedores podem ser atribuídos a uma ou mais regiões de vendas.For example, consider that salespeople can be assigned to one or more sales regions. A tabela de pontes seria projetada como uma tabela de fatos informativa que consiste em duas colunas: chave de vendedor e chave de região.The bridging table would be designed as a factless fact table consisting of two columns: salesperson key and region key. Valores duplicados podem ser armazenados em ambas as colunas.Duplicate values can be stored in both columns.

Exemplo de tabela de fatos sem fatos

Essa abordagem de design de muitos para muitos é bem documentada e pode ser obtida sem uma tabela de pontes.This many-to-many design approach is well documented, and it can be achieved without a bridging table. No entanto, a abordagem da tabela de pontes é considerada a melhor prática ao relacionar duas dimensões.However, the bridging table approach is considered the best practice when relating two dimensions. Confira mais informações em Diretrizes de relação de muitos para muitos (Relacionar duas tabelas de tipo dimensão).For more information, see Many-to-many relationship guidance (Relate two dimension-type tables).

Próximas etapasNext steps

Para obter mais informações sobre o design do esquema em estrela ou design de modelo do Power BI, confira os seguintes artigos:For more information about star schema design or Power BI model design, see the following articles: