Você está na página 1de 99

Projetar um modelo semântico

multidimensional de business intelligence (BI)


Data: 07/09/2017

Voltar ao artigo

Neste capítulo de amostra do exame Ref 70-768 Desenvolvendo modelos de dados SQL , aprenda como
criar um banco de dados multidimensional usando o Microsoft SQL Server Analysis Services (SSAS),
projetar e implementar dimensões em um cubo e implementar medidas e grupos de medidas em um
cubo .

Importante Você leu a página xiii?

Ele contém informações valiosas sobre as habilidades necessárias para passar no exame.

Um modelo semântico de business intelligence é uma camada semântica criada para representar e
aprimorar dados para uso em aplicativos de relatório e análise. O Microsoft SQL Server Analysis
Services (SSAS) oferece suporte a dois tipos de modelos semânticos de business intelligence:
multidimensionais e tabulares. Neste capítulo, revisamos as habilidades necessárias para criar um
banco de dados multidimensional, enquanto exploramos as habilidades necessárias para criar um
modelo tabular no Capítulo 2, “Projetar um modelo semântico tabular de BI”. Começamos com as
etapas necessárias para instanciar fisicamente um banco de dados multidimensional em um servidor
SSAS. Em seguida, trabalhamos nas etapas a serem executadas e nas decisões a serem consideradas
para os dois objetos principais em um banco de dados multidimensional, dimensões e medidas.

Habilidades neste capítulo:

 Crie um banco de dados multidimensional usando o Microsoft SQL Server Analysis Services
(SSAS)

 Projetar e implementar dimensões em um cubo

 Implementar medidas e grupos de medidas em um cubo

Habilidade 1.1: Criar um banco de dados multidimensional


usando Microsoft SQL Server Analysis Services (SSAS)
Antes de iniciar o processo de desenvolvimento de um banco de dados multidimensional, você deve
dedicar algum tempo pensando sobre seu design e preparando seus dados para o novo banco de
dados. Você estará então pronto para configurar o banco de dados no servidor SSAS e escolher como
deseja que o SSAS armazene dados no banco de dados.

Esta seção aborda como:

 Projetar, desenvolver e criar bancos de dados multidimensionais

 Selecione um modelo de armazenamento

Projetar, desenvolver e criar bancos de dados multidimensionais

O processo de design começa com a compreensão de como as pessoas fazem perguntas sobre seus
negócios. Ou seja, você deve decidir como traduzir seus requisitos de negócios em um modelo de
dados que seja adequado como fonte para um banco de dados multidimensional. Depois de carregar
os dados nesse modelo de dados, um processo que não é abordado no exame, prossiga criando um
projeto de banco de dados multidimensional no SQL Server Data Tools para Visual Studio 2015
(SSDT).

Durante o processo de desenvolvimento, você cria objetos de suporte, como uma fonte de dados e
uma visualização da fonte de dados, para definir a conectividade com seu modelo de dados e
fornecer uma camada de abstração para os dados que você usa para desenvolver dimensões, medidas
e cubos. À medida que você trabalha em cada etapa, você implanta cada objeto recém-criado em um
banco de dados multidimensional no servidor SSAS para poder testar seu trabalho e garantir que os
requisitos de negócios sejam atendidos.

Design da tabela de origem

Um banco de dados de processamento transacional online (OLTP) é estruturado na terceira forma


normal com eficiência de armazenamento e otimização de operações de gravação ou operações de
leitura de baixo volume em mente. Um banco de dados multidimensional SSAS é um banco de dados
de processamento analítico online (OLAP) otimizado para operações de leitura de dados de alto
volume. Se você ainda não possui um data warehouse para usar como origem para seu banco de
dados multidimensional, deverá projetar um novo modelo de dados em um banco de dados
relacional no qual armazenará os dados que serão carregados no SSAS.

Antes de iniciar o design de um novo modelo de dados para usar como fonte para seu banco de
dados multidimensional, você deve dedicar algum tempo para entender como os usuários
corporativos desejam analisar os dados. Você pode entrevistá-los para descobrir os tipos de
perguntas que desejam responder com a análise de dados e revisar os relatórios que usam para
encontrar pistas sobre elementos analíticos importantes. Em particular, você deseja descobrir as
medidas e dimensões que precisa criar no novo modelo de dados. As medidas são os valores
numéricos a serem analisados, como o total de vendas, e as dimensões são as pessoas, lugares, coisas
e datas que fornecem contexto para esses valores. Neste capítulo, você aprende como desenvolver
um banco de dados multidimensional que pode responder aos seguintes tipos de perguntas, também
conhecidas como requisitos de negócios, com base em dados de uma empresa fictícia, a Wide World
Importers:

 Qual é a quantidade vendida de itens por data, cliente, vendedor ou local?

 Quantos itens são vendidos por cor ou tamanho?


 Quantos itens que necessitam de refrigeração são vendidos em comparação com itens de
estoque que não necessitam de refrigeração (itens secos)?

 Quantas vendas ocorreram por data, cliente, vendedor ou local?

 O que são vendas totais (com e sem impostos incluídos), impostos e lucro por data, vendedor,
local ou item?

 Ao analisar transações individuais, qual é a alíquota do imposto e qual é o preço unitário por
item vendido?

 Para cada cliente faturado pelas vendas, como essas vendas são divididas pelos clientes que
recebem os itens?

 Que motivos os clientes dão para fazer uma compra e como o valor das vendas e as
contagens de vendas são divididos por motivo de vendas?

 Quantos itens distintos são vendidos por data, cliente, vendedor ou local?

 Quantos itens estão em estoque por data e quais são os níveis de estoque alvo e pontos de
reabastecimento para cada item?

Ao avaliar as perguntas, procure pistas para medir, como “quantos”, “total”, “dólares” ou
“contagem”. Você também deve observar se um valor pode ser obtido diretamente do sistema OLTP
ou se deve ser calculado. Se um valor for calculado, decida se ele pode ser calculado em uma base
escalar (linha por linha) e se a soma dos resultados calculados pode gerar um total geral. Esteja atento
a diferentes termos que se referem à mesma medida e, em seguida, consulte os usuários de negócios
para determinar qual termo usar no banco de dados multidimensional. Usando esses critérios, as
seguintes medidas emergem dos requisitos de negócios:

 Quantidade

 Contagem distinta de itens de estoque

 Contagem de itens do resfriador

 Contagem de itens secos

 Contagem de vendas

 Valor de vendas com impostos

 Valor de vendas sem impostos

 Valor do imposto

 Taxa de imposto

 Preço unitário

 Quantidade disponível

 Nível de reabastecimento
 Nível de estoque alvo

A próxima etapa é revisar novamente os requisitos de negócios para identificar dimensões. Uma pista
comum para uma dimensão é a palavra “por” na frente de uma dimensão candidata, embora às vezes
seja incluída apenas implicitamente nos requisitos. Uma segunda revisão dos requisitos comerciais
para importadores do mundo inteiro produz as seguintes dimensões:

 Data

Às vezes, há várias datas associadas a uma transação. É importante saber como cada
comunidade de usuários da sua organização associa dados a datas. Na Wide World Importers,
o departamento de vendas está interessado em analisar as vendas por data de fatura,
enquanto o departamento de armazém deseja revisar as vendas por data de entrega.

 Cliente

 Funcionário

 Cidade

 Item de estoque

Um dos requisitos da Wide World Importers é analisar as vendas por cor ou tamanho de um
item. Embora a palavra “por” seja uma pista, cor e tamanho são descritores ou características
mais precisas de um item e, portanto, tornam-se parte de uma tabela de dimensão única para
itens. Normalmente não são criadas tabelas de dimensões separadas para características
como esta.

Precisa de mais análises? Técnicas de modelagem dimensional

Ralph Kimball, o pai da modelagem dimensional, possui vários livros e recursos online que descrevem
esse tópico em detalhes. Um bom lugar para começar é “Técnicas de Modelagem Dimensional”
em http://www.kimballgroup.com/data-warehouse-business-intelligence-resources/kimball-
techniques/dimensional-modeling-techniques/ .

Em um modelo de dados ideal para um banco de dados multidimensional, os dados são


desnormalizados para minimizar o número de junções em diversas tabelas usando um esquema em
estrela , que consiste em tabelas de dimensões e pelo menos uma tabela de fatos na qual as medidas
são armazenadas. Se você criar um diagrama colocando a tabela de fatos no centro e cercando-a por
dimensões relacionadas, o diagrama terá o formato de uma estrela, como mostrado na Figura 1-
1 . Este exemplo de esquema em estrela é uma seleção de seis tabelas do banco de dados de exemplo
WideWorldImportersDW para SQL Server 2016 que responde a algumas das perguntas estabelecidas
como requisitos para o banco de dados multidimensional que você constrói ao longo deste capítulo.
FIGURA 1-1 Esquema em estrela para um subconjunto de tabelas em WideWorldImportersDW

Nota Banco de dados de amostra WideWorldImportersDW

Você pode baixar o banco de dados de amostra WideWorldImportersDW


em https://github.com/Microsoft/sql-server-samples/releases/tag/wide-world-importers-v1.0 . As
instruções de instalação estão em https://msdn.microsoft.com/library/mt734217.aspx .

Embora um esquema em estrela não seja necessário como fonte para SSAS, ele é uma estrutura
preferida para modelos multidimensionais em escala empresarial por vários motivos. Primeiro, o
impacto do acesso ao sistema OLTP do SSAS adiciona contenção de recursos ao seu ambiente, que
você pode evitar criando uma fonte de dados separada. (O grau de impacto no OLTP depende do
modelo de armazenamento selecionado, conforme explicado na seção “Selecione um modelo de
armazenamento” neste capítulo.) Em segundo lugar, a quantidade de tempo para mover dados do
sistema OLTP para o banco de dados multidimensional às vezes é menos ideal do que poderia ser se
você reestruturasse os dados primeiro. Terceiro, às vezes a análise requer acesso a informações
históricas que não estão mais preservadas no sistema de origem. Ter um modelo de dados separado
no qual você armazena dados à medida que eles mudam torna-se uma necessidade nesse
caso. Outras razões para criar um modelo de dados separado incluem, mas não estão limitadas a,
limpar dados que não podem ser corrigidos no sistema OLTP, ter os resultados disponíveis não
apenas para o banco de dados multidimensional, mas para outros sistemas de relatórios downstream
(muitas vezes com melhor desempenho do que consultar o OLTP diretamente) e integrando dados de
vários sistemas OLTP.

Observe o design da dimensão do floco de neve

Outro tipo de design que você pode implementar para uma dimensão é um floco de neve, no qual
você usa diversas tabelas relacionadas para uma única dimensão. Na modelagem de dimensão
tradicional, o uso de dimensões em floco de neve não é considerado uma prática recomendada
porque adiciona junções ao modelo de dados que um design de esquema em estrela procura
eliminar. Para cenários de relatórios relacionais, as junções adicionais podem ter um impacto adverso
no desempenho. No entanto, quando você usa o SSAS em seu modo de armazenamento padrão, a
estrutura em floco de neve não tem impacto no desempenho e pode ser um design preferível quando
você precisa dar suporte à análise em tabelas de fatos com diferentes níveis de granularidade ou para
simplificar o processo que carrega a dimensão da fonte OLTP. Você pode aprender mais sobre por
que usar uma dimensão floco de neve e como projetá-la corretamente em uma série de postagens de
blog de Jason Thomas que começa em http://sqljason.com/2011/05/when-and-how-to- floco de neve-
dimension.html .

Para carregar o esquema em estrela com dados periodicamente, você usa uma ferramenta ETL
(extrair-transformar-carregar), como o SQL Server Integration Services (SSIS). A ferramenta ETL
normalmente é programada para ser executada todas as noites para carregar linhas novas e alteradas
no esquema em estrela, embora os requisitos de negócios possam ditar uma frequência diferente,
como a cada cinco minutos quando é necessária baixa latência ou uma vez por semana para dados de
origem que mudam com pouca frequência .

Dica de exame

Como o foco do exame 70-768 está na implementação de modelos do Analysis Services, esta
referência do exame não explica como converter dados de uma estrutura OLTP, como Wide World
Importers, em uma estrutura de esquema em estrela adequada para OLAP. A suposição para o exame
é que o design das tabelas de dimensões e fatos esteja completo e que um processo ETL tenha
carregado as tabelas com dados do sistema OLTP de origem. No entanto, você deve estar
familiarizado com os conceitos e a terminologia do esquema em estrela e entender como
implementar recursos do Analysis Services com base em características de dados e requisitos de
análise específicos.

Uma tabela de dimensão contém dados sobre as entidades que um usuário empresarial deseja
analisar — normalmente uma pessoa, um lugar, uma coisa ou um momento específico. Uma
consideração ao projetar uma tabela de dimensões é rastrear o histórico. Uma dimensão de mudança
lenta (SCD) é uma dimensão para a qual você implementa tipos específicos de colunas e técnicas de
ETL especificamente para abordar como gerenciar atualizações de tabela quando os dados são
alterados. Você toma essa decisão de design para cada dimensão separadamente com base nos
requisitos de negócios. As duas abordagens mais comuns para gerenciar o histórico incluem os
seguintes tipos de SCD:

 Tipo 1 Apenas os dados atuais são rastreados. O processo ETL atualiza colunas com valores
alterados e perde os valores armazenados anteriormente nessas colunas. Por exemplo, você
pode não acompanhar o histórico de alterações de nomes de funcionários, conforme
mostrado na Figura 1-2 , porque o efeito nas vendas provavelmente não será relevante.

O SCD Tipo 1 substitui os valores existentes quando os dados de origem são


FIGURA 1-2
alterados
 Tipo 2 Tanto os dados atuais quanto os dados históricos são rastreados. O processo ETL
expira a linha que contém os dados originais, identificando-os assim como dados históricos, e
cria uma nova linha ativa contendo os dados atuais. Quando os dados em uma das colunas
mudam em uma linha, o processo ETL atualiza a data Válido até na linha existente para refletir
a data atual e, assim, expira esse registro e, em seguida, adiciona um novo registro com os
valores atuais para cada coluna e define a data Válido desde para a data atual. Dependendo
das regras de negócios, a data Válido até pode ser NULA ou uma data futura, como
31/12/9999.

Por exemplo, você pode acompanhar o histórico de alterações nos dados de um item de
estoque, como o preço de varejo, conforme mostrado na Figura 1-3 , porque você pode
querer monitorar se as vendas mudam quando o preço de varejo muda.

SCD Tipo 2 expira a linha original e insere uma nova linha quando os dados de
FIGURA 1-3
origem são alterados

Nota Alterando lentamente os tipos de dimensão

Existem diversas maneiras diferentes de modelar dimensões para acomodar alterações além do Tipo 1
e do Tipo 2, mas essas duas são as mais comuns. Você pode aprender mais sobre o Tipo 1 com Ralph
Kimball em http://www.kimballgroup.com/2008/08/slowly- Changing-dimensions/ e sobre o Tipo 2
em http://www.kimballgroup.com/2008/09/ dimensões de mudança lenta-parte-2/ .

Vamos dar uma olhada em City, uma das tabelas de dimensão do banco de dados
WideWorldImportersDW, para entender os tipos de colunas que ela contém. A Figura 1-2 mostra os
seguintes tipos de colunas comumente encontrados em uma dimensão:

 Chave substituta Uma chave primária para a tabela de dimensões identificar exclusivamente
cada linha. Normalmente não tem significado comercial e geralmente é definido como uma
coluna de identidade. Na tabela Cidade, a coluna [City Key] é a chave substituta. A finalidade
de uma chave substituta é evitar linhas duplicadas ao combinar dados de diversas fontes ou
capturar dados históricos para dimensões que mudam lentamente. Além disso, os dados de
origem de uma tabela de dimensão podem não usar um valor inteiro para sua chave primária,
enquanto a aplicação de uma chave baseada em número inteiro em uma tabela de dimensão
garante um desempenho ideal ao processar a dimensão para carregar seus dados em um
banco de dados multidimensional.

Dimensão de data da nota


Não é incomum ver uma dimensão de data sem uma chave substituta definida. Em vez disso,
um valor inteiro para a data no formato AAAAMMDD é usado para identificar exclusivamente
cada data. Ao usar essa abordagem, a exclusividade é garantida. Além disso, os problemas
com a combinação de fontes de dados ou com o gerenciamento de dimensões que mudam
lentamente não ocorrem em uma dimensão de data.

 Chave natural ou comercial A chave primária na tabela de origem da dimensão, que é [ID da
cidade WWI] na tabela Cidade. Essa coluna normalmente não é exibida para usuários
corporativos para fins analíticos, mas é usada para combinar linhas do sistema de origem com
linhas existentes na tabela de dimensões como parte do processo ETL.

 Atributos Colunas descritivas sobre uma linha na tabela de dimensões. Os atributos na tabela
Cidade incluem Cidade, Estado, Província, País, Continente, Território de Vendas, Região, Sub-
região, Local e População Registrada Mais Recente. Os atributos podem ser usados
explicitamente para análise para agregar valores numéricos da tabela de fatos, da mesma
forma que você usa uma cláusula GROUP BY em uma instrução SELECT do Transact-SQL (T-
SQL).

 Histórico de dimensão de alteração lenta Um par de colunas para mostrar o intervalo de datas
para o qual uma linha é válida. As colunas do histórico de dimensão que mudam lentamente
especificam o intervalo de datas para o qual o conjunto de atributos na linha é válido em um
SCD Tipo 2. Em WideWorldImportersDW, Valid From e Valid To são as colunas que cumprem
esta função. Outra convenção de nomenclatura comum é StartDate e EndDate.

Observe que o rastreamento do histórico é opcional

Uma tabela de dimensão SCD Tipo 1 para a qual apenas os dados atuais são rastreados
normalmente não contém colunas de histórico.

Embora a tabela Cidade em WideWorldImportersDW seja implementada como se fosse uma


dimensão de mudança lenta, porque inclui as colunas de histórico Válido de e Válido até, os
dados na tabela não refletem os dados alterados nos registros históricos. Em vez disso, você
pode observar um exemplo de mudança lenta no histórico de dimensões na tabela de
dimensões do item de estoque, que mostra uma mudança na cor que resultou em diversas
linhas para o ID 2 do item de estoque da Primeira Guerra Mundial, conforme mostrado na
Figura 1-4 .

FIGURA 1-4 Várias linhas para um único item de estoque demonstram o manuseio do SCD Tipo 2

Observe que existem três chaves substitutas, Chave de item de estoque, para a mesma chave
natural e ID de item de estoque da Primeira Guerra Mundial. Cada chave substituta está
associada a um intervalo separado de datas Válido desde e Válido até.

 Chave de linhagem ou auditoria Uma coluna opcional em uma tabela de dimensão que possui
um relacionamento de chave estrangeira com outra tabela na qual as informações sobre
processos ETL são mantidas. Em WideWorldImportersDW, a tabela City, mostrada na Figura 1-
5 , possui a coluna Lineage Key que se relaciona à tabela Integration.Lineage. Esta última
tabela inclui a data e hora em que o processo ETL começou e terminou, a tabela afetada e o
sucesso do processo.

FIGURA 1-5 Tabela de dimensão de cidade no banco de dados WideWorldImportersDW

Uma tabela de fatos contém muitas colunas de dados numéricos. Um usuário empresarial analisa os
dados em muitas dessas colunas de forma agregada, normalmente calculando somas, médias ou
contagens. Outras colunas numéricas contendo chaves estrangeiras são usadas para proteger a
integridade relacional com tabelas de dimensões por meio de relacionamentos de chaves
estrangeiras. Uma tabela de factos suporta comparações destes valores agregados ao longo de
diferentes períodos de tempo, tais como o total de vendas deste ano versus o total de vendas do ano
passado, ou entre diferentes grupos, tais como marcas ou cores de itens em stock. A Figura 1-
6 mostra um exemplo de Sale, uma tabela de fatos em WideWorldImportersDW que contém os
seguintes tipos de colunas:

 Chave substituta Uma chave primária para a tabela de fatos identificar exclusivamente cada
linha. Como uma chave substituta para uma tabela de dimensão, normalmente não tem
significado comercial e é frequentemente definida como uma coluna de
identidade. Freqüentemente, uma tabela de fatos não possui chave substituta porque a
coleção de colunas de chave estrangeira representa uma chave composta exclusiva. A
inclusão de uma chave substituta para uma tabela de fatos é uma questão de preferência do
modelador de dados.
Nota Benefícios de uma chave substituta em uma tabela de fatos

Bob Becker, membro do Grupo Kimball estabelecido por Ralph Kimball, recomenda omitir
uma chave substituta em uma tabela de fatos, mas reconhece que ela pode ser útil em
circunstâncias especiais, conforme descreve em seu artigo sobre o tema em
http: //www.kimballgroup .com/2006/07/design-tip-81-fact-table-surrogate-key/ .

 Chaves estrangeiras Uma coluna de chave estrangeira para cada tabela de dimensão
relacionada à tabela de fatos. Na tabela Venda, as seguintes colunas são colunas de chave
estrangeira para dimensões: Chave da cidade, Chave do cliente, Chave da cobrança ao cliente,
Chave do item de estoque, Chave da data da fatura, Chave da data de entrega e Chave do
vendedor. A combinação de chaves estrangeiras representa a granularidade , ou nível de
detalhe, da tabela de fatos.

 Dimensão degenerada Uma ou mais colunas opcionais em uma tabela de fatos que representa
um valor de dimensão que não está armazenado em uma tabela separada. Tecnicamente
falando, a coluna pode ser armazenada em uma tabela separada porque representa uma
“coisa”, como uma fatura que poderia ser objeto de análise. Muitas vezes, o valor em uma
dimensão degenerada é exclusivo em cada linha, como um identificador de fatura. Porém,
devido à cardinalidade entre a dimensão degenerada e a tabela de fatos, o modelo é mais
eficiente quando a dimensão degenerada faz parte da tabela de fatos. Em outras palavras,
nenhuma junção é necessária para unir duas tabelas potencialmente grandes. Um exemplo
desse tipo de coluna de dimensão degenerada na tabela de fatos de venda é a coluna ID da
fatura da Primeira Guerra Mundial.

Outro motivo para criar uma dimensão degenerada em uma tabela de fatos é otimizar os
relatórios para dados solicitados com frequência, evitando uma junção entre tabelas. Na
tabela de fatos de venda, as colunas Descrição e Pacote são exemplos desse outro tipo de
dimensão degenerada.

 Medida Uma ou mais colunas que contêm dados numéricos que descrevem um evento ou
processo de negócios. A tabela de fatos de venda apresenta vendas individuais, portanto,
cada linha contém as seguintes colunas de medida: Quantidade, Preço unitário, Taxa de
imposto, Total excluindo impostos, Valor do imposto, Lucro, Total incluindo impostos, Total
de itens secos e Total de itens do resfriador.

Às vezes, uma tabela de fatos não contém colunas de medidas. Nesse caso, é conhecida
como tabela de fatos sem fatos . Você pode usar uma tabela de fatos sem fatos quando
precisar contar ocorrências de um evento e não tiver outras medidas relacionadas ao
evento. Outro tipo de tabela de fatos sem fatos é uma tabela que serve como uma tabela-
ponte entre uma tabela de fatos e uma tabela de dimensão, conforme descrito na seção
“Modelo de dimensão muitos para muitos” neste capítulo.

 Linhagem ou chave de auditoria Uma coluna opcional em uma tabela de fatos, assim como o
mesmo tipo de coluna em uma tabela de dimensões. Na tabela Venda, Lineage Key é a coluna
de linhagem.
FIGURA 1-6 Tabela de fatos de vendas no banco de dados WideWorldImportersDW

Criação de projeto

Depois de ter um esquema em estrela implementado e carregado com dados, você está pronto para
criar um projeto no qual realizará o desenvolvimento de seu banco de dados multidimensional. Para
fazer isso, você usa o SSDT, para o qual há um link para a versão atual
em https://msdn.microsoft.com/en-us/library/mt204009.aspx .

Nota O local para download do SSDT está sujeito a alterações

De tempos em tempos, a Microsoft revisa o SSDT para atualizar e corrigir recursos. Se o link
referenciado não for mais válido, você poderá pesquisar SQL Server Data Tools for Visual Studio
em http://www.microsoft.com para localizá-lo e baixá-lo.

Para criar um novo projeto, execute as seguintes etapas:

1. No menu Arquivo, aponte para Novo e selecione Projeto.

2. Na caixa de diálogo Novo Projeto, selecione Analysis Services no grupo de modelos de


Business Intelligence e selecione Projeto Multidimensional e de Mineração de Dados do
Analysis Services.

3. Na parte inferior da caixa de diálogo, digite um nome para o projeto, selecione um local e,
opcionalmente, digite um novo nome para a solução do projeto. O projeto para os exemplos
neste capítulo é denominado 70-768-Ch1.

