Compartilhar via


Relações (tabela SSAS)

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 Email 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.
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)