Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Em modelos tabulares, uma relação é uma conexão entre duas tabelas de dados. A relação estabelece como os dados nas duas tabelas devem ser correlacionados. Por exemplo, uma tabela Customers e uma tabela Pedidos podem ser relacionadas para mostrar o nome do cliente associado a cada pedido.
Ao usar o Assistente de Importação de Tabela para importar da mesma fonte de dados, as relações que já existem em tabelas (na fonte de dados) que você optar por importar serão recriadas no modelo. Você pode exibir relações detectadas e recriadas automaticamente usando o designer de modelo no Modo de Exibição de Diagrama ou usando a caixa de diálogo Gerenciar Relações. Você também pode criar novas relações entre tabelas manualmente usando o designer de modelo no Modo de Exibição de Diagrama ou usando a caixa de diálogo Criar Relação ou Gerenciar Relações.
Depois que as relações entre tabelas tiverem sido definidas, automaticamente durante a importação ou criadas manualmente, você poderá filtrar dados usando colunas relacionadas e pesquisar valores em tabelas relacionadas.
Dica
Se o modelo contiver muitas relações, o Modo de Exibição de Diagrama poderá ajudar você a visualizar melhor e criar novas relações entre tabelas.
Seções neste tópico:
Benefícios
Uma relação é uma conexão entre duas tabelas de dados, com base em uma ou mais colunas em cada tabela. Para ver por que as relações são úteis, imagine que você rastreia dados para pedidos de clientes em sua empresa. Você pode acompanhar todos os dados em uma única tabela que tenha uma estrutura como a seguinte:
| ID do Cliente | Nome | Taxa de Descontos | ID do Pedido | Data do Pedido | Produto | Quantidade | |
|---|---|---|---|---|---|---|---|
| 1 | Ashton | chris.ashton@contoso.com | .05 | 256 | 2010-01-07 | Compact Digital | 11 |
| 1 | Ashton | chris.ashton@contoso.com | ,05 | 255 | 2010-01-03 | Câmera SLR | 15 |
| 2 | Jaworski | michal.jaworski@contoso.com | 0,10 | 254 | 2010-01-03 | Orçamento Movie-Maker | 27 |
Essa abordagem pode funcionar, mas envolve o armazenamento de muitos dados redundantes, como o endereço de email do cliente para cada pedido. O armazenamento é barato, mas você precisa certificar-se de atualizar todas as linhas para esse cliente se o endereço de email for alterado. Uma solução para esse problema é dividir os dados em várias tabelas e definir relações entre essas tabelas. Essa é a abordagem usada em bancos de dados relacionais , como o SQL Server. Por exemplo, um banco de dados importado para um modelo pode representar dados de pedido usando três tabelas relacionadas:
Clientes
| [CustomerID] | Nome | Correio eletrônico |
|---|---|---|
| 1 | Ashton | chris.ashton@contoso.com |
| 2 | Jaworski | michal.jaworski@contoso.com |
DescontosParaClientes
| [CustomerID] | Taxa de Descontos |
|---|---|
| 1 | .05 |
| 2 | .10 |
Pedidos
| [CustomerID] | ID do Pedido | Data do Pedido | Produto | Quantidade |
|---|---|---|---|---|
| 1 | 256 | 2010-01-07 | Compact Digital | 11 |
| 1 | 255 | 2010-01-03 | Câmera SLR | 15 |
| 2 | 254 | 2010-01-03 | Orçamento Movie-Maker | 27 |
Se você importar essas tabelas do mesmo banco de dados, o Assistente de Importação de Tabela poderá detectar as relações entre as tabelas com base nas colunas que estão em [colchetes] e poderá reproduzir essas relações no designer de modelo. Para obter mais informações, consulte Detecção Automática e Inferência de Relações neste tópico. Se você importar tabelas de várias fontes, poderá criar relações manualmente, conforme descrito em Criar uma relação entre duas tabelas (tabela SSAS).
Colunas e Chaves
As relações são baseadas em colunas em cada tabela que contêm os mesmos dados. Por exemplo, as tabelas Clientes e Pedidos podem estar relacionadas umas às outras porque ambas contêm uma coluna que armazena uma ID do cliente. No exemplo, os nomes de coluna são os mesmos, mas isso não é um requisito. Uma pode ser CustomerID e outra CustomerNumber, desde que todas as linhas na tabela Pedidos contenham uma ID que também seja armazenada na tabela Clientes.
Em um banco de dados relacional, há vários tipos de chaves, que normalmente são apenas colunas com propriedades especiais. Os quatro tipos de chaves a seguir podem ser usados em bancos de dados relacionais:
Chave primária: identifica exclusivamente uma linha em uma tabela, como CustomerID na tabela Clientes.
Chave alternativa (ou chave candidata): uma coluna diferente da chave primária exclusiva. Por exemplo, uma tabela Funcionários pode armazenar uma ID de funcionário e um número de seguro social, ambos exclusivos.
Chave estrangeira: uma coluna que se refere a uma coluna exclusiva em outra tabela, como CustomerID na tabela Pedidos, que se refere à CustomerID na tabela Clientes.
Chave composta: uma chave composta por mais de uma coluna. Não há suporte para chaves compostas em modelos tabulares. Para obter mais informações, consulte "Chaves compostas e colunas de pesquisa" neste tópico.
Em modelos tabulares, a chave primária ou a chave alternativa é conhecida como a coluna de pesquisa relacionada ou apenas a coluna de pesquisa. Se uma tabela tiver tanto uma chave primária quanto uma chave alternativa, você poderá usar qualquer uma das duas como a coluna de pesquisa. A chave estrangeira é conhecida como coluna de origem ou apenas coluna. Em nosso exemplo, uma relação seria definida entre CustomerID na tabela Pedidos (a coluna) e CustomerID (a coluna de pesquisa) na tabela Clientes. Se você importar dados de um banco de dados relacional, por padrão, o designer de modelo escolherá a chave estrangeira de uma tabela e a chave primária correspondente da outra tabela. No entanto, você pode usar qualquer coluna que tenha valores exclusivos para a coluna de pesquisa.
Tipos de relações
A relação entre Clientes e Pedidos é uma relação de um para muitos. Cada cliente pode ter vários pedidos, mas um pedido não pode ter vários clientes. Os outros tipos de relacionamentos são um para um e muitos para muitos. A tabela CustomerDiscounts, que define uma única taxa de desconto para cada cliente, está em uma relação um-para-um com a tabela Clientes. Um exemplo de uma relação muitos para muitos é uma relação direta entre Produtos e Clientes, na qual um cliente pode comprar muitos produtos e o mesmo produto pode ser comprado por muitos clientes. O designer de modelo não suporta relações de muitos para muitos na interface gráfica do usuário. Para obter mais informações, consulte "Relacionamentos Muitos-para-Muitos" neste tópico.
A tabela a seguir mostra as relações entre as três tabelas:
| Relacionamento | Tipo | coluna de pesquisa | Coluna |
|---|---|---|---|
| Customers-CustomerDiscounts | um-para-um | Customers.CustomerID | DescontosDoCliente.IDDoCliente |
| Customers-Orders | um para muitos | Customers.CustomerID | Orders.CustomerID |
Relações e desempenho
Depois que qualquer relação tiver sido criada, o designer de modelos normalmente deve recalcular todas as fórmulas que usam colunas de tabelas na relação recém-criada. O processamento pode levar algum tempo dependendo da quantidade de dados e da complexidade das relações.
Requisitos para relações
O designer de modelos tem vários requisitos que devem ser seguidos ao criar relações:
Relação ativa única entre tabelas
Várias relações podem resultar em dependências ambíguas entre tabelas. Para criar cálculos precisos, você precisa de um único caminho de uma tabela para a próxima. Portanto, pode haver apenas uma relação ativa entre cada par de tabelas. Por exemplo, no AdventureWorks DW 2012, a tabela DimDate contém uma coluna, DateKey, que está relacionada a três colunas diferentes na tabela, FactInternetSales: OrderDate, DueDate e ShipDate. Se você tentar importar essas tabelas, a primeira relação será criada com êxito, mas você receberá o seguinte erro em relações sucessivas que envolvem a mesma coluna:
* Relação: tabela[coluna 1]-> tabela[coluna 2] - Status: erro - Motivo: Não é possível criar uma relação entre as tabelas <tabela 1> e <tabela 2>. Somente uma relação direta ou indireta pode existir entre duas tabelas.
Se você tiver duas tabelas e várias relações entre elas, precisará importar várias cópias da tabela que contém a coluna de pesquisa e criar uma relação entre cada par de tabelas.
Pode haver muitas relações inativas entre tabelas. O caminho a ser usado entre tabelas é especificado pelo cliente de relatório no momento da consulta.
Uma relação para cada coluna de origem
Uma coluna de origem não pode participar de várias relações. Se você já tiver usado uma coluna como uma coluna de origem em uma relação, mas quiser usar essa coluna para se conectar a outra coluna de pesquisa relacionada em uma tabela diferente, poderá criar uma cópia da coluna e usar essa coluna para a nova relação.
É fácil criar uma cópia de uma coluna que tenha exatamente os mesmos valores usando uma fórmula DAX em uma coluna calculada. Para obter mais informações, consulte Criar uma coluna calculada (SSAS tabular).
Identificador exclusivo para cada tabela
Cada tabela deve ter uma única coluna que identifique exclusivamente cada linha nessa tabela. Essa coluna geralmente é conhecida como a chave primária.
Colunas de pesquisa exclusivas
Os valores de dados na coluna de pesquisa devem ser exclusivos. Em outras palavras, a coluna não pode conter duplicatas. Em modelos tabulares, nulos e cadeias de caracteres vazias são equivalentes a um espaço em branco, que é um valor de dados distinto. Isso significa que você não pode ter vários nulos na coluna de pesquisa.
Tipos de dados compatíveis
Os tipos de dados na coluna de origem e na coluna de pesquisa devem ser compatíveis. Para obter mais informações sobre tipos de dados, consulte tipos de dados com suporte (SSAS tabular).
Chaves compostas e colunas de pesquisa
Você não pode usar chaves compostas em um modelo de tabela; você sempre deve ter uma coluna que identifique exclusivamente cada linha na tabela. Se você tentar importar tabelas que tenham uma relação existente com base em uma chave composta, o Assistente de Importação de Tabela ignorará essa relação porque ela não pode ser criada no modelo de tabela.
Se você quiser criar uma relação entre duas tabelas no designer de modelo e houver várias colunas definindo as chaves primárias e estrangeiras, você deverá combinar os valores para criar uma única coluna de chave antes de criar a relação. Você pode fazer isso antes de importar os dados ou pode fazer isso no designer de modelo criando uma coluna calculada.
Relações de muitos para muitos
Modelos tabulares não dão suporte a relações muitos para muitos e você não pode adicionar tabelas de junção no designer de modelos. No entanto, você pode usar funções DAX para modelar relações de muitos para muitos.
Self-Joins e loops
As autojunções não são permitidas em tabelas de modelo tabular. Uma autojunção é uma relação recursiva entre uma tabela e ela mesma. Autojunções são frequentemente usadas para definir hierarquias pai-filho. Por exemplo, você pode unir uma tabela Employees a si mesma para produzir uma hierarquia que mostre a cadeia de gerenciamento em uma empresa.
O designer de modelos não permite que loops sejam criados entre relações em um modelo. Em outras palavras, o seguinte conjunto de relações é proibido.
Tabela 1, coluna a para Tabela 2, coluna f
Tabela 2, coluna f para Tabela 3, coluna n
Tabela 3, coluna n à Tabela 1, coluna a
Se você tentar criar uma relação que resultaria na criação de um loop, um erro será gerado.
Inferência de relações
Em alguns casos, as relações entre tabelas são encadeadas automaticamente. Por exemplo, se você criar uma relação entre os dois primeiros conjuntos de tabelas abaixo, uma relação será inferida para existir entre as outras duas tabelas e uma relação será estabelecida automaticamente.
Produtos e Categoria – criados manualmente
Categoria e SubCategoria – criadas manualmente
Produtos e SubCategoria – a relação é inferida
Para que as relações sejam encadeadas automaticamente, as relações devem ir em uma direção, conforme mostrado acima. Caso as relações iniciais sejam entre, por exemplo, Vendas e Produtos, e Vendas e Clientes, uma relação não será inferida. Isso ocorre porque a relação entre Produtos e Clientes é uma relação muitos a muitos.
Detecção de relações ao importar dados
Quando você importa de uma tabela de fonte de dados relacional, o Assistente de Importação de Tabela detecta relações existentes nessas tabelas de origem com base nos dados do esquema de origem. Se as tabelas relacionadas forem importadas, essas relações serão duplicadas no modelo.
Criar relações manualmente
Embora a maioria das relações entre tabelas em uma única fonte de dados relacional seja detectada automaticamente e criada no modelo tabular, também há muitas instâncias em que você deve criar manualmente relações entre tabelas de modelo.
Se o modelo contiver dados de várias fontes, você provavelmente precisará criar relações manualmente. Por exemplo, você pode importar as tabelas Customers, CustomerDiscounts e Orders de uma fonte de dados relacional. As relações existentes entre essas tabelas na origem são criadas automaticamente no modelo. Em seguida, você pode adicionar outra tabela de uma fonte diferente, por exemplo, importar dados de região de uma tabela geography em uma pasta de trabalho do Microsoft Excel. Em seguida, você pode criar manualmente uma relação entre uma coluna na tabela Clientes e uma coluna na tabela Geography.
Para criar relações manualmente em um modelo de tabela, você pode usar o designer de modelo no Modo de Exibição de Diagrama ou usando a caixa de diálogo Gerenciar Relações. O modo de exibição de diagrama exibe tabelas, com relações entre elas, em um formato gráfico. Você pode clicar em uma coluna em uma tabela e arrastar o cursor para outra tabela para criar facilmente uma relação, na ordem correta, entre as tabelas. A caixa de diálogo Gerenciar Relações exibe relações entre tabelas em um formato de tabela simples. Para saber como criar relações manualmente, consulte Criar uma relação entre duas tabelas (tabela SSAS).
Valores duplicados e outros erros
Se você escolher uma coluna que não pode ser usada na relação, um X vermelho será exibido ao lado da coluna. Você pode pausar o cursor sobre o ícone de erro para exibir uma mensagem que fornece mais informações sobre o problema. Os problemas que podem impossibilitar a criação de uma relação entre as colunas selecionadas incluem o seguinte:
| Problema ou mensagem | Resolução |
|---|---|
| A relação não pode ser criada porque ambas as colunas selecionadas contêm valores duplicados. | Para criar uma relação válida, pelo menos uma coluna do par selecionado deve conter apenas valores exclusivos. Você pode editar as colunas para remover duplicatas ou reverter a ordem das colunas para que a coluna que contém os valores exclusivos seja usada como a Coluna de Pesquisa Relacionada. |
| A coluna contém um valor nulo ou vazio. | As colunas de dados não podem ser unidas umas às outras em um valor nulo. Para cada linha, deve haver um valor em ambas as colunas que são usadas em uma relação de dados. |
Tarefas Relacionadas
| Tópico | Descrição |
|---|---|
| Criar uma relação entre duas tabelas (tabela SSAS) | Descreve como criar manualmente uma relação entre duas tabelas. |
| Excluir relações (SSAS tabular) | Descreve como excluir uma relação e as ramificações da exclusão de relações. |
Consulte Também
Tabelas e colunas (SSAS tabular)
Importar dados (SSAS Tabular)