Nota Estrutura da solução no SSDT

Uma solução é um contêiner para um ou mais projetos. Por exemplo, você pode ter um projeto de
dados para definir suas estruturas de tabela, um projeto SSIS para executar as etapas de ETL, um
projeto Analysis Services para criar seu banco de dados multidimensional e um projeto Microsoft SQL
Server Reporting Services (SSRS) para desenvolver relatórios para exibir dados do seu banco de dados
multidimensional.

Desenvolvimento de fonte de dados

A próxima etapa é definir uma fonte de dados relacional para seu banco de dados
multidimensional. O SSAS oferece suporte às seguintes fontes de dados:

 Microsoft Access 2010 ou superior

 Microsoft SQL Server 2008 ou superior

 Banco de dados SQL do Microsoft Azure

 Armazém de dados SQL do Microsoft Azure

 Sistema de plataforma Microsoft Analytics

 Oracle 9i ou superior

 Teradata V2R6 ou V12

 Informix V11.10

 IBM DB2 8.1

 Sybase Adaptive Server Enterprise 15.0.2


 Uma fonte de dados acessível usando um provedor OLE DB

Nota Instalação do provedor de dados

Dependendo da fonte de dados que você está acessando, talvez seja necessário fazer download e
instalar o provedor de dados da fonte de dados em seu computador. A instalação do SSDT não instala
provedores de dados.

Para adicionar uma fonte de dados, execute as seguintes etapas:

1. Clique com o botão direito na pasta Fontes de Dados na janela Gerenciador de Soluções e
selecione Nova Fonte de Dados.

2. Clique em Avançar no Assistente de fonte de dados e clique em Novo na página Selecionar


como definir a conexão do assistente.

3. Na caixa de diálogo Gerenciador de Conexões, selecione um provedor de dados e forneça


detalhes de conexão para sua fonte de dados. Para seguir os exemplos neste capítulo, use o
provedor padrão, Native OLE DB\SQL Server Native Client 11.0. Digite o nome do servidor ou
digite um ponto final (.), (local) ou localhost se estiver executando o SSDT no mesmo
computador que o mecanismo de banco de dados do SQL Server. Se você tiver seu banco de
dados configurado para autenticação do SQL Server, selecione Autenticação do SQL Server na
lista suspensa Autenticação e forneça um nome de usuário e uma senha nas respectivas
caixas de texto. Por último, selecione WideWorldImportersDW na lista suspensa Selecionar ou
inserir um nome de banco de dados, conforme mostrado na Figura 1-7 .
FIGURA 1-7 Caixa de diálogo Connection Manager para uma fonte de dados

4. Clique em OK para fechar a caixa de diálogo Gerenciador de conexões, clique em Avançar no


Assistente de fonte de dados e escolha uma das seguintes opções para Informações de
representação, conforme mostrado na Figura 1-8, como autenticação para a fonte de dados:

 Usar nome de usuário e senha específicos do Windows Use esta opção quando precisar
se conectar à sua fonte de dados com um login específico. Uma prática recomendada
de segurança é estabelecer um login do Windows com privilégios baixos e que tenha
permissão de leitura para a fonte de dados. Quando você implanta a fonte de dados
no servidor, o SSAS criptografa a senha para protegê-la. Se posteriormente você
precisar criar um script do banco de dados, como acontece quando deseja migrar de
um servidor de desenvolvimento para um servidor de produção, você deverá fornecer
a senha novamente.
 Usar a conta de serviço Para seguir os exemplos deste capítulo, recomenda-se a
seleção desta opção. Com esta opção selecionada, a conta que executa o serviço
SSAS, que por padrão é NT Service\MSSQLServerOLAPService, é usada para conectar-
se à fonte de dados.

 Usar as credenciais do usuário atual Não selecione esta opção quando estiver
desenvolvendo um banco de dados multidimensional. Ele está incluído para dar
suporte à autenticação para consultas de mineração de dados.

 Herdar Esta opção usa as informações de representação configuradas para a


propriedade do banco de dados DataSourceImpersonationInfo. Suas opções incluem
Usar um nome de usuário e senha específicos do Windows, Usar a conta de serviço,
Usar as credenciais do usuário atual ou Padrão. Se estiver definido como Padrão, a
seleção Herdar no nível da fonte de dados usará a conta de serviço.

FIGURA 1-8 A página Informações de representação do Assistente de fonte de dados

5. Clique em Avançar no Assistente de Fonte de Dados, altere o valor do Nome da Fonte de


Dados se desejar e clique em Concluir.

Um novo arquivo é adicionado ao seu projeto, Wide World Importers DW.ds. Este arquivo,
como todos os outros arquivos que você adiciona ao seu projeto durante o processo de
desenvolvimento, é um arquivo Extensible Markup Language for Analysis (XMLA) que define o
objeto a ser criado no banco de dados multidimensional. Você pode visualizar o conteúdo de
qualquer arquivo XMLA clicando com o botão direito na janela Solution Explorer e
selecionando Exibir código.

Importante permissão de leitura para conta de representação

Você deve garantir que, independentemente da opção selecionada para representação, o login
aplicável receba a permissão de leitura no banco de dados de origem. Caso contrário, ao tentar criar o
banco de dados multidimensional no servidor SSAS posteriormente, você receberá uma mensagem
de erro. Se você configurar o processamento de write-back ou ROLAP conforme descrito no Capítulo
4, “Configurar e manter o SQL Server Analysis Services (SSAS)”, a conta usada também deverá ter
permissão de gravação.

Para configurar a permissão de leitura para a conta de serviço, abra o SQL Server Management Studio
(SSMS), conecte-se ao Mecanismo de Banco de Dados, expanda o nó Segurança no Pesquisador de
Objetos, clique com o botão direito no nó Logins e selecione Novo Login. Na caixa de diálogo Login,
digite NT SERVICE\MSSQLServerOLAPService na caixa de texto Nome de login. Clique na página
Mapeamento de usuário, marque a caixa de seleção WideWorldImportersDW na seção Usuários
mapeados para este logon da página e marque a caixa de seleção db_datareader na seção Associação
de função de banco de dados para: WideWorldImportersDW da página. Clique em OK para adicionar
o login.

Design de visualização da fonte de dados

A definição da fonte de dados define onde os dados estão localizados e como autenticar, mas não
especifica quais dados usar para carregar objetos de banco de dados, como dimensões e
cubos. Uma visualização da fonte de dados (DSV) é a definição, que identifica as tabelas e colunas
específicas nas tabelas a serem usadas ao preencher o banco de dados multidimensional. É também
uma camada de abstração útil quando você tem permissão apenas de leitura no banco de dados de
origem ou quando precisa de uma visão simplificada de suas estruturas. Você pode fazer alterações
lógicas nas tabelas e visualizações no DSV para dar suporte a requisitos específicos no SSAS sem a
necessidade de alterar a fonte de dados física. De modo geral, você deve tentar alterar a fonte de
dados física conforme necessário sempre que possível, pois a implementação de alterações lógicas no
DSV pode introduzir desafios na manutenção contínua, além do processo de solução de problemas.

Para criar um DSV, execute as seguintes etapas:

 Clique com o botão direito na pasta Data Source Views no Solution Explorer e selecione New
Data Source View.

 No Assistente de Exibição de Fonte de Dados, clique em Avançar, selecione a fonte de dados


que você criou para o projeto na seção anterior e clique em Avançar.

 Em seguida, enquanto pressiona a tecla CTRL, selecione as seguintes tabelas na lista Objetos
Disponíveis:

 Cidade (Dimensão)

 Cliente (Dimensão)

 Data (Dimensão)

 Funcionário (Dimensão)
 Item de estoque (dimensão)

 Venda (fato)

 Em seguida, clique na seta para a direita (>) para adicionar as tabelas selecionadas à lista
Objetos incluídos.

 Clique em Avançar e em Concluir para concluir o assistente. Um novo arquivo, Wide World
Importers DW.dsv, é adicionado ao projeto e o Data Source View Designer é aberto como
uma janela de documento no SSDT, conforme mostrado na Figura 1.9 .

FIGURA 1-9 Uma visualização da fonte de dados

Quando as tabelas de origem possuem chaves primárias e relacionamentos de chaves estrangeiras


definidos, que é a situação ideal, o DSV as inclui. Se você estiver trabalhando com um esquema em
estrela bem definido, o DSV provavelmente não exigirá nenhuma modificação.

Se uma chave primária não estiver definida em uma tabela de dimensão, seja por design ou porque o
objeto de origem é uma exibição, você poderá adicionar uma chave lógica clicando com o botão
direito do mouse no nome da coluna no diagrama da tabela ou no painel Tabelas e selecionando
Defina a chave primária lógica. Este comando não está disponível quando já existe uma chave para a
tabela. Se você pressionar a tecla CTRL e selecionar várias colunas, poderá configurar uma chave
composta como chave primária lógica.
Para criar um relacionamento entre tabelas, como entre uma tabela de fatos e uma tabela de
dimensões, clique na coluna de chave estrangeira na tabela de fatos e arraste-a para a coluna de
chave primária na tabela de dimensões. As duas colunas devem ter o mesmo tipo de dados antes de
você poder criar o relacionamento. A definição de relacionamentos não é obrigatória, mas é útil
porque o SSDT pode fazer recomendações ou configurar automaticamente determinados objetos
com base nos relacionamentos DSV que detecta.

A estrutura do DSV é importante para o desenvolvimento de objetos de dimensão e cubo à medida


que você continua construindo seu banco de dados multidimensional. Para satisfazer requisitos
estruturais específicos para etapas de desenvolvimento subsequentes ou para simplificar um esquema
em estrela, é possível fazer qualquer uma das seguintes alterações no DSV:

 Renomear objetos Ao renomear tabelas e colunas no DSV, os assistentes usados para criar
objetos para o banco de dados refletem os novos nomes, que devem ser um nome
amigável. Embora seja possível renomear posteriormente um objeto criado por um assistente
a qualquer momento, às vezes você pode fazer referência ao mesmo objeto DSV diversas
vezes e minimizar o número de alterações de nome necessárias em outras partes do projeto.

 Criar um cálculo nomeado A adição de um cálculo nomeado a um DSV é como adicionar uma
expressão a uma instrução SELECT para adicionar uma coluna derivada a uma
visualização. Idealmente, quando você precisar de dados estruturados de uma maneira
específica para SSAS, projete a tabela de origem para incluir essa estrutura ou crie uma
visualização. Um motivo comum para reestruturar dados é concatenar colunas, como pode
ser necessário fazer com as colunas Nome e Sobrenome para criar uma coluna para o nome
de uma pessoa.

Se você não conseguir fazer a alteração na origem, crie um cálculo nomeado no DSV clicando
com o botão direito do mouse no cabeçalho da tabela a ser atualizada e selecionando Novo
Cálculo Nomeado. Na caixa de diálogo Criar cálculo nomeado, digite um nome na caixa
Nome da coluna, opcionalmente digite uma descrição para o cálculo na caixa Descrição e
digite uma expressão SQL (Structured Query Language) específica da plataforma para a nova
coluna na caixa Expressão. caixa. Não há validação da expressão quando você clica em OK
para fechar a caixa de diálogo, portanto, teste primeiro sua expressão em uma ferramenta de
consulta. Você usa a sintaxe aplicável à versão do SQL aplicável à sua fonte de dados, como
Transact-SQL quando sua fonte de dados é SQL Server.

 Criar uma consulta nomeada Uma consulta nomeada em um DSV é o equivalente lógico de
uma visualização em um banco de dados relacional. Ao contrário de um cálculo nomeado,
que é limitado a uma expressão SQL, uma consulta nomeada é uma instrução SELECT. Você
pode usá-lo para reduzir o número de colunas de uma tabela para simplificar o DSV, criar
novas colunas usando expressões SQL ou unir tabelas para simplificar as estruturas de dados
no DSV e evitar um design em floco de neve. Você pode encontrar exemplos de adição de
consultas nomeadas ao DSV na Habilidade 1.2, “Projetar e implementar dimensões em um
cubo”, e na Habilidade 1.3, “Implementar medidas e grupos de medidas em um cubo”.

Desenvolva uma dimensão

Uma dimensão em um cubo é baseada em uma ou mais tabelas de dimensões em um esquema em


estrela. A Habilidade 1.2 detalha as diversas opções que você deve considerar ao desenvolver
diferentes tipos de modelos de dimensão no SSAS. Independentemente do tipo de modelo, o
processo de desenvolvimento para todas as dimensões começa executando as mesmas etapas
explicadas nesta seção.
Vamos revisar o processo básico de desenvolvimento da dimensão adicionando a dimensão Cidade
ao projeto de banco de dados atual. Para isso, execute as seguintes etapas:

1. Clique com o botão direito na pasta Dimensões no Solution Explorer e clique em Nova
Dimensão.

2. No Assistente de Dimensões, clique em Avançar na primeira página e, na página Selecionar


Método de Criação, escolha a opção Usar uma Tabela Existente. Clique em Avançar.

Nota Outros métodos de criação de dimensão

A página Selecionar Método de Criação do Assistente de Dimensão também permite que


você escolha uma das seguintes alternativas para a opção padrão: Gerar uma tabela de
horário na fonte de dados, Gerar uma tabela de horário no servidor ou Gerar uma tabela não
temporal na fonte de dados. Fonte de dados. Essas opções são usadas com mais frequência
quando você desenvolve um protótipo de banco de dados multidimensional e não construiu
as tabelas de origem do esquema em estrela. Se você estiver interessado em aprender mais
sobre essas opções, consulte “Selecionar método de criação (assistente de dimensão)”
em https://msdn.microsoft.com/en-us/library/ms178681.aspx .

3. Na página Especificar Informações de Origem do assistente, selecione o nome da tabela que


contém o nível de detalhe mais granular para uma dimensão na lista suspensa Tabela
Principal. Para o exemplo atual, selecione Cidade. Quando o DSV é projetado corretamente, a
coluna-chave na tabela de origem é exibida automaticamente na lista Colunas-chave. A
seleção de uma coluna de nome, como Cidade, conforme mostrado na Figura 1.10 , é
opcional, mas recomendada quando a coluna-chave é uma chave substituta.
FIGURA 1-10 Página Especificar informações de origem do Assistente de dimensão

Se você seguir os princípios adequados de projeto de modelagem dimensional, conforme


descrito na seção “Projeto da tabela de origem” anteriormente neste capítulo, sua coluna-
chave será um valor inteiro. Se você não especificar uma coluna de nome durante o
desenvolvimento da dimensão, os usuários corporativos verão o valor da coluna-chave da
dimensão ao explorar um cubo, o que não tem significado para eles. A Coluna Nome deve ser
definida como uma coluna na tabela de dimensões que contém um valor significativo. Ao
contrário da coluna chave, que pode ser uma chave composta, a coluna nome deve fazer
referência a uma única coluna. Se necessário, você pode usar um cálculo nomeado ou uma
consulta nomeada para combinar valores de uma coluna múltipla em uma coluna.

4. Clique em próximo para continuar. Na página Selecionar Atributos de Dimensão do Assistente


de Dimensão, observe a seleção existente da caixa de seleção Chave da Cidade e marque a
caixa de seleção para as seguintes colunas de atributos, conforme mostrado na Figura 1-11 :

 Província Estadual

 País

 Continente

 Território de vendas

 Região
 Sub-região

 Última população registrada

FIGURA 1-11 Página Selecionar Atributos de Dimensão do Assistente de Dimensão

Nota Opções adicionais na página Selecionar Atributos de Dimensão do Assistente de Dimensão

Para cada atributo na página Selecionar Atributos de Dimensão do Assistente de Dimensão,


você pode marcar a caixa de seleção Habilitar Navegação ou alterar o valor na lista suspensa
Tipo de Atributo. Para o exemplo atual, você pode aceitar as configurações padrão. Ao
desenvolver seu próprio banco de dados multidimensional, você pode decidir se deseja
alterar os padrões aqui ou definir as propriedades correspondentes na definição da dimensão
conforme descrito na Habilidade 1.2. Selecionar a caixa de seleção Ativar navegação altera a
propriedade AttributeHierarchyEnabled da dimensão para False, enquanto alterar a seleção da
lista suspensa Tipo de atributo atualiza a propriedade Type do atributo.

Quando os usuários empresariais analisam dados usando um modelo multidimensional, eles


usam atributos principalmente para agrupar valores agregados em um relatório ou para filtrar
valores, conforme mostrado na Figura 1-12 . Neste exemplo, o SSAS calcula a soma da
medida Valor de vendas com impostos para cada membro do atributo Estado-Província que
aparece nas linhas. Um membro de atributo é um valor distinto da coluna de origem associada
ao atributo. A Figura 1.12 mostra membros de atributos para o atributo Estado-Província,
como Alasca, Califórnia e assim por diante. Acima do conjunto de membros da Província do
Estado, você pode ver um filtro aplicado com base em outro atributo, Território de
Vendas. Especificamente, o filtro usa o membro Far West do atributo Sales Territory. O SSAS
ignora os valores de qualquer membro de atributo de Província de Estado que não esteja
relacionado ao Território de Vendas de Far West e elimina esses membros de atributo dos
resultados da consulta.

FIGURA 1-12 Membros de atributos usados para agrupamento e filtragem agregada

Conforme explicado anteriormente na seção “Design da tabela de origem”, uma tabela de


dimensão pode incluir colunas que nunca são usadas para análise, como as colunas Válido de
e Válido até na tabela de dimensão Cidade. Estas colunas são utilizadas para gerenciar dados
históricos no processo ETL, mas não são úteis para análise de negócios e, portanto, são
normalmente excluídas da dimensão no projeto SSAS.

5. Para concluir o assistente, clique em Avançar e em Concluir. O arquivo City.dim é adicionado


ao projeto e a janela do designer de dimensão é exibida no SSDT, conforme mostrado
na Figura 1-13 . Os atributos selecionados no assistente agora aparecem no painel Atributos
da página Estrutura da Dimensão do designer de dimensão. Além disso, um diagrama da
tabela de origem é exibido no painel Exibição da Fonte de Dados. Depois de desenvolver um
cubo para o banco de dados multidimensional, você poderá adicionar essa dimensão recém-
criada a esse cubo. No entanto, pode haver etapas adicionais a serem executadas como parte
do processo de desenvolvimento da dimensão para satisfazer requisitos de análise
específicos, conforme descrito a seguir e posteriormente na Habilidade 1.2.
FIGURA 1-13 Designer de dimensão para cidade

Ao criar uma dimensão e, em seguida, navegar pelos membros da dimensão, ocasionalmente, aparece
um membro chamado Desconhecido que não existe na tabela de origem. A adição deste membro a
uma dimensão é um recurso do SSAS que acomoda problemas de qualidade de dados em uma tabela
de fatos. O membro desconhecido criado pelo SSAS não corresponde a uma linha na tabela de
dimensões, mas serve como um depósito para valores para os quais uma chave na coluna de chave
estrangeira na tabela de fatos está ausente ou é inválida. Dessa forma, quando as consultas calculam
os totais de uma medida, todas as linhas da tabela de fatos são incluídas (após a aplicação dos
agrupamentos e filtros aplicáveis), mesmo quando não podem ser correspondidas aos membros de
dimensão existentes.

A adição do membro gerado pelo SSAS é determinada pelo valor da propriedade UnknownMember
para uma dimensão, que você pode acessar na janela Propriedades na página Estrutura da Dimensão
do designer de dimensão após selecionar o objeto de dimensão no painel Atributos. O membro será
adicionado se o valor da propriedade UnknownMember for Visível ou Oculto. De qualquer forma, os
valores totais gerais de uma dimensão mostram o valor agregado correto para uma tabela de
fatos. Quando esta propriedade estiver definida como Visível e sua consulta incluir os membros da
dimensão nos resultados, você poderá ver o valor agregado das linhas da tabela de fatos com uma
chave ausente ou incorreta para essa dimensão atribuída ao membro Desconhecido. Quando esta
propriedade é definida como Oculto, o membro Desconhecido não é exibido nos resultados da
consulta, embora o total geral inclua corretamente seus valores. No entanto, ocultar o membro
Desconhecido pode ser confuso para os usuários corporativos, que podem perceber que a agregação
de membros visíveis não é igual ao total geral. Por esse motivo, não é considerada prática
recomendada ocultar o membro Desconhecido.

Importante trabalhar com o membro desconhecido

Na prática do mundo real, o seu processo ETL deve impedir a inserção de uma linha em uma tabela
de fatos se um membro da dimensão ainda não existir. Se você revisar as tabelas de dimensão no
banco de dados WideWorldImportersDW, poderá ver um membro Desconhecido com uma chave
substituta de 0 em cada tabela. A adição de um membro Desconhecido a uma dimensão é uma
prática comum para lidar com problemas de qualidade de dados. Ao gerenciar membros de dimensão
ausentes para dados de fatos no processo ETL, você deve remover o membro Desconhecido gerado
pelo SSAS. Para fazer isso, defina o valor da propriedade UnknownMember como Nenhum.

Dica de exame

Esteja preparado para responder perguntas sobre como trabalhar com o Membro Desconhecido no
exame. Para obter mais análises sobre este tópico, consulte “Definindo o membro desconhecido e as
propriedades de processamento nulo” em https://msdn.microsoft.com/en-us/library/ms170707.aspx .

Na Habilidade 1.2, revisamos cenários de uso específicos que exigem etapas adicionais de
desenvolvimento. Enquanto isso, como prática geral para todas as dimensões que você desenvolve,
você deve avaliar quais das seguintes tarefas são necessárias, se houver alguma:

 Renomear objetos Por exemplo, observe no painel Atributos que há um ícone de chave
próximo a Chave da Cidade para designá-lo como o atributo chave. Em outras palavras, este é
o atributo referenciado na tabela de fatos. No Assistente de Dimensão, você especificou City
Key como a coluna-chave e City como a coluna de nome. O nome do atributo é herdado do
nome da coluna-chave. Nesse caso, o nome City Key não é fácil de usar porque muitos
usuários empresariais podem não entender o que Key significa. De modo mais geral,
considere evitar termos técnicos e nomear objetos usando espaços incorporados, letras
maiúsculas e termos comerciais para criar objetos fáceis de usar. Para renomear uma
dimensão ou atributo, selecione-o no painel Atributos. Você pode clicar com o botão direito
do mouse no objeto, selecionar Renomear e digitar o novo nome ou substituir a propriedade
Nome no painel Atributos. Neste caso, renomeie o atributo City Key para City.

 Alterar a ordem de classificação Cada membro do atributo possui uma propriedade OrderBy
que define a ordem de classificação padrão que determina a organização dos membros do
atributo em um grupo, como quando você exibe muitos membros do atributo em linhas em
uma tabela dinâmica. Na maioria dos casos, os membros do atributo são exibidos em ordem
alfabética, mas você pode substituir esse comportamento se tiver uma coluna com valores
que definam uma ordem de classificação alternativa. Você pode escolher um dos seguintes
valores para a propriedade OrderBy.

 Chave Este valor é o padrão para cada atributo, exceto o atributo chave se você
atribuiu a ele uma coluna de nome no Assistente de Dimensão porque cada atributo
sempre possui uma coluna de chave, mas opcionalmente possui uma coluna de
nome. A ordem de classificação será alfabética se a coluna-chave for um tipo de
dados de string (Char ou WChar) ou numérica se o tipo de dados da coluna-chave
não for uma string.

Nota Classificação por chave composta


Lembre-se de que um atributo pode ter uma chave composta baseada em múltiplas
colunas. Esse recurso pode ser usado com vantagem para fins de classificação. Na
Habilidade 1.2, você aprenderá como usar chaves compostas não apenas para
gerenciar a exclusividade dos membros de atributos na dimensão Data, mas também
para controlar a ordem de classificação desses membros.

 Nome A ordem de classificação é definida como Nome para o atributo chave por
padrão quando você especifica uma coluna de nome no Assistente de
Dimensão. Qualquer atributo em uma dimensão pode ter colunas separadas
atribuídas como coluna-chave ou coluna de nome, portanto, você pode definir a
ordem de classificação com base na coluna de nome, se for esse o caso.

 AttributeKey Você também pode definir a ordem de classificação de um atributo com


base no valor da coluna chave de outro atributo, mas somente se existir um
relacionamento de atributo (descrito na Habilidade 1.2) entre os dois atributos. Por
exemplo, em uma dimensão Conta, você pode ter um atributo Nome da conta que
deseja classificar pelo atributo Número da conta relacionado, em vez de em ordem
alfabética pelo nome da conta.

 AttributeName Esta opção é semelhante à ordem de classificação AttributeKey, exceto


que a ordem é baseada na coluna de nome do atributo relacionado em vez da coluna
de chave.

 Converter um atributo em uma propriedade de membro Uma propriedade de membro é um


atributo que não é usado em uma tabela dinâmica para posicionamento em linhas ou colunas
ou como um filtro de tabela dinâmica, mas é usado para fins de relatório. Por exemplo, você
pode exibir as vendas por cliente e incluir o número de telefone de cada cliente em um
relatório, mas normalmente não mostraria as vendas por número de telefone. Você também
pode usar uma propriedade de membro como filtro em uma consulta MDX ad hoc.

Na dimensão Cidade, altere a propriedade AttributeHierarchyEnabled para False para o


atributo Latest Recorded Population para convertê-lo em uma propriedade de membro. Ao
fazer isso, o atributo não é exibido com os outros atributos em aplicativos clientes, embora
você ainda possa referenciá-lo em consultas MDX. Sua disponibilidade para uso em relatórios
depende da ferramenta. Por exemplo, você pode exibir uma propriedade de membro como
uma dica de ferramenta ao passar o cursor sobre um atributo relacionado em uma tabela
dinâmica do Microsoft Excel.

 Agrupar membros de atributos em intervalos Um recurso menos comumente usado, mas não
menos importante, do SSAS é sua capacidade de dividir um grande conjunto de membros de
atributos em intervalos discretos. Por exemplo, se você tiver 100.000 clientes, será
impraticável para um usuário adicionar todos os clientes de uma vez a uma tabela
dinâmica. Em vez disso, você pode configurar o SSAS para criar grupos de clientes definindo
as propriedades DiscretizationBucketCount e DiscretizationMethod.

Observe a configuração de discretização

Você pode encontrar uma discussão completa sobre como configurar as propriedades de
discretização por Scott Murray em “Discretização do SQL Server Analysis Services”
em https://www.mssqltips.com/sqlservertip/3155/sql-server-análise-services-discretization/ .

 Adicionar traduções As organizações globais podem criar um único banco de dados


multidimensional e depois adicionar traduções para exibir legendas para dimensões e
atributos específicos da localidade de um usuário. Opcionalmente, você também pode
vincular um atributo a colunas que contêm nomes de membros de atributos traduzidos.

Dica de exame

O banco de dados WideWorldImportersDW não inclui traduções, portanto você não pode explorar
esse recurso no banco de dados multidimensional que está construindo para este capítulo. No
entanto, é provável que o exame teste seus conhecimentos sobre o assunto. Para saber mais sobre
como adicionar definições de tradução, consulte “Traduções em modelos multidimensionais (Analysis
Services)” em https://msdn.microsoft.com/en-us/library/hh230908.aspx e “Definindo e navegando por
traduções” em https:/ /msdn.microsoft.com/en-us/library/ms166708.aspx . As traduções aplicam-se
não apenas às dimensões, mas também às legendas dos cubos, conforme descrito no artigo Microsoft
Developer Network (MSDN).

Você pode ver exemplos de uso de traduções se explorar o modelo multidimensional


AdventureWorks para o qual você pode encontrar um link de download e um arquivo LeiaMe que
inclui instruções de instalação em “Adventure Works 2014 Sample Databases”
em http://msftdbprodsamples.codeplex.com/releases /visualizar/125550 .

Uma prática recomendada em programação é construir o código uma vez e depois referenciá-lo
várias vezes. Você pode pensar que existe uma prática recomendada semelhante no SSAS. Digamos
que você tenha vários servidores SSAS configurados em sua empresa para dar suporte a diferentes
departamentos e hospedar diferentes bancos de dados multidimensionais em cada servidor. Se você
seguir as práticas recomendadas de modelagem dimensional, terá dimensões conformadas em seu
datamart. Ou seja, você tem tabelas de dimensões relacionadas a diferentes tabelas de fatos, como
uma dimensão Data que é comum a todas as análises. Se você construir uma dimensão de data para
uso em um banco de dados multidimensional, por que não usar o mesmo objeto de dimensão no
outro banco de dados multidimensional? O SSAS permite adicionar uma dimensão vinculada a outro
banco de dados multidimensional para que você tenha apenas uma dimensão para construir e
manter. No entanto, o uso de dimensões vinculadas não é considerado uma prática recomendada no
desenvolvimento de SSAS porque pode introduzir problemas de desempenho em cubos grandes.

Nota Dimensões vinculadas e práticas alternativas de desenvolvimento

Outra maneira de pensar em construir uma vez e reutilizar seu trabalho de desenvolvimento é salvar
os arquivos .dim no controle de origem. Você pode então exigir que novos projetos de banco de
dados multidimensionais adicionem arquivos .dim do controle de origem, em vez de criar uma nova
dimensão diretamente. Dessa forma, você pode manter o projeto em um local central e se beneficiar
da capacidade de reutilização sem introduzir possíveis problemas de desempenho.

Se você ainda quiser saber mais sobre como trabalhar com dimensões vinculadas, consulte “Definir
dimensões vinculadas” em https://msdn.microsoft.com/en-us/library/ms175648.aspx .

Desenvolva um cubo

Um cubo é o objeto que os usuários empresariais exploram ao interagir com um banco de dados
multidimensional. Ele combina dados de medidas de tabelas de fatos com dados de dimensão. No
mínimo, você associa uma única tabela de fatos a um cubo, embora seja comum associar diversas
tabelas de fatos a um cubo.
Assim como o desenvolvimento de dimensão, o desenvolvimento de cubo começa com o uso de um
assistente. Para adicionar um cubo ao seu projeto, execute as seguintes etapas:

1. Inicie o Cube Wizard clicando com o botão direito na pasta Cubes no Solution Explorer e
selecionando New Cube.

2. Clique em Avançar na primeira página do assistente, mantenha a opção padrão Usar tabelas
existentes e clique em Avançar.

Nota Outros métodos de criação de cubo

A página Selecionar Método de Criação do Assistente de Cubo também permite escolher uma
das seguintes alternativas para a opção padrão: Criar um Cubo Vazio ou Gerar Tabelas na
Fonte de Dados. Assim como os métodos de criação de dimensão, essas opções adicionais
normalmente são usadas quando você desenvolve um protótipo de banco de dados
multidimensional e ainda não tem as tabelas de origem do esquema em estrela
disponíveis. Para saber mais sobre essas opções, consulte “Selecionar método de criação
(Assistente de cubo)” em https://msdn.microsoft.com/en-us/library/ms187975.aspx .

3. Na página Selecionar Tabelas de Grupo de Medidas do assistente, selecione uma tabela de


fatos, como Venda, e clique em Avançar. No SSAS, uma tabela de grupo de medidas é
sinônimo de tabela de fatos. A razão para um termo mais genérico é devido à capacidade de
criar um grupo de medidas a partir de qualquer tipo de tabela, desde que contenha linhas
que possam ser contadas. Portanto, pense num grupo de medidas como um contêiner de
medidas.

4. Na página Selecionar Medidas do Assistente de Cubo, somente colunas com um tipo de


dados numérico na tabela de fatos são exibidas. Desmarque cada caixa de seleção que você
não deseja usar para análise, como WWI Invoice ID e Lineage Key neste exemplo, conforme
mostrado na Figura 1-14 . Observe a inclusão de Sale Count, que não é uma coluna na tabela
de fatos. O SSAS sugere esta coluna porque contar o número de linhas em uma tabela de
fatos e agrupar o resultado por atributos de dimensão é um requisito comercial comum. Você
pode desmarcar a caixa de seleção dessa medida derivada se ela não for necessária em seu
próprio projeto.
FIGURA 1-14 Página Selecionar Medidas do Assistente de Cubo

5. Clique em Avançar para continuar na página Selecionar Dimensões Existentes do


assistente. Conforme mostrado na Figura 1-15 , esta página exibe as dimensões que existem
atualmente no projeto.
FIGURA 1-15 Página Selecionar Dimensões Existentes do Assistente de Cubo

Uma abordagem de desenvolvimento comum é construir uma dimensão, construir um cubo,


implantar o projeto e depois revisar os resultados. (A solução de quaisquer problemas que
surjam é mais fácil quando você implanta um objeto por vez.) Em seguida, você continua
iterativamente definindo outra dimensão, adicionando-a ao cubo, implantando o projeto e,
em seguida, revisando as alterações.

No entanto, você pode decidir definir diversas dimensões primeiro. Se fizer isso, você verá as
dimensões disponíveis listadas aqui e poderá incluí-las ou excluí-las conforme necessário ao
usar o Assistente de Cubo. Por outro lado, ao criar dimensões após concluir o Assistente de
Cubo, você segue diferentes etapas para adicioná-las ao cubo, conforme explicado na
Habilidade 1.2.

6. Clique em Avançar e, na página Selecionar Novas Dimensões do assistente, desmarque todas


as caixas de seleção, conforme mostrado na Figura 1.16 , para continuar o exemplo atual no
qual você está desenvolvendo um cubo simples com uma dimensão. Você pode fazer isso em
uma única etapa, desmarcando a caixa de seleção Dimensão na parte superior da página.
FIGURA 1-16 Página Selecionar Novas Dimensões do Assistente de Cubo

O objetivo desta página no assistente é identificar tabelas de dimensões para as quais existe
um relacionamento com a tabela ou tabelas de fatos selecionadas para o cubo. Se você
mantiver uma tabela selecionada nesta página, o Cube Wizard criará uma dimensão básica
para essa tabela e a adicionará ao projeto como um novo arquivo .dim. Você pode então
configurar as propriedades da dimensão conforme necessário para atender aos seus
requisitos de análise.

7. Para finalizar o assistente, clique em Avançar e, em seguida, clique em Concluir para incluir o
arquivo Wide World Importers DW.cube no projeto e exibir o designer de cubo como uma
janela SSDT.

8. Expanda Venda no painel Medidas da página Estrutura do Cubo do designer de cubo para ver
todas as medidas adicionadas ao cubo, conforme mostrado na Figura 1-17 .
FIGURA 1-17 Designer de cubo

O designer de cubo também inclui um painel Dimensões que exibe a única dimensão incluída
no cubo, Cidade. Além disso, o painel Visualização da Fonte de Dados exibe um diagrama da
tabela de fatos, exibida com um cabeçalho amarelo, e a tabela de dimensões relacionada,
exibida com um cabeçalho azul.

Avisos importantes de design

Sempre que você vir um sublinhado azul ondulado em um designer, poderá passar o cursor sobre ele
para visualizar o texto de um aviso de design. Nesse caso, o cubo no painel Medidas e Dimensões
está associado ao mesmo aviso: Evite cubos com uma única dimensão. Existem avisos de design para
alertá-lo sobre possíveis problemas que podem afetar o desempenho ou a usabilidade. Por ser apenas
um aviso, você poderá criar seu banco de dados multidimensional com êxito se ignorar o aviso. À
medida que você ganha experiência no desenvolvimento de modelos multidimensionais, você pode
determinar quais avisos você deve abordar e quais ignorar caso a caso. Para obter mais informações
sobre como trabalhar com avisos de design, consulte “Avisos (Database Designer) (Analysis Services-
Multidimensional Data)” em https://msdn.microsoft.com/en-us/library/bb677343.aspx .

Crie um banco de dados multidimensional

Neste ponto, você criou as definições de uma fonte de dados, uma visualização de fonte de dados,
uma dimensão e um cubo, que existem apenas no contexto de um projeto, mas o banco de dados
ainda não existe no servidor e ninguém pode explore o cubo até que isso aconteça. Para criar o banco
de dados no servidor, você deve implantar o projeto do SSDT. Para garantir a implantação do projeto
no servidor correto, revise e, se necessário, atualize as propriedades do projeto. Para fazer isso, clique
com o botão direito no nome do projeto no Solution Explorer e selecione Propriedades. Na caixa de
diálogo 70-768-Ch1 Property Pages, selecione a página Deployment, conforme mostrado na Figura 1-
18 , e atualize a caixa de texto Server com o nome do seu servidor SSAS se precisar implantar em um
servidor remoto em vez de localmente.

FIGURA 1-18 Propriedades de implantação do projeto SSAS

As seguintes opções de implantação adicionais também estão disponíveis nesta página:

 Opção de processamento O valor padrão é Padrão, que avalia o estado processado de cada
objeto na solução e executa as etapas necessárias para colocar o objeto em um estado
processado quando você implanta o projeto. Você pode alterar esse valor para Não processar
se desejar instruir manualmente o servidor a processar objetos como uma etapa separada ou
Completo se desejar que o banco de dados seja processado completamente sempre que você
implantar seu projeto a partir do SSDT. Por enquanto, o valor padrão é suficiente para
trabalhar nos exemplos deste capítulo. No Capítulo 4, essas opções de processamento são
descritas com mais detalhes.

 Implantação Transacional O valor padrão é False, o que significa que a implantação não é
transacional. Nesse caso, a implantação poderá ser bem-sucedida, mas o processamento
poderá falhar. Escolha True se desejar reverter a implantação se o processamento falhar.

 Modo Servidor O valor padrão é Implantar somente alterações, que implanta apenas objetos
do seu projeto que ainda não existem no servidor ou que são diferentes daqueles no
servidor. Esta opção é mais rápida que a opção Implantar tudo, que implanta todos os objetos
do seu projeto no servidor.
Quando estiver pronto para criar o banco de dados no servidor, clique com o botão direito do mouse
no projeto no Solution Explorer e selecione Implantar. Na primeira vez que você executar esta etapa, o
processo de implantação criará o banco de dados no servidor e adicionará todos os objetos definidos
no projeto. Cada vez subsequente que você implantar o projeto, desde que você tenha mantido as
opções de implantação padrão nas propriedades do projeto, o processo de implantação preservará o
banco de dados existente e adicionará quaisquer novos objetos de banco de dados e atualizará
quaisquer objetos de banco de dados modificados no projeto .

Você pode confirmar a criação do banco de dados multidimensional abrindo o SSMS e conectando-se
ao Analysis Services. No Object Explorer, expanda a pasta Databases para visualizar os bancos de
dados existentes e, em seguida, expanda as subpastas para ver os objetos atualmente no banco de
dados, conforme mostrado na Figura 1-19 .

Objetos de banco de dados multidimensionais visíveis no SQL Server Management Studio


FIGURA 1-19
Object Explorer

Agora o cubo está pronto para ser explorado usando qualquer ferramenta compatível com SSAS,
como Excel, Microsoft Power BI Desktop ou SSRS, mas ainda não está tão bem configurado quanto
poderia estar. Há mais dimensões e tabelas de fatos para adicionar, bem como muitas alterações de
configuração na dimensão e no cubo a serem consideradas e implementadas, que você aprenderá nas
Habilidades 1.2 e 1.3.

Banco de dados de exemplo importante concentra-se em tópicos de exames

O restante deste capítulo descreve muitas outras tarefas que você executa durante o desenvolvimento
de um banco de dados multidimensional. Algumas dessas tarefas são sempre necessárias, enquanto
outras dependem dos requisitos do negócio. Se você seguir todas as etapas descritas neste capítulo
para produzir o banco de dados multidimensional 70-768-Ch1, o banco de dados resultante não será
tão completo quanto poderia ser e, em alguns casos, é planejado para demonstrar uma técnica
porque seu objetivo é ilustrar os tópicos que você deve entender para o exame. Levar o banco de
dados multidimensional de exemplo ao seu melhor estado está fora do escopo deste livro.

Para seus próprios projetos, explore o cubo minuciosamente e incentive os usuários corporativos a
ajudá-lo a testar os resultados. Comece revisando as convenções de nomenclatura de dimensões,
atributos, hierarquias, grupos de medidas e medidas. Certifique-se de que os membros do atributo
sejam classificados em uma sequência que faça sentido para seus usuários. Verifique os valores
agregados à medida que você divide os dados usando diversas combinações de dimensões e
atributos e compare esses valores com consultas SQL comparáveis na fonte de dados.

Selecione um modelo de armazenamento

O modelo de armazenamento selecionado para seu modelo multidimensional determina o tipo de


dados que o SSAS armazena e como ele armazena fisicamente esses dados no disco. O SSAS oferece
suporte aos seguintes modelos de armazenamento:

 OLAP multidimensional (MOLAP)

 OLAP relacional (ROLAP)

 OLAP Híbrido (HOLAP)

Independentemente do modelo de armazenamento selecionado, os dados do cubo são sempre


armazenados separadamente dos dados de dimensão. Além disso, você pode especificar um modelo
de armazenamento diferente para dados de cubo e para dados de dimensão. Você pode até separar
os dados do cubo em diversas partições, cada uma usando um modelo de armazenamento
diferente. Por enquanto, considere qual modo de armazenamento é mais apropriado para suas
necessidades em geral. No Capítulo 4, você aprenderá os motivos pelos quais você pode configurar
diferentes modelos de armazenamento para partições e como implementar modelos de
armazenamento por partição.

Dica de exame

Esteja preparado para responder perguntas do exame relacionadas à seleção de um modelo de


armazenamento apropriado para um cenário específico. Além disso, revise as informações no Capítulo
4 para entender como o cache proativo afeta a latência dos dados.

MOLAP

MOLAP é o modo de armazenamento padrão. De modo geral, também é o modo de armazenamento


preferido, a menos que você tenha requisitos específicos que apenas um dos outros dois modos de
armazenamento pode atender, pois tem desempenho mais rápido. Por outro lado, requer mais
espaço de armazenamento.

O armazenamento MOLAP compacta dados e os distribui em disco com mais eficiência do que outros
modelos de armazenamento, mas também requer mais tempo para processar dados. Quando o SSAS
processa dados para armazenamento MOLAP, ele usa o DSV para gerar as instruções SQL necessárias
que recuperam dados da fonte relacional, reestrutura os resultados para armazenamento em disco em
um formato proprietário e, em seguida, calcula e armazena agregações para medidas, conforme
mostrado em Figura 1-20 . As agregações serão calculadas somente se você tiver definido regras de
agregação conforme descrito no Capítulo 4. Quando o SSAS recebe uma solicitação de dados de uma
consulta de Expressão Multidimensional (MDX), ele obtém os dados agregados ou dados detalhados
no armazenamento MOLAP para preparar os resultados.

FIGURA 1-20 Armazenamento MOLAP

Nota Recuperação de dados para consultas MDX

Mais precisamente, o SSAS recupera dados do armazenamento MOLAP se os dados não estiverem na
memória. O SSAS usa armazenamento em disco e cache para gerenciar dados multidimensionais. Para
fins de modelos de armazenamento contrastantes, suponha que os dados para uma consulta não
estejam disponíveis na memória e devam ser recuperados do modelo de armazenamento aplicável. O
Capítulo 4 se aprofunda na mecânica do processamento de consultas, explicando a relação entre
armazenamento em disco e cache.

ROLAP

Com o armazenamento ROLAP, o SSAS não recupera dados da fonte relacional durante o
processamento. Em vez disso, o processamento envolve apenas a verificação da consistência dos
dados e, portanto, é executado muito mais rapidamente do que o processamento MOLAP. Se você
configurar agregações além do armazenamento ROLAP, os valores agregados serão armazenados na
fonte de dados, conforme mostrado na Figura 1-21 . Quando o SSAS recebe uma solicitação MDX de
dados, ele usa o DSV para traduzir a solicitação em uma instrução SQL e envia essa instrução para a
fonte de dados. Por exemplo, se a fonte de dados for SQL Server, o MDX será traduzido em T-SQL.

FIGURA 1-21 Armazenamento ROLAP

O armazenamento ROLAP é a melhor escolha quando os usuários corporativos precisam de acesso


quase em tempo real aos dados ou quando uma tabela de dimensão tem centenas de milhões de
linhas. Uma possível compensação é o desempenho mais lento da consulta devido à tradução da
consulta de MDX para SQL. No entanto, existem técnicas que você pode aplicar para mitigar a
degradação do desempenho, conforme explicado no Capítulo 4.

Observação Configuração da dimensão ROLAP

Para configurar uma dimensão para usar armazenamento ROLAP, abra o designer de dimensão e
selecione o objeto de dimensão no painel Atributos. Nas janelas Propriedades, selecione ROLAP na
lista suspensa da propriedade StorageMode. Você aprenderá como configurar o ROLAP para
partições de grupos de medidas no Capítulo 4.

HOLAP

O armazenamento HOLAP é uma combinação de MOLAP e ROLAP. Os dados detalhados são


mantidos na fonte de dados relacionais, mas os dados agregados e os índices são carregados no
armazenamento MOLAP durante o processamento, conforme mostrado na Figura 1.22 . Quando o
SSAS processa uma consulta MDX, ele determina onde residem os dados necessários para resolver a
consulta. Se precisar de dados detalhados, ele traduz a consulta para SQL e envia a instrução
traduzida para a fonte de dados. Caso contrário, recupera dados agregados do armazenamento
MOLAP.

FIGURA 1-22 Armazenamento ROLAP

As consultas HOLAP são potencialmente mais lentas para serem resolvidas. Além disso, os requisitos
de armazenamento no servidor SSAS não são realmente menores porque o SSAS deve ler todos os
dados da fonte de dados para construir agregações e índices e requer espaço suficiente para fazer
isso. O SSAS descarta os dados posteriormente, reduzindo assim os requisitos de
armazenamento. Como você deve levar em consideração a sobrecarga de armazenamento suficiente
para o processamento, o HOLAP não é uma boa opção se seu objetivo for minimizar o
armazenamento.

Nota O armazenamento HOLAP não se aplica a dimensões

É possível configurar uma dimensão para usar somente armazenamento MOLAP ou ROLAP. O
armazenamento HOLAP aplica-se apenas a partições de cubo.

Habilidade 1.2: Projetar e implementar dimensões em um


cubo
Depois de usar o Assistente de Dimensões para adicionar um objeto de dimensão ao seu banco de
dados multidimensional, você deverá adicioná-lo a um ou mais cubos para disponibilizá-lo aos
aplicativos clientes. Além disso, há algumas etapas de configuração a serem executadas quando você
precisar melhorar a experiência do usuário ao navegar no cubo, habilitar recursos específicos do SSAS
ou otimizar o desempenho.

Esta seção aborda como:

 Selecione um modelo de dimensão apropriado, como fato, pai-filho, roleplaying, referência,


mineração de dados, muitos para muitos e dimensão de mudança lenta

 Implementar um tipo de dimensão

 Definir relacionamentos de atributos

Selecione um modelo de dimensão apropriado, como fato, pai-filho,


roleplaying, referência, mineração de dados, muitos para muitos e dimensão de
mudança lenta

Existem vários tipos diferentes de modelos de dimensão que podem ser definidos para seu banco de
dados multidimensional. Para alguns modelos dimensionais, você define o tipo configurando seu tipo
de relacionamento de uso de dimensão na página Uso de Dimensão do designer de cubo. Para os
outros modelos dimensionais, configure propriedades de dimensão ou cubo. Nesta seção, revisamos
cada tipo de modelo de dimensão e as etapas necessárias para configurá-lo.

Modelo de dimensão regular

Quando uma dimensão não atende aos critérios de nenhum dos outros modelos dimensionais
descritos nesta seção, ela é considerada uma dimensão regular. Ao adicioná-lo a um cubo, a
existência de um relacionamento de chave estrangeira entre sua tabela de dimensões correspondente
e a tabela de fatos de um grupo de medidas geralmente resulta na adição de um tipo de
relacionamento regular. Às vezes, por vários motivos, pode ser necessário adicionar esse tipo de
relacionamento manualmente.

Você pode confirmar a existência de um relacionamento regular analisando o uso da dimensão. Para
fazer isso, execute as seguintes etapas:

1. No Solution Explorer, clique duas vezes em Wide World Importers DW.cube para abrir o
designer de cubo e, em seguida, clique na guia Dimension Usage. Quando você vê um texto
exibido sem um ícone na interseção de células entre uma dimensão e um grupo de medidas,
conforme mostrado na Figura 1-23 , o tipo de relacionamento é Regular.
Uso da dimensão do cubo definindo um relacionamento entre uma dimensão e um
FIGURA 1-23
grupo de medidas

2. Clique no botão de reticências na interseção da célula para abrir a caixa de diálogo Definir
Relacionamento, mostrada na Figura 1-24 .

Caixa de diálogo Definir Relacionamento mostrando a configuração de um


FIGURA 1-24
relacionamento regular

Quando Regular for selecionado na lista suspensa Selecionar tipo de relacionamento, você
deverá identificar o atributo de granularidade na dimensão e a coluna correspondente na
tabela do grupo de medidas.

Na lista suspensa Atributo de granularidade, você pode selecionar qualquer atributo que
exista no objeto de dimensão do seu projeto. Esta lista não inclui atributos da tabela de
dimensões que aparecem no DSV se esses atributos não forem incluídos no objeto de
dimensão.

Quando você seleciona um atributo de granularidade, as colunas-chave correspondentes do


atributo na tabela de dimensões, conforme definido no objeto de dimensão, são exibidas na
lista Colunas de Dimensão na parte inferior da caixa de diálogo. Em seguida, você
corresponde cada coluna-chave a uma coluna de chave estrangeira na tabela de fatos
associada ao grupo de medidas.

Pense no uso da dimensão para um relacionamento regular como a definição SSAS de um


relacionamento de chave estrangeira. A existência desse relacionamento no DSV não é suficiente
porque ele é usado sempre que o SSAS precisa gerar instruções SQL durante o processamento ou ao
traduzir MDX para SQL. O DSV representa a modelagem física da fonte de dados, mesmo que inclua
elementos derivados. A finalidade do uso da dimensão é definir os relacionamentos lógicos entre
objetos de grupos de dimensões e medidas. Representa a modelagem lógica do seu banco de dados
multidimensional.

Modelo de dimensão de fato

Um modelo de dimensão de fato permite definir um relacionamento entre um grupo de medidas e


um objeto de dimensão criado a partir de uma dimensão degenerada. Lembre-se da Habilidade 1.1
que uma dimensão degenerada é um tipo de coluna encontrada em uma tabela de fatos. Como o
grupo de medidas e a dimensão vêm da mesma tabela, não há nenhuma configuração adicional
necessária depois de especificar o tipo de relacionamento Fato.

Vamos configurar uma nova dimensão, configurar um modelo de dimensão de fatos e verificar os
resultados seguindo estas etapas:

1. No Solution Explorer, clique com o botão direito na pasta Dimensões, selecione Nova
Dimensão e clique em Avançar duas vezes para prosseguir para a página Especificar
Informações de Origem do assistente.

2. Na lista suspensa Tabela Principal, selecione Venda.

3. As duas chaves primárias na tabela Venda são exibidas na lista Colunas-chave, o que exige
que você selecione um item na lista Coluna de nome. No entanto, não existe nenhuma coluna
que represente adequadamente um valor para cada linha desta tabela e a data da fatura não
é necessária para identificar exclusivamente cada linha da tabela. Portanto, você pode limpar
esse valor.

4. Abra a lista suspensa que contém a Chave da data da fatura, role até o topo da lista e
selecione a linha em branco no topo da lista para remover a Chave da data da fatura. Agora
você não precisa mais fornecer um valor de coluna de nome, então clique em Avançar para
continuar.

5. Na página Selecionar Tabelas Relacionadas, desmarque cada caixa de seleção e clique em


Avançar.

6. Na página Selecionar atributos de dimensão, marque a caixa de seleção à esquerda de ID da


fatura do WWI, role para baixo e desmarque as caixas de seleção Chave da data de entrega,
Chave do item de estoque, Chave da data da fatura, Chave do vendedor, Chave do cliente,
Chave da cidade e Chave de cobrança do cliente e clique em Avançar.

7. Digite Fatura na caixa Nome e clique em Concluir para concluir o assistente.

8. No painel Atributos, clique em Chave de venda para destacá-la. Em seguida, na janela


Propriedades, selecione False na lista suspensa AttributeHierarchyVisible.
9. Ao configurar essa propriedade como False, você torna o atributo Chave de Venda inacessível
para usuários corporativos quando eles navegam no cubo. Como chave substituta, ela não
tem significado para a análise de negócios, mas é necessária na dimensão para identificar
exclusivamente cada linha e para estabelecer o relacionamento de fatos no uso da dimensão.

10. Renomeie o atributo WWI Invoice ID clicando com o botão direito do mouse no painel
Atributos, selecionando Renomear e digitando Invoice .

11. Clique duas vezes no arquivo Wide World Importers DW.cube no Solution Explorer, vá para a
página Estrutura do Cubo, clique com o botão direito no espaço em branco no painel
Dimensões, selecione Adicionar Dimensão do Cubo, selecione Fatura e clique em OK. Agora a
dimensão do projeto está incluída no cubo.

12. Clique na guia Uso da Dimensão do designer de cubo, clique na célula denominada Chave de
Venda e clique no botão de reticências na célula.

13. Na caixa de diálogo Definir Relacionamento, selecione Fato na lista suspensa Selecionar Tipo
de Relacionamento, conforme mostrado na Figura 1-25 . Não há mais nada para configurar
porque a coluna do atributo de granularidade da dimensão também é uma coluna na tabela
de fatos do grupo de medidas.

Caixa de diálogo Definir relacionamento mostrando a configuração de um


FIGURA 1-25
relacionamento de fato

14. Clique em OK para fechar a caixa de diálogo. Um ícone é exibido na célula Chave de Venda
para indicar o relacionamento de fato entre a dimensão Fatura e o grupo de medidas Venda.

15. Clique com o botão direito no projeto no Solution Explorer e selecione Implantar.

16. Depois que a mensagem Implantação Concluída com Êxito for exibida, clique na guia
Navegador no designer de cubo, expanda o nó Medidas na árvore de metadados do cubo,
expanda a pasta Venda e arraste Contagem de Vendas para a janela de consulta denominada
Arraste Níveis ou Medidas Aqui para Adicionar ao Consulta.

17. Expanda o nó Fatura e arraste Fatura (ao lado da coleção retangular de quadrados azuis) para
a área próxima a Contagem de vendas. O navegador gera uma consulta MDX nos bastidores
e exibe os resultados, conforme mostrado na Figura 1.26 . Aqui você pode ver que algumas
faturas têm apenas um item vendido, enquanto outras têm vários itens vendidos. À medida
que você adiciona dimensões ao cubo, você pode criar uma consulta para ver os itens de
estoque específicos vendidos, o vendedor que vende o item e muito mais.

FIGURA 1-26 Navegador no designer de cubo mostrando Contagem de vendas por fatura

Modelo de dimensão pai-filho


Você usa um modelo de dimensão pai-filho quando tem uma tabela de dimensões que inclui um
relacionamento de chave estrangeira consigo mesma. Também é conhecido como hierarquia irregular
ou relacionamento de auto-referência. Ao contrário de uma estrutura hierárquica padrão na qual há
um número fixo de níveis, como Mês, Trimestre e Ano em uma dimensão Data, uma hierarquia
irregular pode ter números variados de níveis para cada nó. Exemplos comuns de hierarquias
irregulares são organogramas, planos de contas financeiras ou listas de materiais.

Dica de exame

Uma hierarquia irregular pode ser uma estrutura de dimensão padrão ou pai-filho. Para o exame, você
deverá saber como usar a propriedade HideMemberIf para gerenciar a navegação entre níveis de uma
hierarquia irregular, conforme descrito em “Hierarquias irregulares”
em https://msdn.microsoft.com/en-us/library/ms365406.aspx . Xian Wang tem uma postagem no blog
intitulada “Hierarquias irregulares e HideMemberIf: uma visão aprofundada” que ilustra suas opções
para modelar hierarquias irregulares em https://xzwang.wordpress.com/2013/07/10/ragged-hierarchy-
and- ocultarmembroif/ . Você também deve revisar o comentário de Chris Webb sobre o
comportamento irregular da hierarquia em sua postagem no blog “Ragged Hierarchies,
HideMemberIf and MDX Compatibility” em https://blog.crossjoin.co.uk/2009/11/11/ragged-
hierarchies-hidememberif-and -mdx-compatibilidade/ .

O banco de dados WideWorldImportersDW não inclui uma dimensão pai-filho, mas você pode criar
uma artificialmente convertendo a tabela Employee no DSV em uma consulta nomeada na qual você
atribui arbitrariamente funcionários a gerentes. Para fazer isso, clique duas vezes em Wide World
Importers DW.dsv no Solution Explorer para abrir o designer DSV. No painel Tabelas, clique com o
botão direito na tabela Funcionários, aponte para Substituir Tabela e selecione Com Nova Consulta
Nomeada. Na caixa de diálogo Criar Consulta Nomeada, substitua a instrução SELECT pela instrução
mostrada na Listagem 1.1, conforme mostrado na Figura 1.27 , e clique em OK.

LISTAGEM 1-1 Instrução de consulta nomeada para atribuir arbitrariamente gerentes a


funcionários

SELECIONAR
[Chave do Funcionário],
CASO
QUANDO [ID do funcionário da Primeira Guerra Mundial] >= 3 E [ID do
funcionário da Primeira Guerra Mundial] <= 11 THEN 194
QUANDO [ID do funcionário da Primeira Guerra Mundial] >= 12 E [ID
do funcionário da Primeira Guerra Mundial] <= 15 THEN 203
QUANDO [ID do funcionário da Primeira Guerra Mundial] >= 16 E [ID
do funcionário da Primeira Guerra Mundial] <= 19 THEN 208
QUANDO [ID do funcionário da Primeira Guerra Mundial] = 20 ENTÃO
210
OUTRO NULO
TERMINAR COMO [Chave do gerente],
[ID do funcionário da Primeira Guerra Mundial],
[Funcionário],
[Nome preferido],
[É vendedor]
DE [Dimensão].[Funcionário];
Caixa de diálogo Criar consulta nomeada mostrando uma instrução SELECT para gerar uma
FIGURA 1-27
tabela DSV

Em seguida, crie a dimensão Funcionário no projeto seguindo primeiro as etapas descritas na seção
“Dimensão Desenvolver” anteriormente neste capítulo e depois executando estas etapas:

1. Na página Especificar Informações de Origem do Assistente de Dimensão, use Funcionário


como a Tabela Principal e defina Chave do Funcionário como a Coluna Chave e Funcionário
como a Coluna Nome. Clique em Avançar.

2. Na página Selecionar Atributos de Dimensão do assistente, marque a caixa de seleção Chave


do Gerenciador. Em seguida, clique em Avançar e clique em Concluir.

3. No painel Atributos do designer de dimensão, renomeie Chave do Funcionário como


Funcionário e Chave do Gerente como Funcionários.
4. Com Funcionários selecionados, localize a propriedade Uso na janela Propriedades e
selecione Pai na lista suspensa Uso. Depois de definir essa propriedade, um ícone será exibido
próximo ao atributo Funcionários para designar seu status como uma hierarquia pai-filho.

5. Para observar o efeito dessa alteração, clique com o botão direito do mouse no projeto no
Solution Explorer e selecione Implantar para atualizar o banco de dados multidimensional no
servidor com a nova dimensão.

6. Ao ver a mensagem de que a implantação foi concluída, clique na página Navegador do


designer de dimensão e selecione Funcionários na lista suspensa Hierarquia.

7. Expanda o membro Todos no navegador e, em seguida, expanda cada membro com um


símbolo de adição próximo a ele para visualizar a estrutura hierárquica pai-filho, conforme
mostrado na Figura 1.28 . Na tabela Funcionários da tabela WideWorldImportersDW, há
diversas linhas para muitos funcionários devido à mudança lenta do design da dimensão, o
que resulta no aparecimento de duplicatas no navegador de dimensões. Você pode ignorar
essas duplicatas com segurança para os fins deste exemplo.
FIGURA 1-28 Navegador no designer de dimensão mostrando a hierarquia pai-filho Employees

Ao criar um modelo dimensional pai-filho e definir a propriedade Usage de um atributo como Parent,
você também pode configurar opcionalmente as seguintes propriedades adicionais para esse atributo:

 MembersWithData A configuração padrão para esta propriedade é NonLeafDataVisible. A


suposição com essa configuração é que a coluna-chave da tabela de fatos associada a essa
dimensão contém valores para membros pai e filho. No caso dos dados
WideWorldImportersDW (depois de criar um relacionamento artificial para gerentes e
funcionários na consulta nomeada), isso significa que gerentes e funcionários estão
associados a linhas na tabela de fatos, como Archer Lamble e Jack Potter. Ao navegar no
cubo, ao detalhar as vendas totais de Archer Lamble, você verá que ele inclui as vendas de
Archer relatadas como um valor separado das vendas de Jack (que você pode ver se fizer uma
busca detalhada da gerente de Jack, Katie Darwin).
Se você alterar esta propriedade para NonLeafDataHidden, os totais de cada gerente serão
calculados corretamente. No entanto, você não vê os dados do gerente nos resultados da
consulta quando faz uma busca detalhada para visualizar as vendas dos funcionários desse
gerente. Esse comportamento pode ser confuso para usuários corporativos e não é
recomendado como prática recomendada.

Importante Testando o efeito da propriedade do atributo MembersWithData

Embora seja possível visualizar o relacionamento entre membros de atributos pai e filho
usando a página Procurar do designer de dimensão, não será possível visualizar o efeito da
modificação da propriedade do atributo MembersWithData até que você adicione a
dimensão ao cubo, certifique-se dos relacionamentos na página Uso da Dimensão do
designer do cubo está correto e processe o cubo. Em seguida, você poderá navegar no cubo
e usar o atributo pai da dimensão em sua consulta para ver seu comportamento.

 MembersWithDataCaption Se você usar a configuração NonLeafDataVisible para a propriedade


MembersWithData, poderá definir a legenda para o membro do atributo que é exibido
quando você faz drill dos membros do atributo pai para o filho. Se você deixar esta
propriedade em branco, a legenda do pai e do filho será idêntica. Para diferenciar mais
claramente o membro pai como um valor agregado e seu membro filho correspondente, você
pode usar um asterisco como curinga e um valor de sequência para combinar o nome do
membro real com uma sequência estática.

Por exemplo, você pode digitar * (Gerente) na legenda MembersWithData. Para a consulta
nomeada WideWorldmportersDW no projeto de amostra deste capítulo, as vendas de Archer
como membro pai são o valor agregado das vendas feitas por Archer e Jack e são exibidas
como Archer Lamble. Se você fizer uma busca detalhada, verá as vendas de Archer como um
membro filho exibido como Archer Lamble (Gerente).

 NamingTemplate Você usa essa propriedade quando deseja atribuir nomes de nível a cada
nível em uma hierarquia pai-filho, o que é importante quando os usuários navegam no cubo
usando o Excel ou o Power BI. Se você deixar esta propriedade em branco, o SSAS atribuirá
nomes de nível como Nível 01, Nível 02 e assim por diante.

Em uma hierarquia padrão, você define os nomes dos níveis ao criar a hierarquia, conforme
explicado posteriormente neste capítulo na seção “Definir relacionamentos de atributos”. Se
você quiser fornecer um nome para os níveis em uma hierarquia pai-filho, sua única opção é
usar o modelo de nomenclatura.

Uma hierarquia pai-filho não possui um número fixo de níveis e cada ramo da árvore
hierárquica pode ter de zero a muitos níveis diferentes. O segundo nível abaixo de um ramo
não tem necessariamente o mesmo contexto que o segundo nível abaixo de outro ramo. Por
exemplo, na dimensão Funcionário, Archer Lamble é um gerente no primeiro nível abaixo do
membro Todos, e o segundo nível abaixo de Archer inclui Jai Shand, Katie Darwin e Piper
Koch. Digamos hipoteticamente que cada um desses funcionários seja um representante de
atendimento ao cliente. No entanto, outro membro do primeiro nível é Kayla Woodcock e os
membros filhos do segundo nível deste ramo da hierarquia são todos funcionários de
vendas. Portanto, não faz sentido usar um modelo de nomenclatura neste cenário em que o
segundo nível varia de acordo com a filial.

Quando você tem uma hierarquia pai-filho com uma estrutura mais consistente, você pode
usar a propriedade NamingTemplate para definir uma string exclusiva para cada nível da
hierarquia. No nível inferior do modelo, anexe um asterisco ao nome para instruir o SSAS a
adicionar um número que aumenta em 1 para cada nível subsequente quando houver mais
níveis na hierarquia do que níveis nomeados no modelo.

 RootMemberIf Você usa essa propriedade para ajudar o SSAS a distinguir membros pais de
membros filhos. Você pode escolher um dos seguintes valores na lista suspensa da
propriedade.

 ParentIsBlankSelfOrMissing Esta é a configuração padrão, que abrange qualquer


cenário possível para definir um membro pai. O SSAS procura na coluna definida
como coluna-chave pai, que é o atributo com a propriedade Uso definida como Pai e,
se essa coluna estiver em branco, contém o mesmo valor que a coluna de atributo-
chave da dimensão ou também não é encontrada na coluna de atributo-chave da
dimensão. coluna de atributo chave em outra linha, o membro será sinalizado como
membro pai no nível superior da hierarquia. Em outras palavras, o membro é exibido
como o primeiro nível de membros abaixo do membro Todos.

 ParentIsBlank Use essa configuração quando quiser que o SSAS considere um membro
como pai somente quando a coluna de atributo pai estiver em branco.

 ParentIsSelf Use essa configuração quando quiser que o SSAS defina um pai somente
quando a coluna de atributo pai corresponder ao valor na coluna de atributo chave.

 ParentIsMissing Você usa essa configuração quando o SSAS deve identificar um pai
com base em um valor de coluna de atributo pai que não é encontrado em nenhum
lugar da tabela na coluna de atributo chave.

 UnaryOperatorColumn Essa propriedade é usada somente para cenários de design especiais,


como uma dimensão de conta financeira na qual você precisa alterar o comportamento de
rollup padrão. Embora muitos desenvolvedores de data warehouse optem por usar valores
positivos e negativos em uma tabela de fatos financeiros para gerenciar o comportamento de
rollup para saldos de contas, outra opção menos comumente usada é incluir uma coluna na
dimensão da conta financeira para conter operadores que definam esse comportamento. Por
exemplo, quando você deseja calcular o valor agregado de um membro da conta pai, como
Receita (Perda), normalmente deseja subtrair um de seus filhos, Despesas, de outro de seus
filhos, Receitas. Ou seja, Receita (Perda) é igual a Receita menos Despesas. Você deve incluir
um valor, como um símbolo de mais ou menos, em uma coluna da tabela de dimensões e, em
seguida, mapear essa coluna para a propriedade UnaryOperatorColumn para definir o
comportamento de rollup.

Nota Exemplos de uso de propriedades específicas para atributos pai

“Definindo propriedades de atributos pai em uma hierarquia pai-filho”


em https://msdn.microsoft.com/en-us/library/ms167115.aspx explica como definir algumas dessas
propriedades e demonstra o efeito de fazer alterações nesses atributos propriedades.

Você pode ver uma descrição dos operadores unários no artigo “Operadores Unários em Dimensões
Pai-Filho” em https://msdn.microsoft.com/en-us/library/ms175417.aspx . Jose Chinchilla fornece um
bom exemplo de uso dessa propriedade em sua postagem no blog “Usando operadores unários para
controlar agregações de hierarquia do Analysis Services”
em https://sqljoe.wordpress.com/2011/09/23/using-unary-operators-to- control-análise-serviços-
hierarquia-agregações/ .

Modelo de dimensão de RPG


Uma dimensão de roleplaying é aquela para a qual você define uma dimensão no projeto, mas usa
essa dimensão diversas vezes com a mesma tabela de fatos. No banco de dados
WideWorldImportersDW, você pode ver dois exemplos de uma dimensão de roleplaying: Cliente e
Data. Especificamente, a tabela de fatos Sale tem dois relacionamentos de chave estrangeira para a
tabela Cliente e dois relacionamentos de chave estrangeira para a tabela Data, conforme mostrado
na Figura 1.29 .

FIGURA 1-29 Dimensões de roleplaying no banco de dados WideWorldImportersDW

Quando existem vários relacionamentos de chave estrangeira entre uma tabela de fatos e uma tabela
de dimensão, cada relacionamento tem um significado ou função comercial diferente. Para a
dimensão Cliente, a coluna CustomerKey na tabela Venda representa o cliente para quem a venda foi
feita, enquanto a coluna BillToCustomerKey representa o cliente responsável pelo pagamento da
fatura. Para a dimensão Data, a coluna InvoiceDateKey na tabela Venda reflete a data da venda,
enquanto DeliveryDateKey é a data em que o item em estoque foi entregue ao cliente.
Primeiro, adicione as dimensões Cliente e Data ao projeto seguindo as etapas descritas na seção
“Dimensão Desenvolver” anteriormente neste capítulo e, em seguida, execute as seguintes etapas:

1. Configure cada dimensão e seus atributos usando as configurações mostradas na Tabela 1-1.

Nota Atribuição de chave composta no designer de dimensão

Para configurar duas colunas para a propriedade KeyColumn do atributo Calendar Month
Label no designer de dimensão, selecione Calendar Month Label no painel Atributos, clique
na caixa KeyColumns na janela Propriedades e clique no botão de reticências. Na caixa de
diálogo Colunas-chave, clique em Rótulo do mês do calendário na lista Colunas-chave e
clique no botão <. Em seguida, clique em Ano civil na lista de colunas disponíveis, clique no
botão >, selecione Número do mês do calendário na lista Colunas disponíveis, clique no
botão > e clique em OK.

TABELA 1-1 Novas dimensões para interpretação

Dimensão Atributo para adicionar Propriedade de atributo

Nome

Chave do cliente Coluna-chave

Cliente NomeColuna

Categoria Coluna-chave

Grupo de Compra Coluna-chave

Data Coluna-chave

Nome

Etiqueta do mês do calendário Coluna-chave

Data
NomeColuna

Etiqueta do ano civil Nome

Coluna-chave Etiqueta do ano civil

Número da Semana ISO Coluna-chave

2. Em seguida, adicione as dimensões Cliente e Data ao cubo. Clique duas vezes em Wide World
Importers DW.cube e, em seguida, na página Estrutura do Cubo, clique com o botão direito
no espaço em branco no painel Dimensões e selecione Adicionar Dimensão do
Cubo. Enquanto pressiona a tecla CTRL, selecione Cliente e Data e clique em OK.

Observe que, embora você tenha selecionado duas novas dimensões para adicionar ao cubo,
há quatro novas dimensões: Cliente, Cobrança ao Cliente, Data de Entrega e Data da Fatura. O
designer do cubo detectou as características de interpretação das dimensões Cliente e Data
com base nos relacionamentos definidos no DSV. Se você verificar as definições de
relacionamento na guia Uso da Dimensão, poderá ver que os atributos de granularidade de
cada nova dimensão correspondem corretamente a uma coluna separada na tabela do grupo
de medidas.

Nota Dimensões do banco de dados versus dimensões do cubo

Quando você tem uma dimensão de roleplaying, há apenas um arquivo .dim no projeto,
conhecido como dimensão de banco de dados , mas você tem múltiplas dimensões no cubo,
que são conhecidas como dimensões de cubo .

3. Depois de implementar o projeto para atualizar o servidor com as alterações (e clicar em Sim
para confirmar a substituição do banco de dados, se necessário), abra a guia Navegador no
designer de cubo.

4. Clique em Reconectar, o terceiro botão da esquerda na barra de ferramentas do designer de


cubo, para restaurar a conexão com o servidor SSAS após a implementação.

Nota Reconectando-se ao servidor SSAS

Sempre que você processa o banco de dados, seja iniciando a operação no SSDT ou iniciando
a operação no SSMS ou SSIS, todas as conexões do cliente são desconectadas. Não faz mal
nenhum clicar no botão Reconectar se você já estiver conectado, mas é uma etapa obrigatória
após o processamento. Portanto, você deve desenvolver o hábito de usar o botão Reconectar
ao abrir a guia Navegador do designer de cubo para garantir que sua conexão esteja ativa.

5. Expanda o nó Medidas e a pasta Venda e arraste Contagem de Vendas para a janela de


consulta.

6. Em seguida, expanda Customer e arraste Customer.Customer para a janela de consulta para


visualizar as contagens de vendas por clientes individuais, conforme mostrado na Figura 1.30 .
Resultados da consulta mostrando contagens de vendas por cliente na página
FIGURA 1-30
Navegador do designer de cubo

7. Você pode então alterar a consulta para testar a dimensão de interpretação Faturar ao
cliente. Arraste a coluna Cliente da janela de consulta para o lado esquerdo da tela.

8. Em seguida, expanda Bill To Customer e arraste Bill To Customer.Customer para a janela de


consulta para visualizar as contagens de vendas por Bill To Customer, conforme mostrado
na Figura 1.31 . Observe que cada dimensão do cubo de roleplaying baseada na dimensão
Cliente tem o mesmo conjunto de atributos: Grupo de Compra, Categoria e Cliente. A
diferença nas consultas é resultado da associação a uma coluna diferente na tabela do grupo
de medidas.
Painel de metadados e janela de consulta na página Navegador do designer de
FIGURA 1-31
cubo mostrando contagens de vendas por cobrança ao cliente

Modelo de dimensão de referência

Um modelo de dimensão de referência é útil quando você deseja analisar medidas por uma dimensão
para a qual não existe um relacionamento diretamente na tabela de fatos. Em vez disso, a tabela de
factos tem uma relação com outra dimensão, que também tem uma relação com a dimensão de
referência. Como exemplo, precisamos considerar como modelar o banco de dados multidimensional
se o banco de dados WideWorldImportersDW não tivesse a dimensão de roleplaying para Bill To
Customer e, em vez disso, tivesse uma tabela de dimensão separada para referenciá-lo. A Figura 1-
32 mostra uma estrutura hipotética no banco de dados de exemplo se ele fosse projetado para usar
uma dimensão de referência para Faturar ao Cliente em vez de incluir seu relacionamento
diretamente.
FIGURA 1-32 Tabelas de origem para um modelo de dimensão de referência

Você pode simular essa estrutura no projeto criando um segundo DSV e, em seguida, criando um
cubo baseado no novo DSV seguindo estas etapas:

1. Clique com o botão direito na pasta Data Source Views, selecione New Data Source View,
clique em Next, selecione a fonte de dados Wide World Importers DW, clique em Next duas
vezes, digite WWI DW Alt na caixa Name e clique em Finish.

2. Clique com o botão direito na janela DSV, selecione Nova Consulta Nomeada, digite Sale
Alt na caixa Nome e substitua a instrução SELECT pela instrução na Listagem 1-2.

Instrução de consulta nomeada para remover a chave Bill To


LISTAGEM 1-2
Customer da tabela Sale

SELECIONAR
[Chave de venda],
[Chave da cidade],
[Chave do Cliente],
[Chave do item em estoque],
[Chave da data da fatura],
[Chave da data de entrega],
[Chave do Vendedor],
[ID da fatura da Primeira Guerra Mundial],
[Descrição],
[Pacote],
[Quantidade],
[Preço unitário],
[Taxa de imposto],
[Total sem impostos],
[Valor do imposto],
[Lucro],
[Total incluindo impostos],
[Total de itens secos],
[Total de itens do resfriador]
DE [Fato].[Venda];
3. Clique com o botão direito novamente no DSV, selecione New Named Query, digite Customer
Alt na caixa Name e substitua a instrução SELECT pela instrução na Listagem 1-3.

LISTAGEM 1-3Instrução de consulta nomeada para adicionar a chave Bill To


Customer à tabela Customer

SELECIONAR
c1.[Chave do Cliente],
c2.[Chave do cliente] como [Chave de cobrança do cliente],
c1.[ID do cliente da Primeira Guerra Mundial],
c1.Cliente,
c1.Categoria,
c1.[Grupo de Compra]
DE [WideWorldImportersDW].[Dimensão].[Cliente] c1
LEFT OUTER JOIN [WideWorldImportersDW].[Dimensão].[Cliente] c2
ON c1.[Cobrança ao Cliente] = c2.[Cliente];
4. Clique com o botão direito mais uma vez no DSV, selecione New Named Query, digite Bill To
Customer na caixa Name e substitua a instrução SELECT pela instrução na Listagem 1.4.

LISTAGEM 1-4 Instrução de consulta nomeada para criar cobrança ao cliente

SELECIONAR
[Chave do cliente] COMO [Chave de cobrança do cliente],
[Cliente] AS [Faturar para o cliente]
DE [Dimensão].[Cliente]
ONDE
[Chave do Cliente] em (1, 202);
5. A seguir, defina chaves primárias lógicas para cada consulta nomeada. Para isso, clique com o
botão direito em Sale Key na consulta nomeada Sale Alt e selecione Definir chave lógica
primária. Repita esta etapa para a Chave do Cliente na consulta nomeada Alt do Cliente e a
Chave do Cliente para Faturamento na consulta nomeada Faturar para o Cliente.

6. Em seguida, crie um relacionamento entre Sale Alt e Customer Alt selecionando Customer Key
em Sale Alt e arrastando-o para Customer Key em Customer Alt. Repita esse processo para
criar um relacionamento entre a chave Bill To Customer na consulta nomeada Alt do cliente e
a chave Bill To Customer na consulta nomeada Bill To Customer.

7. Adicione as duas dimensões ao projeto seguindo as etapas descritas na seção “Dimensão de


desenvolvimento” anteriormente neste capítulo usando as configurações mostradas na Tabela
1-2. Certifique-se de alterar o DSV no Dimension Wizard para WWI DW Alt. Ao criar a
dimensão Cliente Alt, não desmarque a caixa de seleção Faturar ao cliente na página
Selecionar tabelas relacionadas e não desmarque a caixa de seleção Faturar à chave do cliente
na página Selecionar atributos de dimensão do assistente.

Nota A coluna de dimensão de referência deve existir na dimensão intermediária

Como a dimensão Cliente Alt é a dimensão intermediária entre a dimensão de referência


Faturar ao cliente e a tabela de fatos, você deve ter uma coluna da dimensão de referência na
dimensão intermediária.
TABELA 1-2 Novas dimensões para um modo dimensional de referência

Dimensão Atributo para adicionar Propriedade de atributo

Nome

Chave do cliente Coluna-chave

NomeColuna
Alt do cliente
Categoria Coluna-chave

Grupo de Compra Coluna-chave

Chave de cobrança ao cliente AtributoHierarquiaVisível

Nome

Faturar ao cliente Chave do cliente Coluna-chave

NomeColuna

8. Em seguida, crie um cubo baseado no novo DSV. Clique com o botão direito na pasta Cubos,
selecione Novo Cubo, clique em Avançar duas vezes, selecione WWI DW Alt na lista suspensa
Visualização da Fonte de Dados, marque a caixa de seleção Venda Alt, clique em Avançar,
desmarque a caixa de seleção Medir, selecione Contagem Alt de Venda, clique em Avançar
duas vezes, desmarque a caixa de seleção Venda Alt na página Selecionar Novas Dimensões,
clique em Avançar, digite Cubo de Dimensão de Referência na caixa Nome do Cubo e clique
em Concluir.

Embora a dimensão Faturar ao cliente tenha sido listada em Selecionar dimensões existentes,
por estar no mesmo DSV que o grupo de medidas Venda Alt, ela não é adicionada
automaticamente como uma dimensão de cubo. Não existe nenhum relacionamento direto
entre as consultas nomeadas Sale Alt e Bill To Customer no DSV. No entanto, você pode
adicionar a dimensão ao cubo manualmente como uma dimensão de referência.

9. Clique com o botão direito dentro do painel Dimensões na página Estrutura do Cubo do
designer de cubo, selecione Adicionar Dimensões do Cubo, selecione Faturar ao Cliente e
clique em OK.

10. Clique na guia Uso da dimensão, clique na interseção da célula entre a dimensão Faturar ao
cliente e o grupo de medidas Venda Alt, clique no botão de reticências que aparece, selecione
Referenciado na lista suspensa Selecionar tipo de relacionamento, selecione Cliente Alt na
lista suspensa Dimensão intermediária lista suspensa, selecione Faturar ao cliente na lista
suspensa Atributo de dimensão de referência e selecione Chave de faturar ao cliente na lista
suspensa Atributo de dimensão intermediária, conforme mostrado na Figura 1-33 . Clique OK.
Caixa de diálogo Definir relacionamento mostrando a configuração de um
FIGURA 1-33
relacionamento referenciado

Nota Materialização de dimensão de referência

Ao usar um modelo de dimensão de referência, você poderá enfrentar problemas de


desempenho durante o processamento ou a consulta, dependendo se você materializa a
dimensão. Se você marcar a caixa de seleção Materializar na caixa de diálogo Definir
Relacionamento, o tempo de processamento do grupo de medidas aumentará, mas o
desempenho da consulta será melhor. Se você desmarcar a caixa de seleção Materializar, o
tempo de processamento será menor, mas haverá uma penalidade no desempenho no
momento da consulta.

11. Implante o projeto clicando com o botão direito no projeto no Solution Explorer e
selecionando Implantar.

12. Clique na guia Navegador no designer de cubo, expanda Medidas, expanda a pasta Sale Alt e
arraste Sale Alt Count para a janela de consulta. Em seguida, expanda Bill To Customer e
arraste Bill To Customer para a janela de consulta, conforme mostrado na Figura 1.34 .
Painel de metadados e janela de consulta na página Navegador do designer de
FIGURA 1-34
cubo mostrando contagens de vendas por cobrança ao cliente

Nota Considerações sobre modelo de referência

Idealmente, quando você estiver no controle da modelagem dimensional das tabelas de origem,
inclua uma coluna de chave estrangeira para cada dimensão e não dependa de uma tabela
intermediária como faz com o modelo de dimensão de referência. Uma abordagem alternativa é
consolidar os dados em uma única tabela desnormalizada. Devido ao potencial de degradação do
desempenho durante o processamento ou consulta, uma implementação de modelo de dimensão de
referência não é recomendada como prática recomendada.

Para obter informações adicionais sobre a possibilidade de materializar uma dimensão de referência,
consulte “SSAS: Reference materialized dimension could produz incorrect results” por Alberto Ferrari
em http://sqlblog.com/blogs/alberto_ferrari/archive/2009/02/25/ssas -referência-dimensão-
materializada-pode-produzir-resultados-incorretos.aspx .

Modelo de dimensão de mineração de dados

Você pode aproveitar as vantagens do mecanismo de mineração de dados integrado ao SSAS para
criar uma nova dimensão pela qual você pode analisar dados. Uma abordagem de implementação
comum é usar o algoritmo de clustering para usar dados demográficos e outros dados para agrupar
clientes em clusters e, em seguida, adicionar os clusters como uma dimensão ao seu cubo onde você
pode dividir seus dados por clusters.

Os dados de origem em WideWorldImportersDW não se prestam bem ao clustering ou a qualquer


outro algoritmo de mineração de dados disponível no SSAS. No entanto, você pode executar as
seguintes etapas para compreender a mecânica de implementação de um modelo de mineração de
dados em um banco de dados multidimensional:

1. A primeira etapa é configurar um modelo de mineração de dados em seu projeto clicando


com o botão direito na pasta Mining Structures no Solution Explorer e selecionando New
Mining Structure.

2. Clique em Avançar no Assistente de Mineração de Dados, selecione Do Cubo Existente e


clique em Avançar. Selecione Microsoft Clustering na lista suspensa Qual técnica de
mineração de dados você deseja usar e clique em Avançar.
3. Na página Selecionar a dimensão do cubo de origem, selecione Cliente e clique em Avançar.

4. Na página Selecionar a chave do caso, selecione Cliente. Clique em Avançar.

5. Na página Selecionar colunas de nível de caso, selecione Lucro, Quantidade e Contagem de


vendas. Clique em Avançar.

O nível de caso identifica a granularidade da estrutura de mineração de dados. Em outras


palavras, identifica o nível de detalhe da mineração de dados. Neste exemplo, um caso é um
cliente único.

6. Na página Especificar uso da coluna do modelo de mineração, marque a caixa de seleção


Lucro na coluna Previsível, conforme mostrado na Figura 1-35 .

Página Especificar uso da coluna do modelo de mineração do Assistente de


FIGURA 1-35
mineração de dados

7. Clique em Avançar quatro vezes para concluir o assistente.

Observação Assistente de mineração de dados

Você pode encontrar um ponto de partida para aprender mais sobre esse assistente em
“Assistente de mineração de dados (Analysis Services – Data Mining)
em https://msdn.microsoft.com/en-us/library/ms175645.aspx .
8. Na página Concluindo o Assistente, mantenha a caixa de seleção Criar Dimensão do Modelo
de Mineração selecionada, digite Clusters de Clientes na caixa de texto à direita desta caixa de
seleção, selecione a dimensão Criar Cubo Usando o Modelo de Mineração, conforme
mostrado na Figura 1-36 , e em seguida, clique em Concluir.

FIGURA 1-36 Concluindo a página do Assistente do Assistente de Mineração de Dados

9. Clique com o botão direito no projeto no Solution Explorer e selecione Implantar para
implantar as atualizações no servidor e processo SSAS.

10. Clique duas vezes no arquivo Wide World Importers DW_DM.cube no Solution Explorer,
clique na guia Navegador no designer de cubo, expanda a pasta Medidas, expanda a pasta
Venda e arraste Lucro para a janela de consulta. Em seguida, expanda a pasta Customer
Clusters e arraste MiningDimensionContentNodes para a janela de consulta para visualizar o
detalhamento das vendas por cluster. Quando você usa dados mais realistas do que
WideWorldImportersDW, é provável que mais clusters estejam disponíveis para análise.

Nota Visualizador de modelo de mineração de dados

Para visualizar as características de cada cluster, clique duas vezes no arquivo Customer.dmm no
Solution Explorer e clique na guia Mining Model Viewer. Aqui você pode alternar entre as guias
Diagrama de Cluster, Perfis de Cluster, Características de Cluster e Discriminação de Cluster para
explorar visualizações, estatísticas e outras informações sobre os clusters criados pelo algoritmo de
mineração de dados. Você não foi testado quanto ao uso do visualizador de modelo de mineração de
dados no exame, mas pode aprender mais sobre como usá-lo em “Procurar um modelo usando o
Microsoft Cluster Viewer” em https://msdn.microsoft.com/en-us /library/ms174801.aspx .

Modelo de dimensão muitos para muitos

O uso de um modelo dimensional muitos-para-muitos é necessário quando é necessário suportar um


tipo de análise mais complexo do que o que exploramos até agora. A análise tradicional é um modelo
um-para-muitos no qual um membro da dimensão pode ser associado a muitas linhas de fatos. Dito
de outra forma, uma única linha de fatos está associada a um membro em uma dimensão
relacionada. Em um relacionamento muitos-para-muitos, uma única linha de fatos pode ser associada
a vários membros da dimensão.

Este tipo de modelagem é comum em análises bancárias em que uma única conta bancária pode ser
associada a vários correntistas e, portanto, uma transação em uma tabela de fatos tem um
relacionamento muitos-para-muitos com os correntistas. A indústria médica também exige
frequentemente modelagem muitos-para-muitos. Por exemplo, um paciente pode ter vários
diagnósticos, portanto, um evento como uma internação hospitalar pode ser associado a vários
membros em uma dimensão de diagnóstico.

Como resultado da implementação desse tipo de modelo, é possível acumular valores agregados em
uma dimensão por diferentes membros sem sobrecontar valores. Digamos que em um cubo simples
você tenha uma conta bancária com dois correntistas e a conta tenha um saldo de $ 100. Se você
consultar os saldos de todos os titulares de contas, o SSAS listará cada titular de conta separadamente
com o saldo de US$ 100, mas o valor agregado para todos os titulares de contas será de US$ 100. O
SSAS sabe como associar as linhas de fatos individualmente a cada membro da dimensão, mas
também calcula corretamente os valores agregados da dimensão.

Antes de poder implementar um modelo de dimensão muitos para muitos no SSAS, você precisa
estruturar suas tabelas de origem ou DSV adequadamente. Nada nas tabelas de origem
WideWorldImportersDW se presta a esse tipo de modelagem, portanto, vamos configurar um cenário
simples no qual uma nova dimensão contém motivos de vendas. Os motivos de vendas descrevem
por que um cliente fez uma compra e são capturados em uma pesquisa realizada no momento da
compra. Qualquer transação de venda pode estar associada a zero ou muitos motivos de vendas. Para
modelar esse cenário, você precisa adicionar uma nova dimensão Motivo de Vendas e uma Ponte de
Motivo de Vendas para associar transações de vendas da tabela Venda aos motivos de vendas na
nova dimensão, conforme mostrado na Figura 1.37 .
FIGURA 1-37 Tabelas de origem para um modelo de dimensão muitos para muitos

Para configurar este cenário no projeto atual, execute as seguintes etapas:

1. Crie uma consulta nomeada como origem para a dimensão Motivo de Vendas. Para fazer isso,
clique duas vezes em Wide World Importers DW.dsv no Solution Explorer para abrir o
designer DSV.

2. No painel do diagrama, clique com o botão direito em qualquer lugar do painel do diagrama
e selecione Nova Consulta Nomeada.

3. Na caixa de diálogo Criar Consulta Nomeada, digite Motivo de Venda na caixa Nome,
substitua a instrução SELECT pela instrução mostrada na Listagem 1.5 e clique em OK.

LISTAGEM 1-5 Instrução de consulta nomeada para criar a dimensão Motivo de


Vendas
SELECIONAR
1 AS SalesReasonKey, 'Valor' AS SalesReason
UNIÃO
SELECIONAR
2 AS SalesReasonKey, 'Fabricante' AS SalesReason
UNIÃO
SELECIONAR
3 AS SalesReasonKey, 'Vendedor' AS SalesReason;
4. Clique com o botão direito em SalesReasonKey no diagrama e selecione Selecionar chave
primária lógica.

5. Agora crie uma tabela ponte para definir o relacionamento entre a tabela de fatos e a nova
dimensão. No painel do diagrama do DSV, clique com o botão direito em qualquer lugar e
selecione Nova Consulta Nomeada.

6. Na caixa de diálogo Criar Consulta Nomeada, digite Sales Reason Bridge na caixa Nome,
substitua a instrução SELECT pela instrução mostrada na Listagem 1-6 e clique em OK.

LISTAGEM 1-6Instrução de consulta nomeada para criar ponte de fatos do


motivo de vendas

SELECIONAR
CAST(1 AS bigint) AS [Chave de Venda],
1 AS SalesReasonKey
UNIÃO
SELECIONAR
CAST(1 AS bigint) AS [Chave de Venda],
2 AS SalesReasonKey
UNIÃO
SELECIONAR
CAST(1 AS bigint) AS [Chave de Venda],
3 AS SalesReasonKey
UNIÃO
SELECIONAR
CAST(2 AS bigint) AS [chave de venda],
1 AS SalesReasonKey;
7. Selecione a coluna Chave de venda na tabela Ponte de motivo de vendas e arraste-a para a
coluna Chave de venda na tabela Venda para definir um novo relacionamento.

8. Repita a etapa anterior para criar um relacionamento entre SalesReasonKey na tabela Sales
Reason Bridge e a coluna SalesReasonKey na tabela Sales Reason.

9. Crie a dimensão Motivo de Vendas no projeto seguindo as etapas descritas na seção


“Dimensão Desenvolver” anteriormente neste capítulo, usando Motivo de Vendas como a
Tabela Principal e definindo Chave do Motivo de Vendas como a Coluna Chave e Motivo de
Vendas como a Coluna de Nome. Clique em Avançar duas vezes e clique em Concluir.

10. Renomeie o atributo Chave do motivo de vendas para Motivo de vendas.

11. Clique duas vezes em Wide World Importers DW.cube no Solution Explorer para abrir o
designer de cubo.

12. Clique com o botão direito no painel Dimensão na página Estrutura do Cubo, selecione
Adicionar Dimensão do Cubo, selecione Motivo de Vendas e clique em OK.
13. Clique com o botão direito no painel Medidas, selecione Novo Grupo de Medidas e selecione
Ponte de Motivo de Vendas para adicionar a tabela de ponte ao cubo.

14. Expanda a pasta Sales Reason Bridge no painel Medidas, selecione Sales Reason Bridge Count
e, em seguida, na janela Propriedades, selecione False na lista suspensa Visível.

15. Abra a página Uso da Dimensão do designer de cubo. Observe que as dimensões Fatura e
Motivo de Vendas têm um relacionamento regular com o grupo de medidas Ponte Motivo de
Vendas.

16. Para configurar o relacionamento muitos para muitos, clique na interseção entre Motivo de
Vendas e Venda, clique no botão de reticências, selecione Muitos para Muitos na lista
suspensa Selecionar Tipo de Relacionamento, selecione Ponte do Motivo de Vendas no Grupo
de Medidas Intermediárias lista suspensa, conforme mostrado na Figura 1-38 , e clique em
OK.

Caixa de diálogo Definir relacionamento mostrando a configuração de um


FIGURA 1-38
relacionamento muitos para muitos

17. Implemente o projeto e, em seguida, abra a página Navegador do designer de cubo e clique
em Reconectar na barra de ferramentas.

18. No menu Cubo, selecione Analisar no Excel. Clique em Habilitar na caixa de mensagem Aviso
de segurança da Microsoft.

19. Na lista Campos da Tabela Dinâmica, arraste a caixa de seleção Faturas para o painel Filtros
abaixo da lista.

20. Na tabela dinâmica, abra a lista suspensa, marque a caixa de seleção Selecionar vários itens,
desmarque a caixa de seleção Todos, expanda Tudo e marque as caixas de seleção 1 e 2.
21. Na lista Campos da tabela dinâmica, marque a caixa de seleção Contagem de vendas e
observe que a tabela dinâmica exibe um total de 3.

22. Na lista Campos da Tabela Dinâmica, marque a caixa de seleção Fatura e observe que há duas
faturas, 1 e 2. A Fatura 1 tem uma contagem de vendas de 1 e a Fatura 2 tem uma contagem
de vendas de 2.

23. Agora selecione Motivo de vendas na lista Campos da tabela dinâmica. Um segundo nível é
adicionado à tabela dinâmica na qual há três motivos de vendas para a Fatura 1, cada um
com uma contagem de vendas de 1: Valor, Fabricante e Vendedor. A fatura 2 tem um motivo
de vendas, Valor, com uma contagem de vendas de 1. Observe que o total permanece 3,
apesar das quatro instâncias de motivos de vendas na tabela dinâmica terem uma contagem
de vendas de 1. As contagens de vendas não são contabilizadas a mais, mesmo quando um o
relacionamento muitos para muitos está presente nas dimensões da consulta.

Precisa de mais análises? Modelagem dimensional muitos para muitos

Você pode encontrar uma cobertura completa dos desafios com modelagem dimensional muitos para
muitos e soluções potenciais em “Many to Many Revolution 2.0” de Marco Russo e Alberto Ferrari,
disponível para download em http://www.sqlbi.com/articles/ muitos2muitos/ .

Modelo de dimensão mudando lentamente

Conforme explicado na seção “Design de tabela de origem” na Habilidade 1.1, “Criar um banco de
dados multidimensional usando Microsoft SQL Server Analysis Services (SSAS)”, existem dois tipos de
tabelas SCD que você pode projetar e depois adicionar ao seu DSV—Tipo 1 para o qual você não
rastreia alterações históricas e Tipo 2 para o qual você rastreia alterações históricas. Ao usar o design
SCD Tipo 1, você não precisa executar nenhuma tarefa adicional no DSV ou no design de dimensão,
embora deva estar ciente do efeito das alterações de dados durante o processamento, conforme
explicado no Capítulo 4, que por sua vez pode influenciar como você configura relacionamentos de
atributos conforme descrito posteriormente nesta habilidade. Por outro lado, ao usar o design SCD
Tipo 2, há algumas tarefas específicas que você deve executar no design da dimensão para suportar a
capacidade de navegar tanto pela versão atual quanto pela versão histórica dos atributos da
dimensão.

A primeira tarefa é garantir que o design da tabela SCD Tipo 2 inclua colunas para suportar
dimensões que mudam lentamente, conforme descrito na Habilidade 1.1. Ou seja, você deve ter uma
chave substituta, uma chave comercial, colunas de histórico de SCD e pelo menos um atributo cujos
valores mudam ao longo do tempo e cujo histórico você deseja preservar.

A tabela de itens de estoque no Wide World Importers DW DSV atende a esses critérios; então vamos
adicioná-lo ao projeto como uma dimensão que muda lentamente, seguindo as etapas descritas na
seção “Dimensão de desenvolvimento” anteriormente neste capítulo e, em seguida, executando estas
etapas:

1. No Assistente de Dimensão, use Item de Estoque como Tabela Principal, defina Chave de Item
de Estoque como Coluna Chave e defina Item de Estoque como Coluna de Nome.

2. Na página Selecionar atributos de dimensão do assistente, mantenha a caixa de seleção


Chave do item de estoque selecionada e marque a caixa de seleção ID do item de estoque da
Primeira Guerra Mundial para adicionar a chave comercial, a caixa de seleção Cor para
adicionar o atributo SCD e a caixa de seleção Tamanho para adicionar um atributo
imutável. Em seguida, clique em Avançar e clique em Concluir.

3. Seu próximo conjunto de tarefas é alterar as propriedades da chave substituta e dos atributos
da chave comercial. Primeiro, renomeie a chave do item em estoque como histórico do item
em estoque e o ID do item em estoque da Primeira Guerra Mundial como item em estoque.

4. Em seguida, defina a propriedade NameColumn para a chave comercial. A propriedade


NameColumn é definida automaticamente para a chave substituta pelo assistente. Nesse
caso, você usa a mesma coluna para definir a propriedade Coluna de Nome para a chave
comercial. Para fazer isso, selecione Item de estoque (o atributo de chave comercial
renomeado) no painel Atributos do designer de dimensão, role para baixo para localizar a
propriedade NameColumn, clique na caixa à direita do nome da propriedade, clique no botão
de reticências exibido, selecione Item de estoque na caixa de diálogo Nome da coluna e
clique em OK.

5. Por último, adicione a dimensão a um cubo. No Solution Explorer, clique duas vezes em Wide
World Importers DW.cube, clique com o botão direito dentro do painel Dimensões na página
Estrutura do Cubo do designer de cubo, selecione Adicionar Dimensão do Cubo, selecione
Item de Estoque e clique em OK. O uso da dimensão é definido corretamente por padrão com
um relacionamento regular devido ao relacionamento definido entre a tabela de fatos Venda
e a tabela de dimensões Item em estoque, portanto, nenhuma configuração adicional é
necessária.

6. Não há dados nas vendas DW dos Importadores Mundiais para ilustrar adequadamente o
efeito das mudanças no SCD, então execute a instrução mostrada na Listagem 1-7 para
adicionar uma nova venda usando a chave substituta para um item de estoque atual.

LISTAGEM 1-7Inserir uma linha na tabela de fatos de vendas para um item de


estoque atual

INSERIR EM [Fato].[Venda]
([Chave da cidade],
[Chave do Cliente],
[Chave de cobrança ao cliente],
[Chave do item em estoque],
[Chave da data da fatura],
[Chave da data de entrega],
[Chave do Vendedor],
[ID da fatura da Primeira Guerra Mundial],
[Descrição],
[Pacote],
[Quantidade],
[Preço unitário],
[Taxa de imposto],
[Total sem impostos],
[Valor do imposto],
[Lucro],
[Total incluindo impostos],
[Total de itens secos],
[Total de itens do resfriador],
[Chave de Linhagem])
VALORES
(0,
0,
0,
604,
'31/05/2016',
'31/05/2016',
0,
70511,
'Lançador de foguetes USB (cinza)',
'Cada',
1000,
25,
15,
25.000,
3750,
15.500,
28750,
1000,
0,
11);
IR
7. Implante o projeto para ver como o design do SCD afeta os resultados da consulta. Clique
com o botão direito do mouse no projeto no Solution Explorer, selecione Implantar e clique
em Sim para substituir o banco de dados no servidor.

8. Após a conclusão da implementação, clique na página Navegador do designer de cubo e


clique no botão Reconectar na barra de ferramentas.

9. Agora configure a consulta. Expanda a pasta Medidas no painel de metadados, expanda a


pasta Venda e arraste Contagem de Vendas para a janela de consulta.

10. Em seguida, expanda Item de estoque na árvore de metadados. Este nó Item de estoque de
nível superior representa a dimensão indicada pelo ícone contendo um cubo e setas
apontando em três direções. Abaixo dele está outro nó Item de estoque, que é um atributo
indicado pelo conjunto de quadrados azuis dispostos em formato retangular.

11. Arraste o atributo Item de estoque para a janela de consulta e, em seguida, arraste a borda
direita do cabeçalho da coluna para a direita para ampliar a coluna e obter melhor visibilidade
do nome de cada item de estoque, conforme mostrado na Figura 1.39 . Observe que a
contagem atual do USB Rocket Launcher (cinza) é 1.079.
Painel de metadados e janela de consulta na página Navegador do designer de
FIGURA 1-39
cubo mostrando contagens de vendas por item de estoque

12. Se você arrastar o atributo Cor para a janela de consulta, verá que a contagem de vendas é
1.078 para a cor histórica Cinza e 1 para a cor atual Cinza Aço. O atributo Item de estoque é
um agregado de todas as informações históricas, mas você também pode visualizar as
informações históricas do atributo Cor em alteração ao adicioná-lo à consulta.

13. Agora arraste o cabeçalho da coluna Item de Estoque da janela de consulta para a esquerda
para removê-lo da consulta e, em seguida, arraste Histórico de Itens de Estoque do painel de
metadados para a janela de consulta. Solte-o à esquerda da coluna Cor.

14. Em seguida, filtre a consulta para localizar mais facilmente o item de estoque na consulta
anterior. Para fazer isso, selecione Item de estoque na lista suspensa Dimensão acima da
janela de consulta e selecione Histórico de item de estoque na lista suspensa Hierarquia.

15. Na lista suspensa Operador, selecione Começa com. Na caixa Filter Expression, digite USB
Rocket Launcher e pressione Enter. Em seguida, remova a coluna Cor. Agora você vê dois itens
de estoque com o mesmo nome, como mostrado na Figura 1.40 , porque esses dois membros
de dimensão têm chaves substitutas separadas e cada chave substituta aparece em uma ou
mais linhas na tabela de fatos.
Painel de metadados e janela de consulta na página Navegador do designer de
FIGURA 1-40
cubo mostrando contagens de vendas por histórico de itens de estoque

Ao incluir o atributo Cor na consulta, você pode ver que cada membro do Histórico de itens
de estoque corresponde a uma cor diferente. No entanto, quando a Cor não é incluída na
consulta, a aparência de duas linhas separadas nos resultados da consulta pode confundir os
usuários corporativos. Por esse motivo, uma abordagem de design comum para modelar
SCDs é ocultar o atributo associado à chave substituta para que os usuários corporativos não
possam usá-lo acidentalmente em uma consulta ao explorar o cubo.

16. Nesse caso, você pode ocultar o atributo Histórico de itens de estoque retornando ao
designer de dimensão Item de estoque, selecionando Histórico de itens de estoque no painel
Atributos e alterando a propriedade AttributeHierarchyVisible na janela Propriedades para
False.

Nota AttributeHierarchyVisible versus AttributeHierarchyEnabled

Superficialmente, AttributeHierarchyVisible e AttributeHierarchyEnabled parecem ter o


mesmo comportamento porque se você alterar qualquer uma das propriedades para False
para um atributo, esse atributo não estará disponível para adição a uma consulta ao navegar
no cubo. Porém, nos bastidores, o comportamento é diferente. O SSAS não aloca espaço de
armazenamento de dimensão para um atributo para o qual AttributeHierarchyEnabled é
False. Em vez disso, o atributo é convertido em uma propriedade de membro conforme
descrito na seção “Desenvolver uma dimensão”, anteriormente neste capítulo. Por outro lado,
o espaço de armazenamento da dimensão é alocado para um atributo com seu
AttributeHierarchyVisible definido como False. Quando o espaço de armazenamento da
dimensão é alocado, o tempo de processamento da dimensão aumenta.

17. Depois de implementar o projeto, você pode reconectar-se ao cubo na página Navegador do
designer de cubo e confirmar se o atributo Histórico de itens de estoque não aparece mais no
painel de metadados, conforme mostrado na Figura 1-41 .
Painel Metadados na página Navegador do designer de cubo mostrando os
FIGURA 1-41
atributos da dimensão Item de estoque após ocultar o atributo chave

Nota Considere o impacto da modelagem SCD no desempenho da consulta

Se você tiver uma dimensão grande, a abordagem de modelagem descrita aqui poderá resultar
potencialmente em um desempenho de consulta insatisfatório. Uma maneira de mitigar esse possível
problema é adicionar uma hierarquia definida pelo usuário e configurar relacionamentos de atributos
adequadamente, conforme descrito na seção “Definir relacionamentos de atributos” posteriormente
neste capítulo.

Implementar um tipo de dimensão

Cada dimensão possui uma propriedade Type que é definida por padrão como Regular. Em geral,
quando a propriedade não está definida como Regular, a configuração Tipo instrui o servidor SSAS, o
aplicativo cliente ou o servidor e o aplicativo cliente sobre como executar determinados tipos de
cálculos para aliviar a necessidade de criar membros calculados complexos, personalizados fórmulas
de rollup ou scripts MDX. Normalmente, você também deve definir uma propriedade Type para um
ou mais atributos na dimensão para configurar o comportamento desejado.

Você pode escolher entre os seguintes valores de Tipo para definir o comportamento de cálculo
aplicável para uma dimensão:

 Contas Define comportamentos específicos do lado do servidor para agregar contas


financeiras. Ao usar esse tipo de dimensão, você também deve configurar a propriedade Type
de um atributo como AccountType para o atributo que contém membros como Ativos,
Passivos, Receita e assim por diante. O SSAS usa o tipo de conta para determinar se deve
agregar valores para datas dentro de um calendário ou ano fiscal para contas de
demonstração de resultados (como receitas e despesas) ou para calcular valores pontuais
para contas de balanço (como ativos e passivos). ).

Observação Tipo de dimensão Conta financeira

Não há dados de contas financeiras disponíveis no banco de dados WideWorldImportersDW


para ajudá-lo a explorar o trabalho com o tipo Contas, mas você deve estar familiarizado com
os conceitos do exame. Você pode aprender mais sobre como trabalhar com esse tipo de
dimensão lendo “Criar uma conta financeira de dimensão do tipo pai-filho”
em https://technet.microsoft.com/en-us/library/ms174609(v=sql.130) .aspx .

 BillOfMaterials (BOM) Organiza uma dimensão por atributos que definem como as peças
compõem uma unidade e exige que você defina atributos como unidade organizacional,
recurso de BOM e quantitativo. Um aplicativo cliente controla como essas informações
orientam o comportamento da dimensão.

 Canal Representa informações do canal e requer um aplicativo cliente para determinar como
essas informações são usadas.

 Moeda Define o comportamento de conversão de moeda para uma dimensão.

Nota Tipo de dimensão Moeda

O banco de dados WideWorldImportersDW não inclui dados de conversão de moeda, mas


você não precisa saber como configurar dimensões de conversão de moeda para o
exame. No entanto, se quiser saber mais, consulte “Criar uma dimensão de tipo de moeda”
em https://technet.microsoft.com/en-us/library/ms175413(v=sql.130).aspx . Boyan Penev tem
uma postagem no blog, “Um Guia para Conversões de Moeda no SSAS”, que fornece uma
revisão abrangente dos recursos disponíveis para configurar uma dimensão monetária e
ilustra uma solução para lidar com a conversão de moeda que você deve revisar em
http: //www.bp -msbi.com/2010/10/a-guide-to-currency-conversions-in-ssas/ . Outro recurso
que explica passo a passo como configurar a conversão de moeda é fornecido por Hennie de
Nooijer em “SSAS: Multicurrency Problem (Part I)”
em http://bifuture.blogspot.com/2014/09/ssas-multicurrency-problem -part-i.html .

 Clientes Organiza atributos para obter informações sobre clientes, como nome, endereço,
detalhes demográficos e muito mais. Você deve usar um aplicativo cliente que suporte esse
tipo de dimensão para ver a mudança de comportamento.
 Geografia Requer que um aplicativo cliente defina o comportamento da dimensão, como a
exibição de dados agregados projetados em uma visualização geográfica. Este tipo de
dimensão contém atributos para áreas geográficas, como código postal, cidade ou país.

 Hora Define o comportamento para cálculos que dependem do tempo. Ao definir a


propriedade Type adequadamente para cada atributo, você identifica os atributos que
contêm anos, trimestres, meses, dias e assim por diante.

 Organização Define uma dimensão que contém atributos sobre organizações subsidiárias,
percentagens de propriedade e percentagens de direitos de voto. Um aplicativo cliente
controla como essas informações afetam os cálculos ou o comportamento da dimensão em
um aplicativo.

 Produtos Organiza uma dimensão por atributos que descrevem características das peças,
como cor, tamanho, categoria e assim por diante. Este tipo de dimensão requer que um
aplicativo cliente use essas informações.

 Promoção Descreve uma dimensão que contém informações sobre promoções de


marketing. Essas informações são usadas somente em um aplicativo cliente que suporta esse
tipo de dimensão.

 Quantitativo Requer um aplicativo cliente que possa usar atributos contendo valores
quantitativos.

 Taxas Define a dimensão que contém informações de taxa de moeda que o servidor SSAS usa
para conversões de moeda em conjunto com o tipo de dimensão Moeda. Consulte o recurso
adicional recomendado para o tipo de dimensão Moeda para saber como usar esse tipo de
dimensão corretamente.

 Cenário Identifica uma dimensão que contém atributos para definir um cenário, como
orçamento ou previsão, e uma versão.

 Utilitário Sinaliza uma dimensão para uma finalidade a ser definida por um aplicativo cliente.

A implementação mais comum de um tipo de dimensão diferente do padrão Regular é definir uma
dimensão Data como um tipo de dimensão Tempo. Vamos adicionar alguns atributos adicionais a
esta dimensão e depois explorar a configuração adicional necessária na dimensão para alcançar os
resultados desejados.

Para definir a propriedade Tipo da dimensão Data, clique duas vezes no arquivo Date.dim no Solution
Explorer, clique no nome da dimensão (o nó de nível superior) no painel Atributos do designer de
dimensão e selecione Hora no menu suspenso Tipo. lista abaixo na janela Propriedades. Você também
deve configurar cada atributo com o tipo aplicável selecionando o atributo no painel Atributos e
selecionando o valor correto, mostrado na Tabela 1-3, na lista suspensa Tipo. Ao navegar pela lista de
valores na lista suspensa Tipo, você deve expandir os nós dentro de uma categoria de tipo para
localizar o tipo desejado. Por exemplo, você pode expandir Data e Calendário para localizar Meses
(mostrados na tabela como Data/Calendário/Meses) ou expandir ISO para localizar
Iso8601WeekOfYear. Além disso, altere a propriedade Name de cada atributo se estiver incluído na
Tabela 1-3.

TABELA 1-3 Configuração de atributos na dimensão Data


Atributo Propriedade de atributo Atribuir valor

Mês do calendário Tipo Data/Calendá

Ano civil Tipo Data/Calendá

Data Tipo Data/Calendá

Número da Semana ISO Tipo Data/ISO/Iso

Dica de exame

Cada definição de propriedade específica requer diferentes definições de configuração adicionais e


resulta em comportamentos diferentes. Se o tipo de dimensão for usado apenas por aplicativos
clientes, você deverá consultar a documentação do aplicativo para saber como configurar a dimensão
e seus atributos corretamente. Por esse motivo, o exame não testa seu conhecimento sobre esses
tipos de dimensões. Entretanto, você deve saber como trabalhar com os tipos de dimensão Tempo,
Conta, Moeda e Taxa.

Definir relacionamentos de atributos

Uma prática recomendada no desenvolvimento de banco de dados multidimensional é a adição de


hierarquias definidas pelo usuário. Uma hierarquia definida pelo usuário (na qual o usuário é você,
como desenvolvedor, e não o usuário comercial que consulta o cubo) é um caminho de navegação
predefinido para passar do resumo às informações detalhadas. Por exemplo, você usa uma hierarquia
para facilitar a visualização das vendas por ano, depois por mês e depois por dia, conforme mostrado
na Figura 1.42 .
FIGURA 1-42 Tabela dinâmica exibindo contagens de vendas por dia, mês e ano

Cada nível de uma hierarquia corresponde a um atributo separado na dimensão. Por exemplo, na
hierarquia mostrada na Figura 1.42 , o nível superior da hierarquia é o atributo Ano Civil, o nível
intermediário é o atributo Mês Calendário e o nível inferior é o atributo Data.

Depois de criar uma hierarquia, talvez você também precise definir relacionamentos de atributos entre
cada nível da hierarquia. Os relacionamentos de atributos determinam como o SSAS calcula valores
agregados dentro de um cubo e como armazena dados em disco. Por esse motivo, a presença ou
ausência de relacionamentos de atributos afeta potencialmente o desempenho da consulta.

Antes de poder trabalhar com relacionamentos de atributos, você deve primeiro criar uma
hierarquia. Para fazer isso para a dimensão Data, execute as seguintes etapas:

1. Abra o designer de dimensão para Data, arraste o atributo Ano Civil do painel Atributos para
o painel Hierarquias do designer. Ao descartá-lo, uma nova hierarquia é criada.

2. Você pode então adicionar níveis à nova hierarquia arrastando o atributo Mês Calendário
para o objeto de hierarquia abaixo do atributo Ano Calendário e repetindo esse processo com
o atributo Data.

3. Clique com o botão direito na legenda Hierarquia da nova hierarquia no painel Hierarquias,
selecione Renomear e digite Calendário para renomeá-la.

4. Você pode criar quantas hierarquias desejar. Tecnicamente falando, você pode criar apenas
2.147.483.647 hierarquias definidas pelo usuário, mas provavelmente não precisará de tantas!

5. Por enquanto, crie outra hierarquia renomeada como Calendário ISO usando os atributos Ano
Civil, Número da Semana ISO e Data, conforme mostrado na Figura 1.43 .
FIGURA 1-43 Hierarquias definidas pelo usuário na dimensão Data

Importante O nome da hierarquia deve ser exclusivo

O nome da hierarquia deve ser exclusivo dentro da dimensão, não apenas em relação a outras
hierarquias, mas também não pode entrar em conflito com nomes de atributos na mesma dimensão.

Observe o ícone de aviso e o aviso de práticas recomendadas indicado pelo sublinhado ondulado
abaixo de cada nome de hierarquia para indicar um possível problema. Se você passar o cursor sobre
cada aviso, a seguinte mensagem será exibida: “Não existem relacionamentos de atributos entre um
ou mais níveis desta hierarquia. Isso pode resultar na diminuição do desempenho da consulta.” Este é
um aviso muito comum.

Nos bastidores, o SSAS estabelece relacionamentos de atributos entre os níveis de hierarquia e o


atributo principal sempre que possível. Para revisar a definição atual para relacionamentos de
atributos, clique na guia Relacionamentos de Atributos no designer de dimensão. Conforme mostrado
na Figura 1-44 , os relacionamentos entre o atributo-chave, Data, e os atributos nos níveis de cada
hierarquia são visíveis como setas que conectam a Data ao Número da Semana ISO, ao Ano Civil e ao
Mês Civil.
FIGURA 1-44 Página Relacionamentos de Atributos do designer de dimensão para a dimensão Data

Os avisos de hierarquia na página Estrutura da Dimensão são exibidos porque o Ano Civil faz parte de
ambas as hierarquias, mas não se conecta diretamente ao atributo no nível filho em nenhuma das
hierarquias. A dimensão pode ser processada com êxito nesse estado, mas a mensagem de aviso
alerta que pode haver um impacto adverso no desempenho da consulta. Com esse banco de dados, o
volume de dados é muito pequeno para que você perceba um desempenho lento da
consulta. Entretanto, quando você começa a trabalhar com tabelas de fatos com milhões ou bilhões
de linhas, o problema de desempenho se torna mais perceptível.

Antes de decidir se precisa corrigir esse aviso específico, você deve saber que tipo de hierarquia
criou. Uma hierarquia natural é uma hierarquia na qual cada atributo tem um relacionamento um-
para-muitos entre os membros da dimensão no nível pai e os membros da dimensão no nível filho,
conforme mostrado na Figura 1.45 . Na dimensão Data, a hierarquia Calendário é uma hierarquia
natural porque cada membro Mês Civil corresponde a um e somente um membro no nível Ano Civil.

FIGURA 1-45 Hierarquia natural

Nota Os relacionamentos de atributos de hierarquia natural beneficiam o desempenho da consulta

A principal razão pela qual os relacionamentos de atributos de hierarquia natural melhoram o


desempenho da consulta é a materialização de dados hierárquicos no disco para recuperação mais
rápida. No momento da consulta, o SSAS pode navegar por estruturas específicas construídas para
armazenamento hierárquico de dados para encontrar combinações específicas, como a Semana ISO
Número 1 para CY2013, rapidamente, em vez de começar com um atributo-chave como 2013-01-01 e
trabalhar nas estruturas de atributos para localize o número da semana ISO e o ano civil
relacionados. Além disso, o SSAS mantém índices para saber quais combinações existem ou não e
assim recuperar os dados de forma mais eficiente. Por exemplo, ao verificar o índice, o SSAS sabe que
07/01/2013 não está associado à semana ISO número 1 e pode eliminar a combinação ao construir
resultados de consulta que exigem uma junção cruzada de valores de data e número de semana ISO.

É certo que, numa dimensão relativamente pequena como a Data, a diferença no desempenho da
consulta com ou sem uma hierarquia natural é insignificante. Contudo, em grandes dimensões, a
existência de relações precisas de atributos tem um impacto mensurável no desempenho.

Além disso, quando existem relacionamentos de atributos, o SSAS pode projetar e armazenar
agregações que também contribuem para consultas mais rápidas. Você aprenderá como trabalhar
com agregações para melhorar o desempenho da consulta no Capítulo 4.

Por outro lado, uma hierarquia não natural é aquela em que existe o potencial de haver um
relacionamento muitos-para-muitos entre membros nos níveis pai e filho. Para criar uma hierarquia
não natural, abra o designer de dimensão Item de estoque e crie uma hierarquia chamada Cor-
Tamanho com Cor como o nível superior e Tamanho como o nível inferior. A Figura 1.46 ilustra os
resultados parciais dessas combinações de atributos em uma hierarquia.

FIGURA 1-46 Hierarquia não natural

Você usa uma hierarquia não natural para permitir que os usuários relatem combinações de membros
de dimensão que não são hierárquicos. Dessa forma, você pode incorporar em seu banco de dados
multidimensional a capacidade de produzir o mesmo resultado de uma consulta relacional que
agrega a quantidade vendida e agrupa o valor agregado por duas colunas diferentes e não
hierárquicas, conforme mostrado na Listagem 1.8.

Recuperar resultados agregados de um banco de dados relacional


LISTAGEM 1-8
usando uma cláusula GROUP BY

USE WideWorldImportersDW;
IR
SELECIONAR
Cor,
Tamanho,
SOMA(Quantidade) AS QuantidadeVendida
DE Fatos.Vendas
Dimensão INNER JOIN.[Item de estoque] si
ON s.[Chave do item em estoque] = si.[Chave do item em estoque]
Agrupar por
Cor,
Tamanho;
Se você revisar os relacionamentos de atributos de uma hierarquia não natural, como mostrado
na Figura 1.47 , poderá ver que não há nenhuma seta conectando os atributos do nível da
hierarquia. Em vez disso, o atributo de cada nível está relacionado ao atributo principal, Histórico de
itens em estoque. No caso de uma hierarquia não natural, esta falta de relações de atributos entre os
atributos da hierarquia é apropriada.

FIGURA 1-47 Relacionamentos de atributos para a dimensão Item de Estoque

Sempre que você vir o aviso sobre relacionamentos de atributos inexistentes entre níveis de
hierarquia, você deverá avaliar se a hierarquia é natural ou não. Se for natural, você deverá corrigir os
relacionamentos de atributos, mas poderá ignorar o aviso se a hierarquia não for natural. No entanto,
você deve testar se o desempenho das consultas que usam a hierarquia não natural é aceitável. Caso
contrário, considere modificar a estrutura da dimensão para transformar a hierarquia não natural em
uma hierarquia natural.

Digamos que você queira otimizar as hierarquias naturais, Calendário e Calendário ISO, corrigindo os
relacionamentos de atributos. Para fazer isso, execute as seguintes etapas:

1. Abra a página Relacionamentos de Atributos do designer de dimensão Data. Em seguida,


arraste o objeto ISO Week Number no diagrama para o objeto Calendar Year e arraste o
objeto Calendar Month para o objeto Calendar Year para criar os relacionamentos mostrados
na Figura 1-48 .

FIGURA 1-48 Relacionamentos de atributos corrigidos para a dimensão Data

Esses ajustes limpam os avisos da página Estrutura da Dimensão do designer de


dimensão. No entanto, um novo problema é introduzido porque os dados não estão
atualmente estruturados para suportar uma hierarquia natural para o Calendário ISO.

2. Para ver os resultados causados por esse problema, implante o projeto. A implantação falha
devido ao seguinte aviso exibido na janela Saída: “Erros no mecanismo de armazenamento
OLAP: Uma chave de atributo duplicada foi encontrada durante o processamento: Tabela:
'Dimension_Date', Coluna: 'ISO_x0020_Week_x0020_Number', Valor: '15'. O atributo é
'Número da semana ISO'.”

3. A melhor maneira de ver o problema com a chave de atributo duplicada é processar a


dimensão Data manualmente para que você possa extrair a consulta SQL gerada pelo SSAS e
revisar os resultados da consulta no SSMS. Primeiro, clique com o botão direito em Date.dim
no Solution Explorer, selecione Process, selecione Process Full na lista suspensa Process
Options se ainda não estiver selecionado e clique em Run.
4. Na caixa de diálogo Progresso do Processo, expanda Processing Dimension 'Date' Completed,
expanda Processing Dimension Attribute 'ISO Week Number' Completed, expanda SQL
Queries 1, clique na instrução SELECT e clique em View Details para ver a consulta completa,
conforme mostrado na Figura 1-49 .

FIGURA 1-49 Processando consulta na caixa de diálogo Exibir detalhes

5. Realce toda a instrução SELECT e pressione CTRL+C para copiar a instrução para a área de
transferência. Clique em Fechar três vezes para fechar todas as caixas de diálogo abertas.

6. Em seguida, abra o SSMS, conecte-se ao mecanismo de banco de dados que hospeda o


banco de dados WideWorldImportersDW, clique no botão Nova consulta na barra de
ferramentas, selecione WideWorldImportersDW na lista suspensa Bancos de dados
disponíveis na barra de ferramentas e cole a instrução na janela Consulta. Modifique a
consulta para adicionar uma cláusula ORDER BY conforme mostrado na Listagem 1.9 e clique
em Executar.

LISTAGEM 1-9Revise os resultados da consulta gerada pelo SSAS para


preencher o atributo ISO Week Number

SELECIONAR
DISTINTO
[Dimension_Date].[Número da semana ISO] AS
[Dimensão_DataISO_x0020_Semana_x0020_Número0_0],
[Dimension_Date].[Etiqueta do ano civil] AS
[Dimension_DateCalendar_x0020_Year_x0020_Label0_1]
DE [Dimensão].[Data] AS [Dimensão_Data]
ORDER BY [Dimension_Date].[Número da semana ISO];
Como você pode ver pelos resultados parciais mostrados na Figura 1-50 , cada valor de Número de
Semana ISO na primeira coluna corresponde a quatro valores diferentes de Ano Civil na segunda
coluna. Devido ao relacionamento de atributos que existe entre o Número da Semana ISO e o Ano
Civil, pode haver apenas um membro pai do Ano Civil para cada membro filho do Número da Semana
ISO. Caso contrário, o processamento da dimensão falhará.

FIGURA 1-50 Resultados da consulta que preenche o atributo ISO Week Number

Uma maneira fácil de corrigir esse problema é modificar a coluna-chave do atributo Número da
semana ISO para criar um valor exclusivo para cada combinação Número da semana ISO-Ano
civil. Para fazer isso, execute as seguintes etapas:

1. Abra a guia Estrutura de Dimensão do designer de dimensão, selecione Número da semana


ISO no painel Atributos, clique na caixa KeyColumns na janela Propriedades e clique no botão
de reticências.

2. Na caixa de diálogo Colunas-chave, clique em Ano civil na lista de colunas disponíveis, clique
no botão >, selecione Ano civil na lista Colunas-chave, clique no botão Acima para colocar o
ano civil à frente do número da semana ISO na lista e clique em OK .

3. Em seguida, clique na caixa NameColumn na janela Propriedades, clique no botão de


reticências, selecione Número da semana ISO e clique em OK.

4. Por último, implante o projeto para atualizar o banco de dados multidimensional no servidor
com suas alterações.

Importante A alteração de uma dimensão impacta as estruturas de mineração

Se você criou a estrutura de mineração do Cliente na seção “Modelo de dimensão de mineração de


dados” anteriormente neste capítulo, a alteração nas colunas-chave Número da Semana ISO invalidará
a estrutura de mineração do Cliente. Como você não usa mais essa estrutura de mineração e a
dimensão e o cubo relacionados no projeto usado neste capítulo, você pode excluir esses três
arquivos com segurança. Clique com o botão direito em Wide World Importers DW_DM.cube no
Solution Explorer, selecione Excluir e clique em OK para confirmar. Repita essas etapas para remover
Customer Clusters.dim e Customer.dmm do projeto. Você poderá então implantar o projeto com êxito
para atualizar a dimensão Data no servidor.

Assim como os atributos, os relacionamentos de atributos possuem propriedades. Você pode


selecionar uma seta no diagrama ou selecionar um relacionamento no painel Relacionamentos de
Atributos para visualizar as propriedades a seguir na janela Propriedades.

 RelationshipType Determina como o SSAS gerencia alterações na coluna-chave de um atributo


relacionado. O valor padrão é Flexível, que permite que alterações ocorram sem exigir a
execução de um processo completo da dimensão. (As implicações dos tipos de
relacionamento no processamento de dimensões são descritas mais detalhadamente no
Capítulo 4.) Por exemplo, se você espera que a Cor mude frequentemente para um item de
estoque, você pode definir o relacionamento entre Histórico de Itens de Estoque e Cor como
Flexível.

Sua outra opção é definir esta propriedade como Rígida. Nesse caso, qualquer alteração no
relacionamento entre um atributo e um atributo relacionado exigirá o processamento
completo da dimensão. Você usa essa opção quando espera que os relacionamentos entre
atributos raramente ou nunca mudem, como a atribuição de uma data a um mês, ou quando
espera que os valores raramente mudem. A data 01/01/2013 sempre permanece filha de
CY2013-Jan e nunca é reatribuída para CY2013.

 Atributo Especifica o atributo no qual o relacionamento de atributos se baseia. Em outras


palavras, esta propriedade define o atributo pai no relacionamento.

 Cardinalidade Descreve que o relacionamento tem um relacionamento muitos para um ou um


para um entre o atributo filho e o atributo pai. O padrão é Muitos para indicar um
relacionamento muitos para um, como o que existe entre Data e Mês do Calendário, no qual
há muitas datas relacionadas a um único mês. Este é o cenário mais comum encontrado em
relacionamentos de atributos.

Você altera o valor para Um quando deseja especificar um relacionamento um-para-um. Por
exemplo, se você tivesse um atributo para número de telefone na dimensão Cliente, definiria
o relacionamento entre esse atributo e o atributo Cliente definindo a propriedade
Cardinalidade como um.

 Nome Fornece um nome exclusivo para o relacionamento. Esse valor é padronizado como o
nome do atributo pai.

 Visível Determina se um aplicativo cliente pode acessar o atributo pai como uma propriedade
de membro em uma consulta MDX. Trabalhar com propriedades de membros é descrito com
mais detalhes no Capítulo 3.

Precisa de mais análises? Relacionamentos de atributos e ajuste de desempenho

Embora escrito para SQL Server 2012 e 2014, você pode encontrar recomendações de ajuste de
desempenho relacionadas a relacionamentos de atributos no “Analysis Services MOLAP Performance
Guide for SQL Server 2012 and 2014” de Karan Gulati e John Burchel. Este whitepaper está disponível
para download em https://msdn.microsoft.com/en-us/library/dn749781.aspx . As alterações
arquitetônicas no mecanismo de banco de dados multidimensional no SQL Server 2016 não alteram
as recomendações deste whitepaper para relacionamentos de atributos.

Habilidade 1.3: Implementar medidas e grupos de medidas


em um cubo
Muitas vezes você continua adicionando medidas e grupos de medidas a um cubo depois de usar o
Assistente de Cubo porque é mais fácil desenvolver e testar um cubo de forma incremental em vez de
tentar adicionar tudo de uma vez no assistente. Outra tarefa pós-assistente é configurar diversas
propriedades para medidas e grupos de medidas em seu cubo para controlar o
comportamento. Entre outros motivos, você pode usar propriedades para controlar como os valores
são agregados dos níveis de detalhe ao resumo ou para aplicar uma sequência de formato para
melhor legibilidade.
Esta seção aborda como:

 Projete e implemente medidas, grupos de medidas, granularidade, medidas calculadas e


funções agregadas.

 Defina comportamento semi-aditivo.

Projetar e implementar medidas, grupos de medidas, granularidade, medidas


calculadas e funções agregadas

O designer de cubo fornece muitas funcionalidades para desenvolver seu cubo além da configuração
básica definida usando o Cube Wizard. Você pode usá-lo para adicionar novas medidas e configurar
propriedades para essas medidas, além de trazer diversas medidas em massa para um novo grupo de
medidas. Você também pode usá-lo para ajustar a granularidade dos relacionamentos entre grupos
de medidas e dimensões. Você não apenas pode definir medidas a partir das quais os valores são
recuperados de uma tabela de fatos de origem, mas também pode definir medidas calculadas , que
são medidas derivadas da definição de expressões que operam em medidas de origem de fatos. Por
último, uma etapa importante no desenvolvimento do cubo é garantir que o SSAS aplique a função
agregada apropriada a cada medida, que você também configura no designer do cubo.

Medidas

A seção “Desenvolver um cubo” da Habilidade 1.1 descreveu como adicionar medidas a um cubo em
massa usando o Assistente de Cubo. Você também pode adicionar medidas manualmente a um cubo
existente ou alterar propriedades de medidas usando o designer de cubo.

Para adicionar uma nova medida a um cubo existente, execute as seguintes etapas:

1. Clique duas vezes no arquivo Wide World Importers DW.cube no Solution Explorer, clique
com o botão direito do mouse no grupo de medidas Venda no painel Medidas na página
Estrutura do Cubo do designer de cubo e selecione Nova Medida.

No cubo atual, todas as colunas numéricas que representam medidas já existem no cubo, mas
se você tivesse omitido uma medida baseada em uma dessas colunas ao usar o Assistente de
Cubo, você poderia selecioná-la na lista Colunas de Origem na caixa de diálogo Nova Medida
caixa e adicione-a ao seu cubo.

2. Outra opção é criar uma medida de contagem distinta com base em uma coluna-chave na
tabela de fatos. Por exemplo, digamos que você queira incluir a capacidade de mostrar a
contagem distinta de itens de estoque vendidos a cada cliente ou vendidos em um
determinado dia. Para fazer isso, marque a caixa de seleção Mostrar todas as colunas na caixa
de diálogo Nova medida, selecione Contagem distinta na lista suspensa Uso, selecione Chave
do item de estoque na lista Coluna de origem, conforme mostrado na Figura 1-51, e clique
em OK . .
FIGURA 1-51 Seleção de uma medida na caixa de diálogo Nova Medida

Em vez de aparecer no grupo de medidas Vendas, a Contagem Distinta de Chave de Item de Estoque
aparece em um grupo de medidas recém-adicionado chamado Venda 1 porque as medidas de
contagem distintas são gerenciadas de forma diferente de outras medidas pelo SSAS. Como o cálculo
de um valor de contagem distinto no momento da consulta é caro para o SSAS executar, o SSAS
coloca cada medida de contagem distinta em seu próprio grupo de medidas. Você pode renomear o
grupo de medidas clicando com o botão direito e digitando um novo nome.

Depois de criar uma medida ou de incluir diversas medidas usando o Assistente de Cubo, você deverá
revisar as propriedades da medida para garantir que cada medida se comporte conforme esperado
quando os usuários corporativos navegam no cubo. Você pode revisar as propriedades de uma
medida selecionando a medida no painel Medidas do designer de cubo e, em seguida, rolando pela
janela Propriedades. Cada medida possui o seguinte conjunto de propriedades que você pode
configurar:

 AggregateFunction Determina como o SSAS agrega linhas de detalhes da tabela de fatos em


valores de resumo. A propriedade AggregateFunction mais comumente usada é Sum. Os
outros valores AggregateFunction serão explicados posteriormente nesta seção.

 DataType Herda do tipo de dados da coluna de medida na tabela de fatos de origem.

 DisplayFolder Especifica a pasta na qual a medida será exibida no aplicativo cliente. Você digita
o nome de uma nova pasta ou seleciona o nome de uma pasta existente na lista suspensa da
propriedade. Usar uma pasta de exibição é útil para organizar medidas de forma lógica
quando o grupo de medidas contém muitas medidas.

 MeasureExpression Define uma expressão MDX que resolve o valor de uma medida no nível
folha antes da agregação. Um motivo comum para implementar uma expressão de medida é
multiplicar um valor de vendas por uma taxa de câmbio antes de somar os valores de vendas.

 Visível Determina se o aplicativo cliente exibe a medida. Se você alterar essa propriedade para
False, ainda poderá fazer referência à medida em expressões MDX, o que é útil quando a
medida base não é necessária para análise.

 Descrição Permite fornecer informações adicionais sobre uma medida para exibição em um
aplicativo cliente.

 FormatString Você pode selecionar uma sequência de formato em uma lista de formatos
possíveis, como Porcentagem ou Moeda, ou digitar um formato definido pelo usuário, como
#,# para exibir um valor inteiro com um separador de milhares. Você pode usar qualquer
formato personalizado válido do Microsoft Visual Basic para valores numéricos como uma
sequência de formato.

 Nome Fornece um nome para exibição em aplicativos cliente ou para referência em


expressões MDX.

 Origem Vincula a medida a uma tabela e coluna específicas no DSV.

Atualmente, quando você navega no cubo, as propriedades padrão de cada medida estão em
vigor. Se você navegar no cubo no designer de cubo, não poderá ver a formatação. Embora nenhuma
formatação esteja definida ainda, você pode configurar uma consulta de linha de base usando o Excel
para navegar no cubo. Para fazer isso, execute as seguintes etapas:

1. Abra a guia Navegador do designer de cubo e selecione Analisar no Excel no menu Cubo.

2. Clique em Habilitar na caixa de mensagem Aviso de segurança da Microsoft.

3. A seguir, na lista Campos da tabela dinâmica, selecione as seguintes medidas: Lucro,


Quantidade, Contagem de vendas, Taxa de imposto, Total excluindo impostos e Preço
unitário. Role para baixo na lista de campos da tabela dinâmica para localizar e marcar a caixa
de seleção Grupo de compras na dimensão Cliente.

Os resultados dessas seleções são exibidos em uma tabela dinâmica, conforme mostrado
na Figura 1.52 . Observe que nenhum desses valores está formatado para melhor legibilidade
e atualmente você pode somar os valores em cada linha de uma coluna para produzir o valor
do Total Geral na linha inferior.

FIGURA 1-52 Uma tabela dinâmica que exibe medidas não formatadas

As três alterações mais comuns necessárias para produzir os resultados desejados em um cubo são
alterar as propriedades AggregateFunction, FormatString e Name de uma medida. A propriedade
AggregateFunction afeta os totais que aparecem para membros de dimensão na consulta, bem como
o total geral. A propriedade FormatString facilita a visualização dos valores individuais nos resultados
da consulta, enquanto a propriedade Name deve ser um nome amigável que comunique claramente o
que o valor representa usando termos que os usuários corporativos reconheçam.

Para observar o efeito da alteração das propriedades dessas medidas, retorne à página Estrutura do
Cubo do designer de cubo e atualize os valores das propriedades conforme mostrado para cada
medida listada na Tabela 1-4.

TABELA 1-4 Novos valores de propriedades para medidas selecionadas

Medir Nome da propriedade Valor da

Quantidade FormatString #,#

Função Agregada Nenhum


Preço unitário
FormatString Moeda

Taxa de imposto Função Agregada Nenhum

FormatString Moeda
Total excluindo impostos
Nome Valor de

Valor do imposto FormatString Moeda

Lucro FormatString Moeda

FormatString Moeda
Total incluindo impostos
Nome Valor de

Total de itens secos FormatString #,#


Nome Contage

FormatString #,#
Total de itens do resfriador
Nome Contage

Contagem de vendas FormatString #,#

FormatString #,#
Contagem distinta de chave de item de estoque
Nome Contage

Implante o projeto e depois mude para o Excel. Na guia Análise de Tabela Dinâmica da faixa de
opções, clique em Atualizar para atualizar a tabela dinâmica com as alterações do cubo. Observe a
nova formatação de algumas medidas, os valores ausentes de outras medidas e as medidas ausentes,
conforme mostrado na Figura 1.53 .

FIGURA 1-53 Uma tabela dinâmica que exibe medidas formatadas

Cada medida renomeada não aparece mais na tabela dinâmica e deve ser adicionada novamente
manualmente. Adicione Valor de vendas com imposto e Valor de vendas sem imposto à tabela
dinâmica e, em seguida, adicione Valor de imposto para que você possa validar o valor Valor de
vendas com imposto em uma linha, destacando as colunas Valor de vendas sem imposto e Valor de
imposto na mesma linha, e verificar a Soma na barra de status na parte inferior da janela, conforme
mostrado na Figura 1-54 .

Validação do valor das vendas com valores de impostos somando o valor das vendas sem
FIGURA 1-54
impostos e o valor do imposto

Todas as medidas exibidas com valores na tabela dinâmica têm o valor AggregateFunction definido
como Soma. Esses valores refletem a soma de todas as linhas da tabela de fatos da coluna associada à
respectiva medida com agrupamento por Grupo de Compra. Depois que a propriedade
AggregateFunction para Taxa de Imposto e Preço Unitário for alterada para Nenhum, os valores na
tabela dinâmica dessas medidas não serão mais exibidos para essas medidas porque o SSAS ignora a
etapa de agregação ao recuperar os resultados da consulta. Esses valores no nível da linha ainda estão
acessíveis ao SSAS para cálculos MDX quando solicitado, mas somar a taxa de imposto ou o preço
unitário de uma venda não faz sentido para a análise de vendas. Você pode visualizar os valores
dessas duas medidas em nível de detalhe clicando duas vezes em uma célula, como E2, para abrir
uma nova planilha do Excel que exibe os detalhes em nível de linha na tabela de fatos da célula
selecionada, conforme mostrado na Figura 1-55 em que algumas colunas e linhas foram ocultadas
para focar nas colunas de interesse.

FIGURA 1-55 Detalhes da transação para o grupo de compras N/A em uma nova planilha do Excel

Se você voltar para a planilha original que contém a tabela dinâmica, remova todas as medidas,
exceto Contagem de Vendas, arrastando cada medida individualmente para fora do painel Valores, na
parte inferior da Lista de Campos das Tabelas Dinâmicas. Além disso, remova Grupo de Compras do
painel Linhas. Em seguida, selecione a medida Contagem distinta de itens de estoque e Província do
estado (na dimensão Cidade) para adicioná-los à tabela dinâmica, uma parte da qual é mostrada
na Figura 1.56 .

Uma tabela dinâmica mostrando uma medida padrão, Contagem de vendas, e uma medida
FIGURA 1-56
de contagem distinta, Contagem distinta de itens de estoque

Aqui você pode ver o número de transações de vendas como o valor de Contagem de vendas, que
conta cada linha na tabela de fatos e soma por estado e província. No entanto, a contagem distinta de
itens de estoque reflete a contagem distinta de itens de estoque vendidos a clientes em uma
província estadual específica. Se você rolar até a parte inferior da tabela dinâmica para localizar o total
geral, descobrirá que o total geral da contagem de vendas é 228.266 e o total geral da contagem
distinta do item de estoque é 228. Isso significa que há um total de 228.266 linhas na tabela de fatos,
mas 228 chaves distintas de itens de estoque na mesma tabela.

Na maioria das vezes, as medidas são aditivas . Ou seja, independentemente da dimensão incluída na
consulta com a medida, a agregação da medida por qualquer um dos atributos da dimensão é um
valor que é somado com precisão. Valores de propriedade AggregateFunction como Sum ou Count
são medidas aditivas. Você também pode definir medidas não aditivas e medidas semiaditivas
conforme descrito com mais detalhes nas seções “Funções agregadas” e “Definir comportamento
semiaditivo” deste capítulo.

Medir grupos

Lembre-se da Habilidade 1.1 que um grupo de medidas é uma coleção de medidas que vêm da
mesma tabela de fatos. Um cubo pode conter vários grupos de medidas. Idealmente, estes grupos de
medidas partilham uma ou mais dimensões em comum para facilitar a análise e reduzir o potencial de
confundir os utilizadores. Se não houver dimensões sobrepostas, considere criar cubos separados
para cada grupo de medidas.

Antes de poder incluir um grupo de medidas em um cubo, uma tabela correspondente deve existir no
DSV. Para revisar como adicionar um grupo de medidas (e posteriormente como trabalhar com
medidas semi-aditivas), vamos adicionar outra tabela de fatos ao DSV executando as seguintes
etapas:

1. Clique duas vezes em Wide World Importers DW.dsv no Solution Explorer.

2. Clique com o botão direito em qualquer lugar no painel do diagrama do designer DSV,
selecione Adicionar/Remover Tabelas, selecione Retenção de Estoque (Fato) na lista Objetos
Disponíveis, clique no botão > e clique em OK. A tabela é adicionada ao DSV com uma chave
primária definida como Chave de Retenção de Ações e um relacionamento adicionado entre a
tabela Retenção de Ações e a tabela de Itens de Ações com base na coluna Chave de Itens de
Ações.

A tabela Estoque é semelhante a uma tabela de estoque que mostra a quantidade de cada item em
estoque, entre outras informações. No entanto, uma tabela de inventário típica também inclui uma
coluna de data para mostrar a quantidade de cada item em estoque em datas diferentes. O inventário
pode ser rastreado anualmente, trimestralmente, mensalmente ou até diariamente, dependendo dos
requisitos do negócio. Para explorar melhor o comportamento semiaditivo posteriormente neste
capítulo, você pode substituir a tabela Stock Holding por uma consulta nomeada que simule
alterações no estoque ao longo do tempo, executando as seguintes etapas:

1. Clique com o botão direito na tabela Stock Holding no diagrama, aponte para Substituir
Tabela e selecione Com Nova Consulta Nomeada.

2. Substitua a instrução SELECT na caixa de diálogo Criar Consulta Nomeada pela instrução
mostrada na Listagem 1.10.

Consulta nomeada para simular alterações no estoque de itens


LISTAGEM 1-10
em estoque ao longo do tempo

SELECIONAR
CONVERT(data, '01/01/2013') como DateKey,
[Chave do item em estoque],
[Quantidade disponível],
[Localização do depósito],
[Nível de reabastecimento],
[Nível de estoque alvo]
DE
Fato.[Retenção de Ações]
UNIÃO TODOS
SELECIONAR
CONVERT(data, '01/06/2013') como DateKey,
[Chave do item em estoque],
[Quantidade disponível] - [Chave do item em estoque] COMO
[Quantidade disponível],
[Localização do depósito],
[Nível de reabastecimento],
[Nível de estoque alvo]
DE
Fato.[Participação Acionária] AS t;
Uma coluna de chave substituta não é necessária em uma tabela de fatos, portanto a consulta
nomeada elimina essa coluna junto com outras colunas estranhas para que os resultados da
consulta nomeada sejam simplificados tanto quanto possível. Além disso, uma coluna de data
arbitrária é adicionada e um novo valor é calculado para a quantidade disponível no segundo
período para forçar uma diferença no estoque entre os períodos.

3. Antes de clicar em OK, certifique-se de digitar Stock Holding na caixa Nome na parte superior
da caixa de diálogo se o nome não estiver correto no momento.

4. Pressione CTRL+S para salvar o DSV com a nova consulta nomeada.

5. Crie um relacionamento entre as tabelas Stock Holding e Date. Selecione DateKey no


diagrama de consulta denominado Stock Holding e arraste-o para a coluna Data na tabela
Data.

6. Agora você está pronto para usar a nova consulta nomeada como um novo grupo de
medidas. Clique duas vezes no arquivo Wide World Importers DW.cube no Solution Explorer,
clique com o botão direito no painel Medidas do designer de cubo e selecione Novo Grupo
de Medidas. Na caixa de diálogo Novo grupo de medidas, selecione Retenção de estoque e
clique em OK.

7. No painel Medidas, expanda o grupo de medidas Retenção de estoque para revisar as


medidas adicionadas: Quantidade disponível, Nível de novo pedido, Nível de estoque alvo e
Contagem de retenção de estoque.

Todas as colunas numéricas que não são usadas em relacionamentos no DSV são
consideradas medidas e adicionadas como um grupo quando você cria o novo grupo de
medidas. Se você não quiser incluir uma medida, como Contagem de estoque, clique com o
botão direito na medida no painel Medidas, selecione Excluir e clique em OK para confirmar a
exclusão.

8. Defina a propriedade FormatString para cada uma das três medidas restantes como #,#.

Cada grupo de medidas possui muitas propriedades diferentes disponíveis para


configuração. Na maior parte, você pode manter os valores padrão. O Capítulo 4 explica mais
sobre as propriedades que afetam o design de agregação, o posicionamento de arquivos e o
processamento de partições. Por enquanto, vamos considerar apenas as seguintes
propriedades:
 IgnoreUn RelatedDimension Determina se o SSAS exibe um valor de agregação de
nível superior para todos os membros em uma dimensão não relacionada, conforme
mostrado na Figura 1.57 . O padrão é verdadeiro.

FIGURA 1-57 Resultados da consulta mostrando a quantidade disponível por grupo de


compras

 Nome Fornece um nome para exibição em aplicativos cliente ou para referência em


expressões MDX. Você pode renomear um grupo de medidas a qualquer
momento. Por exemplo, considere alterar o nome do grupo de medidas Venda 1 para
Contagem distinta de vendas de itens de estoque.

9. Na página Uso da Dimensão, selecione o grupo de medidas Stock Holding e, na janela


Propriedades, altere o valor da propriedade IgnoreUnrelatedDimension para False.

10. Implemente o projeto, abra a página Navegador do designer de cubo, clique em Reconectar e
configure uma consulta para visualizar a Quantidade Disponível por Grupo de Compras.

A seguinte mensagem é exibida: Nenhuma linha encontrada. Clique para executar a


consulta. Como não existe nenhum relacionamento entre a medida e a dimensão, e a
propriedade IgnoreUnrelatedDimension é False, o SSAS não tem resultados para exibir na
consulta.

Importante Grupos de medidas vinculados remotamente foram preteridos no SQL Server 2016

Um grupo de medidas vinculado é um grupo de medidas criado em um banco de dados e


referenciado em um ou mais bancos de dados separados como um método de reutilização de um
design comum. Por motivos de desempenho, a Microsoft recomenda que ambos os bancos de dados
residam no mesmo servidor. A vinculação a um grupo de medidas em um servidor remoto foi
preterida no SQL Server 2016 e não será possível em uma versão futura. Em geral, o uso de grupos de
medidas vinculados, mesmo quando ambos os bancos de dados estão no mesmo servidor, não é
considerado uma prática recomendada. Portanto, o exame não testa seu conhecimento sobre o
assunto. No entanto, se quiser saber mais sobre as limitações desse recurso, consulte “Grupos de
medidas vinculados” em https://msdn.microsoft.com/en-us/library/ms174899.aspx .

Granularidade

Normalmente, o atributo de granularidade é aquele definido como chave na dimensão, mas pode
haver cenários de modelagem em que seja um atributo diferente. Para esclarecer ainda mais a
granularidade, considere uma situação em que você tem uma dimensão Data que possui atributos
Dia, Mês e Ano e uma tabela de fatos Venda que inclui uma coluna DayKey associada ao atributo Dia
como um relacionamento regular. Na dimensão Data, o atributo Mês possui duas colunas principais,
Mês e Ano. Digamos que você também tenha uma tabela de fatos Forecast na qual as vendas
previstas por mês e ano são armazenadas, conforme mostrado na Figura 1.58 .

FIGURA 1-58 Tabelas de fatos com granularidade diferente compartilhando uma dimensão comum

Para configurar corretamente o uso da dimensão para o grupo de medidas hipotético Previsão e a
dimensão Data, crie um relacionamento regular entre eles e defina o atributo de granularidade como
Mês. Quando você define esse atributo de granularidade, a lista Colunas de Dimensão na caixa de
diálogo Definir Relacionamentos exibe as duas colunas principais, Mês e Ano, para o atributo de
granularidade selecionado e, em seguida, você pode mapear essas duas colunas para as colunas do
grupo de medidas Mês e Ano.

Medidas calculadas

Uma característica importante do SSAS é a capacidade de definir medidas calculadas. Embora o


relatório em um banco de dados relacional exija que você defina uma lógica de negócios para
cálculos como margens de lucro em um relatório, você pode adicionar essa lógica de negócios a um
cubo e, assim, garantir que cada consulta que retorne a margem de lucro execute o cálculo de forma
consistente. O SSAS armazena apenas a definição da medida calculada e executa o cálculo no
momento da consulta. No entanto, o SSAS armazena em cache os resultados da consulta para
melhorar o desempenho de consultas subsequentes que solicitam o mesmo cálculo, o que o Capítulo
4 explica com mais detalhes.

Para revisar as etapas necessárias para adicionar uma medida calculada, vamos adicionar uma medida
calculada simples ao cubo DW da Wide World Importers para calcular a margem de lucro:

1. Abra o designer de cubo e clique na guia Cálculos.

2. Clique no botão Visualização de Formulário na barra de ferramentas do designer de cubo e,


em seguida, clique no botão Novo Membro Calculado na barra de ferramentas do designer
de cubo.
Uma medida calculada é um membro da dimensão Medidas calculada usando uma expressão
MDX. Você também pode criar membros calculados para outras dimensões do cubo,
conforme explicado no Capítulo 3.

3. Digite [Porcentagem de margem de lucro] na caixa Nome.

4. Na caixa Expressão, digite a seguinte expressão MDX:

[Medidas].[Lucro]/[Medidas].[Valor de vendas sem impostos]


O Capítulo 3 explica os princípios das expressões MDX e suas regras de sintaxe com mais
detalhes. Esta expressão é um exemplo simples de cálculo da porcentagem da margem de
lucro dividindo o lucro total pelo valor total das vendas. O SSAS agrega automaticamente o
numerador separadamente da agregação do denominador e então realiza a divisão. Se você
adicionar um filtro a uma consulta, o SSAS aplicará o filtro às agregações de numerador e
denominador separadamente e, em seguida, executará a divisão.

5. Na lista suspensa Format String, selecione “Porcentagem” para aplicar uma string de formato.

6. Implante o projeto para atualizar seu banco de dados multidimensional.

7. Verifique o cálculo abrindo a guia Navegador do designer de cubo, clicando em Reconectar e


arrastando Porcentagem da Margem de Lucro da pasta Medidas no painel de metadados
para a janela de consulta. O resultado é 0,497687049958665. (O navegador de cubo no SSDT
não aplica a sequência de formato.)

Este cálculo é funcionalmente equivalente à execução da seguinte instrução T-SQL no SSMS,


que produz 0,497687:

SELECIONAR
SUM(Lucro) / SUM([Total sem impostos]) AS ProfitMarginPercent
DE Fato.Venda;

Funções agregadas

Por padrão, cada nova medida criada recebe Sum como o valor da propriedade
AggregateFunction. De longe, esse é o tipo mais comum de agregação usado ao desenvolver um
cubo. No entanto, o SSAS suporta o uso de outras funções agregadas, algumas das quais são aditivas
como a função Soma, enquanto outras são semi-aditivas e não-aditivas. Uma
função semiaditiva realiza uma agregação em alguma dimensão, mas não necessariamente em todas
as dimensões, o que é descrito com mais detalhes na próxima seção. Uma função não aditiva não
agrega nada, mas executa um tipo específico de cálculo. A Tabela 1-5 lista todas as funções
agregadas suportadas pelo SSAS.

TABELA 1-5 Funções agregadas

Função agregada aditividade Descrição

Soma Aditivo Soma os valores de cada membro filho.

Contar Aditivo Conta o número de membros filhos.

Mínimo Semiaditivo Retorna o valor mais baixo para membros filhos.


Máx. Semiaditivo Retorna o valor mais alto para membros filhos.

Contagem Distinta Não aditivo Executa uma contagem de membros filhos exclusivos.

Nenhum Não aditivo Ignora a agregação e retorna um valor apenas para membros filhos

Por conta Semiaditivo Aplica a função agregada aplicável ao membro atual de uma dimens

MédiaDeCrianças Semiaditivo Soma o total dos membros filhos e depois divide o resultado pela co

Primeiro filho Semiaditivo Retorna o valor do primeiro membro filho.

Último Filho Semiaditivo Retorna o valor do último membro filho.

PrimeiroNãoVazio Semiaditivo Retorna o valor do primeiro membro filho que não está vazio.

ÚltimoNãoVazio Semiaditivo Retorna o valor do último membro filho que não está vazio.

Nota Configuração adicional exigida pela função agregada ByAccount

Para usar a função agregada ByAccount, há muitas outras etapas que devem ser executadas para
configurar adequadamente a dimensão e o comportamento do cubo. Primeiro, a dimensão da conta
deve incluir um atributo com seu tipo definido como Tipo de Conta. Em seguida, você define o
mapeamento de tipos de contas para agregar funções no designer de banco de dados, que pode ser
acessado no menu Banco de dados selecionando Editar banco de dados. Para revisar o conjunto
completo de requisitos, consulte “Criar uma conta financeira de dimensão do tipo pai-filho”
em https://msdn.microsoft.com/en-us/library/ms174609.aspx .

Definir comportamento semi-aditivo

A agregação semiaditiva é importante quando você precisa analisar valores de tabelas de fatos
pontuais, como inventário. Nesse caso, você soma os valores em uma dimensão, mas escolhe um
valor pontual ou um valor médio ao agregar na dimensão Data. Por exemplo, se você tiver contagens
de estoque para julho e dezembro, mas quiser retornar a contagem de estoque do ano, normalmente
desejará o último valor do ano, que está associado a dezembro. Outro cenário comum para semi-
aditividade são os relatórios financeiros. Você soma receitas e despesas mês a mês ao visualizar dados
trimestrais ou anuais, mas usa o último valor para ativos ou passivos.

Vamos explorar um exemplo de comportamento semiaditivo usando o grupo de medidas Stock


Holding adicionado na seção anterior. Antes de fazer qualquer alteração, abra a guia Navegador no
designer de cubo para revisar o comportamento das medidas ao manter os valores padrão da
propriedade AggregateFunction. Expanda a pasta Medidas, expanda Retenção de estoque e adicione
Quantidade disponível, Nível de novo pedido e Nível de estoque alvo à janela de consulta. Em
seguida, expanda Date e adicione Date.Calendar à janela de consulta para adicionar todos os três
níveis da hierarquia – Ano Civil, Mês Civil e Data, conforme mostrado na Figura 1.59 .
Resultados da consulta mostrando medidas selecionadas por atributos da dimensão Data na
FIGURA 1-59
página Navegador do designer de cubo

Atualmente, a função agregada aplicada a cada uma destas medidas é a função Soma. Portanto, os
valores resultantes representam um total de todos os itens em estoque, o que não é o resultado
desejado. Vamos alterar a consulta para focar em um único item de estoque para ajudar a ver o
comportamento da medição com mais clareza. Adicione um filtro selecionando Item de estoque na
lista suspensa Dimensão acima da janela de consulta e Item de estoque na lista suspensa
Hierarquia. Na lista suspensa Filter Expression, expanda All, marque a caixa de seleção USB Missile
Launcher (Green) e clique em OK. Agora você pode ver duas contagens de estoque separadas para
janeiro e junho, conforme mostrado na Figura 1.60 .

FIGURA 1-60 Resultados da consulta para um único item de estoque

Se você remover os atributos Mês e Data do calendário da consulta, a consulta retornará uma única
linha, conforme mostrado na Figura 1.61 . Os valores da medida refletem a soma dos valores
agregados do ano de 2013 a janeiro e do ano de 2013 a junho para cada medida.

FIGURA 1-61 Resultados da consulta para um único item de estoque para o ano civil CY2013

Este comportamento de agregação está incorreto porque as medidas devem refletir o valor da última
data de inventário em vez da soma. Para alterar esse comportamento, execute as seguintes etapas:

1. Abra a página Estrutura do Cubo do designer de cubo e configure a propriedade


AggregateFunction para cada uma dessas medidas como LastNonEmpty.

2. Implemente o projeto e retorne ao Navegador no designer de cubo.

3. Clique em Reconectar na barra de ferramentas e, em seguida, adicione as mesmas três


medidas à janela de consulta, adicione Ano Civil da dimensão Data e defina o filtro para Item
de estoque como lançador de mísseis USB (verde) para produzir os resultados mostrados na
Figura 1-62 .
FIGURA 1-62 Resultados de consulta corrigidos para um único item de estoque para o ano civil
CY2013

Resumo do capítulo
 Antes de começar a construir um banco de dados multidimensional, você deve dedicar algum
tempo projetando um esquema em estrela para dar suporte aos requisitos de negócios em
um ambiente OLAP. O esquema em estrela consiste em uma ou mais tabelas de fatos e
tabelas de múltiplas dimensões que você preenche a partir de sistemas OLTP usando
processos ETL. Em um projeto multidimensional criado no SSDT, você se conecta a esse
esquema em estrela criando uma fonte de dados e, em seguida, faz referência a tabelas no
esquema em estrela criando uma exibição de fonte de dados. Em seguida, você pode
adicionar objetos de dimensão ao seu projeto usando o Assistente de Dimensões e adicionar
um cubo usando o Assistente de Cubos. Você pode então ajustar os objetos de dimensão e
de cubo configurando propriedades nos designers de dimensão e de cubo,
respectivamente. Você deve implantar seu SSDT para criar o banco de dados
multidimensional e seus objetos no servidor SSAS.

 O modelo de armazenamento escolhido determina não apenas como o SSAS armazena


dados, mas também que tipo de dados ele armazena. MOLAP é o modelo de armazenamento
padrão que armazena dados detalhados e agregados para a recuperação ideal de dados. O
SSAS armazena apenas metadados quando você usa o modelo de armazenamento ROLAP,
cria agregações na fonte de dados relacional e recupera solicitações de dados da fonte de
dados convertendo consultas MDX em instruções SQL específicas da plataforma. O ROLAP é
benéfico quando você precisa de acesso aos dados quase em tempo real. O SSAS armazena
dados agregados para o modelo de armazenamento HOLAP e determina, no momento da
consulta, se deve recuperar dados agregados do SSAS ou da fonte relacional após converter a
consulta MDX em uma instrução SQL. HOLAP é útil quando a maioria das consultas exige
dados agregados.

 O SSAS oferece suporte a muitos tipos diferentes de modelos dimensionais. O exame testa
seu conhecimento sobre a seleção e configuração dos seguintes tipos:

 Fato Use este modelo dimensional quando desejar incluir uma dimensão degenerada
em seu banco de dados. Na página Uso da Dimensão do designer de cubo, você deve
relacionar a dimensão a um grupo de medidas usando o tipo de relacionamento Fato.

 Pai-filho Utilize este modelo dimensional quando uma tabela de dimensões incluir um
relacionamento de chave estrangeira consigo mesma. Adicione a coluna que contém
a chave estrangeira como um atributo na dimensão e defina sua propriedade Usage
como Parent. Opcionalmente, você pode configurar propriedades aplicáveis somente
a um atributo pai.

 Interpretação Use este modelo dimensional quando você tiver uma dimensão
representada diversas vezes em uma tabela de fatos em diferentes contextos. Por
exemplo, você pode ter Data da fatura e Data de entrega com base na mesma
dimensão Data. Você cria um objeto de dimensão em seu projeto, mas adiciona a
dimensão quantas vezes for aplicável ao cubo. Na página Uso da Dimensão do
designer de cubo, você relaciona cada dimensão do cubo ao mesmo grupo de
medidas usando o tipo de relacionamento Regular, mas define diferentes atributos de
granularidade, que se relacionam a diferentes colunas do grupo de medidas.
 Referência Use este modelo dimensional quando precisar dar suporte ao slice and
dice por uma dimensão para a qual não existe nenhuma chave estrangeira na tabela
de fatos, embora esteja relacionada a uma dimensão intermediária que possui uma
chave estrangeira na tabela de fatos. O atributo-chave para a dimensão de referência
deve existir como um atributo não-chave na dimensão intermediária. Na página Uso
da Dimensão do designer de cubo, você define um relacionamento Referenciado
entre a dimensão de referência e o grupo de medidas e especifica a dimensão
intermediária.

 Mineração de dados Use esse modelo dimensional quando desejar usar um algoritmo
de mineração de dados para criar uma dimensão útil para fatiar e dividir, como
clusters de clientes. Primeiro você deve criar um modelo de mineração de dados para
definir a técnica de mineração de dados e as colunas às quais o algoritmo de
mineração de dados será aplicado. O Assistente de Mineração de Dados permite criar
uma dimensão na qual armazenar os resultados e, opcionalmente, um cubo.

 Muitos para muitos Use esse modelo dimensional quando precisar acumular medidas
por diferentes atributos de dimensão sem supercontar os resultados nas
agregações. Normalmente, você deve adicionar uma tabela ponte como um grupo de
medidas ao cubo para suportar essa estrutura e ocultar o grupo de medidas do
cubo. Na página Uso da Dimensão do designer de cubo, defina um relacionamento
Regular entre a dimensão e a tabela de ponte e um relacionamento Muitos-para-
Muitos entre a dimensão e o grupo de medidas original. Você especifica a tabela
ponte como o grupo de medidas intermediárias para o relacionamento muitos para
muitos.

 Dimensão de alteração lenta Use este modelo dimensional quando precisar rastrear
alterações em um atributo ao longo do tempo para um projeto SCD Tipo 2. No
design da dimensão, você deve incluir o atributo chave, bem como o atributo que
contém a chave comercial na tabela de origem e, em seguida, ocultar o atributo
chave definindo sua propriedade AttributeHierarchyVisible como False.

 Use a propriedade Type para objetos de dimensão e atributo quando precisar que o SSAS ou
aplicativos cliente invoquem um comportamento específico quando esse objeto for
consultado. O tipo de dimensão mais comum a ser implementado é Tempo, embora você
também deva estar familiarizado com os conceitos de implementação dos tipos de dimensão
Contas e Moeda.

 Depois de adicionar uma hierarquia definida pelo usuário a uma dimensão, você deverá
revisar e corrigir os relacionamentos de atributos conforme necessário. Uma hierarquia
definida pelo usuário fornece um caminho de navegação predefinido que simplifica a
exploração do cubo em um aplicativo cliente. O SSAS usa relacionamentos de atributos
correspondentes para otimizar o armazenamento e a recuperação de dados para hierarquias
naturais.

 Use o designer de cubo para incluir e configurar medidas e grupos de medidas após criar
inicialmente um cubo usando o Assistente de Cubo. É importante configurar corretamente as
propriedades AggregateFunction e FormatString para cada medida para garantir que os
valores sejam agregados adequadamente e exibidos de forma legível nos aplicativos
cliente. Você também pode adicionar medidas calculadas para incluir lógica de negócios para
valores não escalares que são importantes para a análise de negócios.
 O SSAS inclui as seguintes funções agregadas para dar suporte à semiaditividade: Min, Max,
ByAccount, AverageOfChildren, FirstChild, LastChild, FirstNonEmpty e LastNonEmpty. Uma
agregação semiaditiva adiciona valores em uma dimensão, mas não em outras. Casos de uso
comuns para comportamento semiaditivo são relatórios de contas financeiras e análise de
inventário.

Experimento mental
Neste experimento mental, demonstre suas habilidades e conhecimento dos tópicos abordados neste
capítulo. Você pode encontrar as respostas para esse experimento mental na próxima seção.

A Humongous Insurance é uma empresa que vende apólices de seguros para consumidores
individuais e empresas em um único país e possui escritórios em quatro regiões diferentes deste
país. O valor pelo qual cada apólice de seguro é vendida é denominado prêmio. Anualmente, o
gerente de vendas projeta cotas mensais de prêmios de seguros por região. Você foi contratado
como desenvolvedor de BI na Humongous Insurance para criar um banco de dados multidimensional
SSAS que permite aos usuários analisar vendas e cotas.

O ambiente de banco de dados atual inclui um sistema OLTP denominado Vendas e outro sistema
OLTP denominado Cotas. Ambos os bancos de dados são executados atualmente no SQL Server 2016.

Antes de criar o banco de dados multidimensional, você deve projetar e preencher um data
warehouse que possa responder aos seguintes tipos de perguntas:

 Quantas apólices foram vendidas por ramo de seguro (pessoal ou comercial), cliente,
território de vendas e data?

 Qual é a receita, o custo, o lucro e a porcentagem de lucro das apólices vendidas por ramo de
seguro, cliente, território de vendas e data?

 Qual é a cota de apólices de seguro por território de venda e mês?

Para satisfazer os requisitos de negócio, o banco de dados multidimensional deve possuir as


seguintes características:

 Um cliente pode ter diversas políticas, mas cada política é limitada a um cliente.

 A dimensão do cliente deve incluir o nome e o número de telefone do cliente. O número de


telefone deve estar disponível para relatórios, mas não para operações de fatiamento e corte
em cubos.

 A dimensão do território de vendas deve apoiar a perfuração de região para estado/província


para cidade.

 A dimensão de data deve suportar a perfuração de ano para mês até a data.

Com base nessas informações básicas e nos requisitos de negócios, responda às seguintes perguntas:

1. Esboce as tabelas de fatos, as tabelas de dimensões e os relacionamentos no esquema em


estrela que atendem aos requisitos de negócios.
2. Descreva as etapas necessárias para dar suporte à funcionalidade de detalhamento na
dimensão do território de vendas com desempenho de consulta ideal.

3. Qual propriedade você define para ocultar o atributo de número de telefone na dimensão do
cliente das operações de divisão e divisão, mas permite que ele seja incluído na dimensão
como uma propriedade de membro?

A. AtributoHierarquiaOrdenado

B. AtributoHierarquiaVisível

C. AtributoHierarchyEnabled

D. É Agregável

4. Qual propriedade você define para cada medida para melhorar a legibilidade dos valores em
um aplicativo cliente?

A. Tipo de dados

B. MedirExpressão

C. Função Agregada

D. FormatString

5. Ao navegar na dimensão de data, você percebe que os membros do atributo Mês são
classificados em ordem alfabética. Como você corrige esse problema?

6. Qual é o atributo de granularidade a ser configurado ao definir o relacionamento entre o


grupo de medidas de cota e a dimensão de data?

7. Como você apoia a porcentagem de lucro no design da sua solução?

A. Adicione uma coluna da tabela de fatos e defina FormatString da nova medida como
Percent.

B. Crie uma medida calculada para dividir o lucro pela receita.

C. Adicione um novo grupo de medidas ao cubo para isolar a medida.

D. Defina a propriedade MeasureExpression em uma nova medida para dividir o lucro


pela receita.

8. Ao processar e, em seguida, consultar o cubo para visualizar a cota por cliente, você verá o
mesmo valor de cota repetido em cada linha. Que medidas você pode tomar para evitar a
exibição desses valores?

Respostas de experimentos mentais


Esta seção contém a solução para o experimento mental.
1. O design do esquema em estrela inclui duas tabelas de fatos — Vendas de Políticas e Cotas
de Políticas — e quatro tabelas de dimensões: Data, Cliente, InsuranceLine e SalesTerritory. As
colunas da tabela e os relacionamentos entre as tabelas de fatos e as tabelas de dimensões
são mostrados na Figura 1.63 .

FIGURA 1-63 Projeto de esquema em estrela

2. Na página Estrutura de Dimensão do designer de dimensão da dimensão de território de


vendas, arraste o Ano para o painel Hierarquias para criar uma nova hierarquia definida pelo
usuário, arraste o atributo Mês para a nova hierarquia e solte-o abaixo de Ano e, em seguida,
arraste o atributo Data atributo à hierarquia e coloque-o abaixo de Mês. Clique com o botão
direito no nome da hierarquia e digite um novo nome, como Calendário. Na página
Relacionamentos de Atributos do designer de dimensão, arraste o atributo Mês e solte-o no
atributo Ano para organizar os atributos da esquerda para a direita na seguinte sequência:
Data, Mês e Ano. Você pode definir a propriedade RelationshipType para cada
relacionamento de atributo como Rígido porque os membros não mudam nessa dimensão.

3. A resposta é C. AttributeHierarchyEnabled. Essa propriedade de atributo impede que o SSAS


armazene dados para os membros desse atributo e os oculta de aplicativos cliente para uso
em consultas em linhas ou colunas ou como filtro.

A resposta A, AttributeHierarchyOrdered, está incorreta porque esta propriedade especifica


apenas se os membros do atributo estão ordenados. A resposta B, AttributeHierarchyVisible,
está incorreta porque, embora oculte o atributo do aplicativo cliente para divisão e divisão em
cubos, ela não habilita o atributo como uma propriedade de membro. A resposta D,
IsAggregatable, está incorreta porque esta propriedade remove o membro All da hierarquia
de atributos.

4. A resposta é D. A propriedade FormatString adiciona um separador de milhares, define o


número de casas decimais ou adiciona símbolos como símbolo de moeda ou sinal de
porcentagem, o que facilita a leitura dos valores em aplicativos cliente.

A resposta A, DataType, está incorreta porque o tipo de dados não melhora a legibilidade dos
valores de medida. A resposta B, MeasureExpression, está incorreta porque afeta o cálculo de
uma medida, mas não altera sua aparência. A resposta C, AggregateFunction, também está
incorreta porque altera a forma como o SSAS retorna um valor para membros pais, somando
ou contando, por exemplo, mas não altera a aparência da medida.

5. Para o atributo Mês, vincule a propriedade KeyColumn às colunas Ano e Mês na origem. Além
disso, certifique-se de que a propriedade OrderBy esteja definida como Key.

6. Defina Mês como o atributo de granularidade. Em seguida, você mapeia esse atributo para as
colunas Ano e Mês no grupo de medidas na caixa de diálogo Definir Relacionamento.

7. A resposta é B. Adicione o lucro como uma medida calculada definindo uma expressão MDX
como esta:

[Medidas].[Lucro] / [Medidas].[Receita]
8. A resposta A está incorreta porque o percentual de lucro não é aditivo e deve ser calculado
no momento da consulta e, portanto, não pode ser armazenado na tabela de fatos. A
resposta C está incorreta por um motivo semelhante. Um grupo de medidas requer uma
medida baseada em uma coluna da tabela de fatos e a porcentagem de lucro não pode ser
armazenada na tabela de fatos. A resposta D está incorreta porque o cálculo
MeasureExpression é executado em nível de detalhe e depois agregado, o que produz um
resultado incorreto. O cálculo da percentagem de lucro deve basear-se no valor agregado do
lucro e dividir esse valor pelo valor agregado da receita.

9. Defina IgnoreUn RelatedDimension no grupo de medidas que contém a medida de cota


como False.

Você também pode gostar