Usando cubos virtuais no IBM InfoSphere Warehouse 9.7 para combinar cenários de negócios e melhorar desempenho

Cubos virtuais são um dos novos recursos de Cubing Services do IBM InfoSphere™ Warehouse 9.7. O cubo virtual fornece um modo de mesclar cubos diferentes para permitir um único destino de consulta que retorna resultados mesclados dos cubos que o compõem. Cubos virtuais podem ser usados para melhorar drasticamente o tempo de resposta das consultas ao servidor de cubos usando um particionamento eficiente dos dados para utilização ótima do cache (em alguns casos, tempos de resposta mais de 100 vezes melhores). Cubos virtuais também oferecem uma solução para combinar resultados mesclando diversos cubos regionais em um cubo do país. Eles também permitem mesclar números de vendas com taxas de câmbio para dar uma visão global do negócio. Este artigo explica como os cubos virtuais são criados, como eles funcionam, e como usá-los no InfoSphere Warehouse Cubing Services 9.7.

Adrian Mitrea, Software Engineer, IBM

Photo of Adrian MitreaAdrian Mitrea liderou o esforço de desenvolvimento para acrescentar a função de cubos virtuais ao IBM InfoSphere Warehouse Cubing Services 9.7. Ele entrou na IBM como estagiário em 2003 e se formou em Ciências da Computação na Universidade Técnica de Cluj-Napoca, Romênia.



10/Set/2009

Introdução

Um cubo virtual é um cubo lógico que é definido em termos de exatamente dois cubos existentes: seja dois cubos reais, dois outros cubos virtuais, ou um cubo virtual e um cubo real. Se for necessário agregar mais de dois cubos, eles podem ser mesclados em pares. Os cubos virtuais resultantes podem ser mesclados com outros cubos como mostrado na Figura 1. A mescla é feita com base nos nomes de dimensão. As dimensões com o mesmo nome em ambos os cubos serão mescladas. As dimensões de um cubo que não tiverem uma dimensão correspondente com o mesmo nome no outro cubo serão simplesmente acrescentadas ao cubo virtual. Cubos virtuais podem ser usados para combinar dois cubos que compartilham qualquer uma das duas, ou várias dimensões. Considera-se que dois cubos compartilham uma dimensão se uma dimensão com um nome particular existir em ambos os cubos. Por exemplo, se cada cubo do par tiver uma dimensão chamada [Time], no contexto dos cubos virtuais considera-se que ambos os cubos compartilham a dimensão [Time]. Os dois cubos que são mesclados podem pertencer a modelos de cubo diferentes, assim eles podem ter estruturas internas completamente diferentes. O principal requisito é que eles compartilhem pelo menos uma dimensão. Os cubos virtuais e os cubos dependentes devem residir no mesmo banco de dados, e o cubo virtual só pode ser definido usando cubos do mesmo servidor de cubos.

Por exemplo, a Figura 1 mostra cubos agregados para formar cubos virtuais. Cubos virtuais são indicados por um asterisco (*). Na figura os cubos Store Sales e Web Sales têm dimensões quase idênticas, e se mesclam para formar o cubo virtual Total Sales. O cubo virtual Total Sales e o cubo Inventory compartilham uma dimensão Time comum, e se mesclam para formar o cubo virtual Inventory Sales. Observe que cubos virtuais (Total Sales) podem ser mesclados para formar outros cubos virtuais (Inventory Sales). O cubo virtual Inventory Sales é útil neste caso porque ele agrega cubos que fazem parte de dois problemas de negócios separados: o cubo Inventory é usado para rastrear inventário, e o cubo Sales é usado para rastrear números de vendas.

Figura 1. Cubos agregados para formar cubos virtuais
Cubes showing Store Sales and Web sales feeding into Total Sales*, and Inventory and Total Sales* feeding into Inventory Sales*

Quando uma consulta é emitida para um cubo virtual, aquela consulta é roteada para os cubos dependentes, o que produz dois resultados intermediários que são agregados de acordo com o operador de mescla do cubo virtual. Os operadores de mescla são SUM, MINUS, PRODUCT, DIVIDE, MAX, MIN, e NOP (retorna dados do primeiro cubo na definição do cubo virtual).

Por exemplo:

  • Ao mesclar [CubeA] e [CubeB] para formar [Virtual Cube] usando o operador SUM, selecione de [Virtual Cube] = selecione de [CubeA] + selecione de [CubeB].
  • Ao mesclar [CubeA] e [CubeB] usando o operador MAX, selecione de [Virtual Cube] = MAX (selecione de [CubeA], selecione de [CubeB]).

Explorando cenários de cubos virtuais

Para se ter uma idéia de quando cubos virtuais podem ser úteis para seu aplicativo, alguns cenários são detalhados nesta seção.

Cenário de melhoria de baixa latência: Partição de dados baseados em tempo

Todas as informações de vendas são armazenadas em um cubo [AllSales]. Os dados de fatos são acrescentados toda noite, o que requer a reconstrução do cache de dados e a atualização das tabelas de consulta materializadas (MQTs). Para cubos grandes, isto requer uma significativa quantidade de tempo. Para melhorar o desempenho, é possível particionar os dados do cubo [AllSales] com base no tempo para formar a base de dois cubos [HistoricSales] e [CurrentMonthSales], e então definir um cubo virtual chamado [VirtualSales] para unir os dois cubos. O cubo [HistoricSales] é usado para registrar as informações do histórico de vendas que não são alteradas frequentemente. O cubo menor [CurrentMonthSales] é usado para registrar as informações de vendas diárias do mês atual. O cubo [CurrentMonthSales] é chamado de cubo delta.

O desempenho da atualização do cache melhora devido a vários fatores:

  • O tempo de atualização do MQT agora foi reduzido, porque freqüentemente só os MQTs pequenos baseados em [CurrentMonthSales] devem ser atualizados.
  • MQTs grandes baseados em [HistoricSales] só são atualizados mensalmente.
  • Como os resultados da consulta ao cubo [HistoricSales] são previamente armazenados em cache, o desempenho das consultas feitas aos dados de vendas do período de tempo inteiro é melhorado.
  • Devido ao tamanho menor do cubo [CurrentMonthSales], o desempenho das consultas feitas com relação aos dados de vendas do mês atual ou do período de tempo inteiro é melhorado.

É possível particionar dados baseados em tempo definindo visões do banco de dados que contêm dados históricos e os dados do mês atual respectivamente. Os modelos de cubo de [HistoricSales] e [CurrentMonthSales] usam suas respectivas visões de fatos em vez de tabelas de banco de dados. As visualizações devem ser recriadas mensalmente quando os dados acumulados na visualização do mês atual são passados para a visualização histórica. As melhorias de desempenho resultantes deste cenário estão diretamente relacionadas ao tamanho do cubo [CurrentMonthSales] com relação ao cubo [HistoricSales]. O cubo histórico deve ser o maior possível, e o CurrentMonth incremental deve ser o menor possível para se obter os melhores resultados.

Um cenário de teste usava um cubo do mês atual cuja tabela de fatos com 3 milhões de linhas, e o cubo histórico é baseado em uma tabela de fatos de 900 milhões de linhas. As consultas de teste feitas por um único usuário são mais de 100 vezes mais lentas para o cubo grande [AllSales], que contém todos os dados, que para o cubo virtual [VirtualSales]. Para alcançar relações de tamanho semelhantes entre o cubo delta e o cubo de dados históricos, o cubo delta pode ser configurado para conter menos dados de vendas por meio de atualizações semanais, bi-semanais e assim por diante, dependendo do volume de dados.

O seguinte exemplo é baseado no banco de dados GOSALES que é incluído no release 9.7. Para fins de demonstração, a partição de tempo é calculada somente por ano. Dois cubos, [CSSalesMarketing_Recent] e [CSSalesMarketing_Historic] são criados, e um cubo virtual [CSSalesMarketing] agrega os dois cubos. A tabela de fatos de [CSSalesMarketing_Recent] foi substituída por uma visão que particiona os dados baseados no ano, como mostrando na Listagem 1.

Listagem 1. Criar uma visão dos fatos recentes
create view GOSALESDW.fact_recent as select ORDER_DAY_KEY, ORGANIZATION_KEY, 
EMPLOYEE_KEY, RETAILER_KEY, RETAILER_SITE_KEY, PRODUCT_KEY, PROMOTION_KEY, 
ORDER_METHOD_KEY, SALES_ORDER_KEY, SHIP_DAY_KEY, CLOSE_DAY_KEY, QUANTITY, 
UNIT_COST, UNIT_PRICE, UNIT_SALE_PRICE, GROSS_MARGIN, SALE_TOTAL, GROSS_PROFIT 
from gosalesdw.sls_sales_fact fact, gosalesdw.go_time_dim time 
where fact.ORDER_DAY_KEY = time.DAY_KEY and time.CURRENT_YEAR = 2007;

A listagem 2 mostra como criar uma visão de fatos históricos

Listagem 2. Criar uma visão de fatos históricos
create view GOSALESDW.fact_historic as select ORDER_DAY_KEY, ORGANIZATION_KEY, 
EMPLOYEE_KEY, RETAILER_KEY, RETAILER_SITE_KEY, PRODUCT_KEY, PROMOTION_KEY, 
ORDER_METHOD_KEY, SALES_ORDER_KEY, SHIP_DAY_KEY, CLOSE_DAY_KEY, QUANTITY, 
UNIT_COST, UNIT_PRICE, UNIT_SALE_PRICE, GROSS_MARGIN, SALE_TOTAL, GROSS_PROFIT 
from gosalesdw.sls_sales_fact fact, gosalesdw.go_time_dim time 
where fact.ORDER_DAY_KEY = time.DAY_KEY and time.CURRENT_YEAR < 2007;

As colunas selecionadas como colunas de visão são todas as colunas definidas na tabela de fatos original gosalesdw.sls_sales_fact, que foi particionada. Os modelos de cubo dos dois cubos, recente e histórico, são muito simples, e para fins de demonstração tem uma dimensão [Time] e uma medida cada: Total de Vendas (Recente) e Total de Vendas (Histórico), respectivamente. O cubo virtual renomeia ambas estas medidas para Total de Vendas, e agrega os cubos histórico e recente usando o operador adição de mescla. O resultado das consultas ao cubo virtual é igual à soma das mesmas consultas aos dois cubos.

As Figuras 2, 3, e 4 ilustram usando a dimensão [Time] e o Total de Vendas medido com Microsoft® Excel. Observe que o total geral do cubo virtual é igual ao total geral de [CSSalesMarketing_Recent] mais o total geral de [CSSalesMarketing_Historic]. Além disso, [CSSalesMarketing_Recent] só tem valores do ano 2007, enquanto [CSSalesMarketing_Historic] só tem valores dos anos anteriores a 2007.

A Tabela 1 e a Figura 2 mostram os dados de [CSSalesMarketing_Recent] da Lista de Campos da Tabela Dinâmica quando Tempo e Total de Vendas (Recente) são selecionados.

Tabela 1. Dados de [CSSalesMarketing_Recent]
Total de vendas (recente) 2007Total geral
Total1.117.336.274,071.117.336.274,07
Figura 2. [CSSalesMarketing_Recent] só tem dados de 2007
Screen cap showing data in Table 1

A Tabela 2 e a Figura 3 mostram os dados de [CSSalesMarketing_Historic] da Lista de Campos da Tabela Dinâmica quando Tempo, Ano, e Total de Vendas (Histórico) são selecionados.

Tabela 2. Dados de [CSSalesMarketing_Historic]
Total de vendas (histórico) 200420052006Total geral
Totais914.352.803,721.159.195.590,161.495.891.100,903.569.439.494,78
Figura 3. [CSSalesMarketing_Historic] só tem dados históricos
Screen cap showing data from Table 2

A Tabela 3 e a Figura 4 mostram os dados dos cubos mesclados da Lista de Campos da Tabela Dinâmica quando Tempo, Todos, Ano e Total de Vendas são selecionados.

Tabela 3. Vendas combinadas
Vendas2004200520062007Totais
Histórico914.352.803,721.159.195.590,161.495.891.100,903.569.439.494,78
Recente1.117.336.274,071.117.336.274,07
Total geral4.686.775.768,85
Figura 4. [CSSalesMarketing] tem dados históricos e recentes
Screen cap showing data from Table 3

Faça o download de GSDB_TimePartitionExample para obter um exemplo de definições de cubos e cubos virtuais do cenário de partição de tempo para explorar os cubos virtuais.

Visão global da empresa: Cenário de conversão de moedas

Todas as informações de vendas da empresa estão armazenadas em um cubo chamado [GlobalSales], e há uma necessidade comercial de converter alguns dos números de vendas que estão em dólares dos EUA para outras moedas. Se as informações de vendas e de taxas de câmbio estiverem no cubo [GlobalSales], o cubo conterá muitos dados redundantes e será difícil de manter. Para resolver este problema, é possível criar um cubo chamado [CurrencyExchange] para armazenar as taxas de câmbio e manter o cubo [GlobalSales] inalterado, e definir um cubo virtual [SalesConversion] para tratar da conversão de moeda dos dados de vendas. Os cubos [GlobalSales] e [CurrencyExchange] compartilham algumas dimensões, como Tempo, mas geralmente eles têm estruturas diferentes.

O cubo virtual [SalesConversion] precisa definir um membro calculado que faz a conversão de moeda atual. Como a conversão de moeda atual pode não ser feita diariamente, mas apenas em datas ou intervalos predefinidos como mensal ou semanalmente, as funções ClosingPeriod e OpeningPeriod podem ser usadas neste cenário. Por exemplo, a Listagem 3 define os membros calculados usados na conversão de moeda se o câmbio for feito ao final de cada mês.

Listagem 3. Membros calculados da conversão de moeda
Calculated member name: Conversion2
Calculation: closingperiod([Time].[Month], [Time].currentmember), 
		[SalesConversion].[Measures].[CONVERSION_TO_LOCAL])
		
Calculated member name: UnitSalesLocal
Calculation:[ Virtual Cube].[Measures].[Conversion2] * 
		[SalesConversion].[Measures].[Unit sale price]

Observe que um membro calculado virtual usa o outro.

Mesclando cubos diferentes: Cenário de inventário e vendas

Às vezes é útil mesclar cubos que não têm muitas dimensões em comum, mas para fazer certas consultas, agregar estes cubos pode fazer sentido. Por exemplo, o cubo virtual [Inv Sales] que mescla um cubo [Inventory] e um cubo [Sales], contém certas dimensões que são comuns entre os cubos, incluindo [Time] e [Product], e outras dimensões que não são comuns. Os dois cubos são soluções para dois problemas de negócios distintos: rastrear os principais indicadores de desempenho de vendas, e analisar os níveis de inventário.

Ao agregar dois destes cubos, é possível extrair informações como a eficiência do gerenciamento de recursos. O cubo virtual contém a união de todas as dimensões disponíveis. Uma consulta que usa as dimensões comuns é executada em paralelo para cada um dos cubos, e os resultados são agregados de acordo com o operador de mescla do cubo virtual.

Por exemplo, é possível calcular a eficiência de gerenciamento de recursos usando uma fórmula de proporção de giro de inventário, como mostrado na Listagem 4.

Listagem 4. Cálculo do giro do inventário
Inv Turnover Ratio = [Inv Sales].[Measures].[Cost of Goods Sold] / 
	[Inventory].[Measures].[Average Inventory] 
	
where
	
[Inv Sales].[Measures].[Cost of Goods Sold] = 
	[Inventory].[Measures].[Cost of Goods] * 
	[Sales].[Measures].[Quantity Sold].

Os números do banco de dados de exemplo da Tabela 4 foram gerados aleatoriamente, assim eles podem não necessariamente representar os valores do intervalo real.

Tabela 4. Proporção de giro de inventário obtida dos cubos [Sales] e [Inventory] em janeiro de 2000
Categoria de itemCusto das mercadorias (Inventário)Quantidade (Vendas totais)Custo das mercadorias vendidas (Vendas do inventário)Inventário médio (Inventário) Razão de giro de inventário (Vendas do inventário)
Doméstico$483,764.816$2.329.812,24$1.162.019,662.0
Jóias$366,362.963$1.085.509,86$569.437,791.9
Sapatos$4.882,4846.736$228.187.351,60$103.371.760,702.2
Esportivos$654,724.316$2.825.771,52$1.422.073,662.0

Mesclando múltiplos cubos de vendas: Cenário de vendas na Web e na loja

Quando houver dados de desempenho de vendas sendo rastreados em cubos diferentes, um cubo virtual fornece um modo de se ter a visão geral ao agregar estes cubos separados. Por exemplo, se houver um cubo chamado [Web Sales] que rastreia o desempenho das vendas na Internet, e outro cubo chamado [Store Sales] com os números de vendas realizadas nas lojas físicas, é possível usar um cubo virtual chamado [Total Sales] para ter uma visão geral do desempenho dos negócios.

Neste exemplo ambos os cubos [Web Sales] e [Store Sales] têm dimensões semelhantes, como [Product] e [Date], mas os cubos têm estruturas diferentes. O cubo [Store Sales] tem uma dimensão extra [Store], como mostrado na lista de campos da tabela dinâmica da Figura 5. Da mesma forma [Web Sales] tem uma dimensão [Websites] que não existe em [Store Sales]. Para fins de demonstração, o cubo virtual [Total Sales] renomeia a dimensão [Date] de ambos os cubos [Date (Total Sales)], e renomeia a dimensão [Items] de ambos os cubos para [Items (Total Sales)]. Esta operação não é necessária, pois contanto que as dimensões [Date] e [Items] tenham o mesmo nome em [Web Sales] e [Store Sales], eles são mesclados.

[Total Sales] também renomeia duas medidas originadas de cada cubo para assegurar que elas tenham o mesmo nome e sejam mescladas. [Gross Profit (Store Sales)] e [Gross Profit (Web Sales)] são ambos renomeados para [Gross Profit (Total Sales)]. Os cubos [Web Sales] e [Store Sales] são agregados com o operador adição (+) de mescla, que faz com que os resultados das consultas feitas ao cubo virtual [Total Sales] seja a soma das consultas com relação a [Web Sales] e [Total Sales]. Por exemplo, a Figura 6 mostra a Lista de campos PivotTable com Data (Total Sales), Itens (Total Sales), e Lucro Bruto (Total Sales) selecionados. O Lucro Bruto (Total Sales) é igual a $6.425.085.101,50, como mostrado na Figura 5.

Figura 5. [Total Sales] agrega [Web Sales] e [Store Sales]
Screen cap showing the PivotTable Field list and Gross Profit (Total Sales) numbers

Mesclando cubos

Esta seção descreve a mescla de dois cubos usando o processo de mescla que acontece no tempo de execução. Quando o servidor de cubos é inicializado, os cubos virtuais só são instanciados depois que todos os cubos dependentes são instanciados. Se os dois cubos que compõem o cubo virtual tiverem dimensões com nomes idênticos, essas dimensões são selecionadas para a mescla. Se um nome de dimensão de um cubo dependente não for encontrado no outro cubo, aquela dimensão é simplesmente acrescentada ao cubo virtual sem nenhuma mescla. A Tabela 5 mostra um exemplo de mescla das dimensões do cubo.

Tabela 5. Mesclando dimensões do cubo para formar um cubo virtual
Vendas +Inventário >Inventário de Vendas
ProdutoProdutoProdutoMescla dimensões com nomes idênticos
TempoTempoTempoMescla dimensões com nomes idênticos
InventárioInventárioAdiciona as dimensões sem contrapartida
LojaOculta as dimensões indesejadas

Há uma opção de design de cubo virtual para ocultar dimensões dos cubos, para que elas não existam no cubo virtual. Ocultar uma dimensão em um cubo virtual só afeta aquele cubo virtual. As dimensões e os membros também podem ser renomeados para o cubo virtual para mesclar os elementos desejados, como descrito a seguir neste artigo.

Quando as dimensões de ambos os cubos são selecionadas para mescla, a mescla é feita nas hierarquias padrão definidas para cada dimensão. O processo de mescla itera os níveis das hierarquias de ambas as dimensões, começando no nível zero, e mescla os níveis que têm nomes idênticos. Se os nomes não forem idênticos os dois níveis ainda são mesclados, e o nome do nível resultante é a concatenação dos nomes dos níveis originais. Se uma das hierarquias for maior que a outra, os níveis restantes da hierarquia maior são acrescentados à hierarquia virtual. Observe que níveis não podem ser renomeados.

Observe especialmente as definições de hierarquia para os cubos dependentes. Certifique-se de que os níveis mesclados sejam semanticamente idênticos. Caso contrário, os resultados da mescla dos níveis serão sem sentido.

Nos exemplos abaixo os cubos têm níveis equivalentes chamados Estado (como Califórnia nos EUA) e Província (como Ontário no Canadá). Na Tabela 6 os dois níveis estão na mesma profundidade, portanto sua mescla produz o nível Província Estadual que contém os membros Califórnia e Ontário.

Tabela 6. A mescla dos nomes de níveis das dimensões comuns deve ser feita nas hierarquias com níveis que sejam semanticamente idênticos
Vendas no lesteVendas no oesteTodas as vendas
PaísPaísPaís
EstadoProvínciaProvíncia Estadual (os nomes sem correspondência são concatenados)
CidadeCidadeCidade
BairroBairro

Na Tabela 7 Estado e Província estão em níveis diferentes, e não serão mesclados entre si. Ao invés, Região (como Pacífico nos EUA, que não tem nenhum equivalente no Canadá) é mesclada com Província, mas Região e Província não são semanticamente idênticas.

Observe que uma consulta ao nível de Bairro do cubo virtual no exemplo só retorna resultados do cubo que contém aquele nível, como Vendas no leste. Como Vendas no oeste não tem nenhum conhecimento daquele nível, os valores retornados só podem vir de Vendas no leste. Uma consulta ao nível Cidade da hierarquia do mesmo cubo virtual retorna resultados de ambos os cubos, porque ambos os cubos contêm um nível chamado Cidade.

Tabela 7. Se os elementos não se alinharem semanticamente, é possível obter resultados ruins.
Vendas no lesteVendas no oesteTodas as vendas
PaísPaísPaís
RegiãoProvínciaRegião Província (níveis sem correspondência produzem resultados sem sentido)
EstadoEstado

Além da mescla de níveis, os cubos virtuais também executam a mescla de membros das dimensões comuns dos cubos dependentes. Os membros também são mesclados de acordo com seus nomes, como mostrado na Figura 6 e na Tabela 8.

Figura 6. Mesclando membros
Cube A and Cube B combining to form a virtual cube
Tabela 8. Mesclando membros para formar um cubo virtual
Cubo ACubo BCubo virtual
Vendas na lojaVendas na lojaVendas na lojaMescla os membros com nomes idênticos
Unidade de vendas no lesteUnidade de vendas no lesteAdiciona os membros sem correspondência ao cubo virtual
Unidade de vendas no oesteUnidade de vendas no oesteAcrescenta os membros sem correspondência ao cubo virtual

Uma consulta feita a um membro virtual mesclado é executada em paralelo em ambos os cubos dependentes. Os resultados são agregados pelo cubo virtual de acordo com o operador de mescla. Se a consulta for feita com relação a um membro virtual baseado em um membro que existe em apenas um dos cubos, o resultado é idêntico ao de quando a consulta é feita com relação ao cubo dependente que contém aquele membro.


Trabalhando com cubos virtuais

Cubos virtuais são definidos usando o Design Studio. As tarefas administrativas dos cubos virtuais são executadas usando o aplicativo Cubing Services Administration Console. A Listagem 5 e a Figura 7 mostram como os elementos dos cubos virtuais aparecem no Design Studio. As pastas especialmente notáveis aparecem entre asteriscos.

Figura 7. Visão dos elementos dos cubos virtuais no Design Studio
Screen cap showing the folder structure described in Listing 5
Listagem 5. Estrutura de pastas do Design Studio
VirtualCubes
    Data Diagrams
    Data Models
        Database Model.dbm
            Database
            SQL Statements
            OLAP Objects
                CSSalesMarketing_Historic
                    FACT
                    Time
                    Cubes
                        *CSSalesMarketing_Historic* (this is a cube)
                            Time
                            Cube Facts (CSSalesMarketing_Historic)
                CSSalesMarketing_Recent
                    FACT
                    Time
                    Cubes
                        *CSSalesMarketing_Recent* (this is a cube)
                            Time
                            Cube Facts (CSSalesMarketing_Recent)
                *CSSalesMarketing* (this is a virtual cube)
                    MDX Calculated Measures
                    *Virtual Dimensions* (only renamed virtual dimensions appear here)
                        Time
                            *MDX Calculated Members*
                            Virtual Members
                    *Virtual Measures*
                        Sale total
                        Sale total
                Shared Dimensions
            GOSALESDW
            MDX
            Schema
    Other Files
    SQL Scripts

Complete as seguintes etapas para criar cubos virtuais:

  1. Acrescente um cubo virtual ao modelo usando a opção Adicionar Cubo Virtual.
  2. Selecione os dois cubos a serem agregados para formar o cubo virtual. É possível selecionar qualquer cubo da lista de cubos disponíveis.
  3. Opcionalmente, é possível renomear quaisquer dimensões existentes nos cubos dependentes selecionando Adicionar Dimensão Virtual para mesclá-las.
  4. Opcionalmente, renomeie os membros daquela dimensão para mesclar seus membros, selecionando Adicionar Membro Virtual.
  5. Opcionalmente, defina ou acrescente os membros calculados ao cubo virtual selecionando Adicionar Membro Calculado MDX.

Os únicos elementos dos cubos virtuais que o Design Studio exibe são os que foram explicitamente alterados executando operações de Adição. Para ter uma visualização completa da estrutura do cubo virtual incluindo todas as dimensões, hierarquias e membros disponíveis, é possível usar o navegador de dimensões do Design Studio. Por exemplo, se [VirtualCube] for definido mesclando [CubeA] e [CubeB], ao acrescentar o cubo virtual ao modelo, o Design Studio exibe [VirtualCube]. Se [CubeA] tiver uma dimensão de tempo chamada [Time] e [CubeB] tiver uma dimensão de tempo chamada [Tiempo] e ambas as dimensões precisarem ser mescladas porque são semanticamente idênticas, é possível renomear [Tiempo] para [Time] para fazer a mescla. A operação Add Dimension permite renomear [CubeB].[Tiempo] para [Time]. No Design Studio, é possível ver uma dimensão virtual definida para o cubo virtual que renomeia [Tiempo] para [Time].

Caso uma dimensão particular de um dos dois cubos não deva estar disponível no cubo virtual, há a opção de ocultá-la. Isto só afeta o cubo virtual, e não o cubo que contém a dimensão. Para ocultar uma dimensão, adicione-a ao modelo e então marque o sinalizador ocultar.

Ao mesclar duas dimensões, é possível ter uma situação na qual cada dimensão tem um membro padrão diferente. Há uma opção para configurar um membro particular da dimensão virtual como o membro padrão. Para configurar um membro padrão para uma dimensão, adicione aquela dimensão ao modelo e então configure a propriedade do membro padrão. Se o membro padrão não for explicitamente configurado na dimensão virtual, o padrão é a dimensão do primeiro cubo selecionado para compor o cubo virtual.

Os membros dos dois cubos só são mesclados se tiverem nomes idênticos. Há a opção de renomear os membros para fazer a mescla. Além disso, os membros podem ter seus próprios operadores de mescla definidos, que caso sejam configurados terão prioridade sobre operador de mescla do cubo. Para renomear um membro, adicione-o ao modelo sob a dimensão virtual onde ele está contido. Se um membro não dever ser incluído no cubo virtual resultante, ele pode ser oculto. Para ocultar um membro, adicione-o ao modelo sob a dimensão virtual onde ele está contido e marque o sinalizador ocultar.

No contexto de uma dimensão virtual, também é possível criar membros calculados virtuais. Os membros calculados definidos nos cubos não estão disponíveis no cubo virtual. Alguns cálculos são feitos no contexto do cubo no qual eles são definidos, e sua propagação para o cubo virtual pode produzir resultados inesperados. Os cálculos que usam medidas não distributivas como o desvio padrão também não vão produzir resultados confiáveis se propagados para o cubo virtual. Além disso, se ambos os cubos tiverem um membro calculado com o mesmo nome, mas com cálculos diferentes, o mecanismo de cubagem não pode saber qual cálculo o usuário pretende propagar. Os membros calculados precisam ser redefinidos para o cubo virtual conforme necessário.

Os membros calculados virtuais podem ser definidos para qualquer dimensão virtual que foi acrescentada ao modelo usando Adicionar Dimensão Virtual. Se alguns membros tiverem sido renomeados para uma dimensão virtual, os novos nomes dos membros podem ser usados no cálculo. A seguir temos alguns pontos adicionais sobre membros calculados virtuais:

  • Os membros calculados virtuais só existem no contexto do cubo virtual e não estão disponíveis nos cubos dependentes.
  • Os membros calculados virtuais têm outro grau de flexibilidade, permitindo a definição de um pai. O ID exclusivo do pai de um membro calculado pode ser qualquer membro em um nível não folha da mesma dimensão.

Administrando cubos virtuais com o Administration Console

Para os usuários do Administration Console, os cubos virtuais são diferentes dos cubos regulares das seguintes maneiras:

  • Os cubos virtuais pertencem a um modelo de marcador de cubo chamado VIRTUAL. É aqui que os cubos virtuais podem ser excluídos.
  • Os cubos virtuais não contêm informações de programação de atualização do cache.
  • As operações de inicialização e parada implementadas em um servidor de cubos, e a remoção da implementação de cubos virtuais são semelhantes às operações nos cubos regulares, com exceção de algumas verificações de dependência diferentes.
  • Um cubo ou cubo virtual pode ser parado ou ter sua implementação removida só depois que todos os cubos virtuais que a usarem diretamente forem parados ou tiverem sua implementação removida.
  • Um cubo virtual só pode ser inicializado ou implementado depois que ambos os seus cubos diretos forem inicializados ou implementados.

Entendendo a segurança dimensional

A segurança dimensional é um novo recurso do InfoSphere Warehouse 9.7. Os pontos específicos deste recurso são detalhados em um artigo listado em Recursos. Para um cubo virtual, a segurança dimensional é herdada de seus dois cubos. Não há nenhuma configuração de segurança específica para um cubo virtual. É possível configurar a segurança dos cubos reais dependentes.

Por exemplo, para um cubo virtual baseado em [Vendas no oeste] e [Vendas no leste], ambos com uma dimensão [Store], o cubo [Vendas no oeste] só permite que os descendentes de [California] sejam visíveis, e [Vendas no leste] só permite que os descendentes de [Florida] sejam visíveis. O cubo virtual só permite que os descendentes de Flórida e Califórnia sejam visíveis.


Inicializando cubos virtuais com o Servidor de Cubos

Quando o servidor Cubing Services é inicializado, os elementos definidos usando o Design Studio são analisados. Isto inclui as dimensões virtuais, os membros e os membros calculados. Se uma dimensão ou membro for renomeado para o cubo virtual, então o nome disponível para o cubo virtual é o especificado pelo usuário. Por exemplo, [CubeA] e [CubeB] são mesclados para formar [VirtualCube]. A dimensão de tempo de [CubeA] é [Time], e a dimensão de tempo de [CubeB] é [Tiempo]. Renomear [CubeB].[Tiempo] para [Time] resulta na mescla de CubeA.[Time] e CubeB.[Tiempo], porque ambos têm o nome Tempo. O cubo virtual terá a dimensão de tempo [Time]. A próxima etapa é mesclar as hierarquias das dimensões compartilhadas dos dois cubos dependentes. No exemplo, as hierarquias de CubeA.[Time] e CubeB.[Tiempo] são mescladas nível a nível começando no nível zero.

O processo de mescla verifica se os membros da dimensão têm o mesmo nome, e neste caso, então o cubo virtual só vai conter um membro obtido da mescla dos membros dependentes. Se o membro existir em apenas um dos cubos, aquele membro é simplesmente acrescentado ao cubo virtual. Por exemplo, a dimensão [CubeA].[Time] tem os membros 2008 e 2009, e [CubeB].[Time] tem os membros 2007 e 2008. O cubo virtual que agrega estes dois cubos terá os membros 2007 e 2008 mesclados de ambos os cubos, e também o membro 2009. Uma consulta com relação a 2007 retorna dados de seu cubo pai [CubeB], e uma consulta com relação ao membro mesclado 2008 retorna os resultados de [CubeA] e [CubeB] de acordo com o operador de mescla. Em outro exemplo, se [CubeB].[Time] tiver os membros 2007 e 2008_1, então o cubo virtual no exemplo anterior terá os membros 2007, 2008, 2008_1 e 2009. Ao renomear 2008_1 para 2008, o cubo virtual vai ter os membros 2007 e 2008 mesclados de ambos os cubos, e também o membro 2009.

Outra consideração importante para cubos virtuais é o que acontece se a estrutura dos dois cubos mudar quando o servidor de cubos estiver rodando e os cubos forem recarregados. Neste caso o cubo virtual deve ser reconstruído por meio de uma parada e reinicialização. Cada vez que o cubo virtual é inicializado, ele verifica os dois cubos e faz a mescla.


Conclusão

Este artigo descreveu como cubos virtuais são criados e como o processo de mescla funciona. A interação com cubos virtuais usando o Design Studio e o Administration Console também foi detalhada. Os exemplos dados cobrem uma extensa gama de situações que podem servir como ponto de partida para implementar sua solução particular. Cenários específicos são abordados:

  • Melhoria de desempenho usando o particionamento de tempo
  • Visão global da empresa usando a conversão de moedas
  • Análise de giro de inventário
  • Agregando dados de cubos de vendas diferentes, como Web Sales e Store Sales
  • Particionamento geográfico dos dados se dois cubos rastrearem as vendas da região Leste e da região Oeste

Download

DescriçãoNomeTamanho
GSDB_TimePartitionExampleGSDB_TimePartitionExample.xml15KB

Recursos

Aprender

Obter produtos e tecnologias

Discutir

Comentários

developerWorks: Conecte-se

Los campos obligatorios están marcados con un asterisco (*).


Precisa de um ID IBM?
Esqueceu seu ID IBM?


Esqueceu sua senha?
Alterar sua senha

Ao clicar em Enviar, você concorda com os termos e condições do developerWorks.

 


A primeira vez que você entrar no developerWorks, um perfil é criado para você. Informações no seu perfil (seu nome, país / região, e nome da empresa) é apresentado ao público e vai acompanhar qualquer conteúdo que você postar, a menos que você opte por esconder o nome da empresa. Você pode atualizar sua conta IBM a qualquer momento.

Todas as informações enviadas são seguras.

Elija su nombre para mostrar



Ao se conectar ao developerWorks pela primeira vez, é criado um perfil para você e é necessário selecionar um nome de exibição. O nome de exibição acompanhará o conteúdo que você postar no developerWorks.

Escolha um nome de exibição de 3 - 31 caracteres. Seu nome de exibição deve ser exclusivo na comunidade do developerWorks e não deve ser o seu endereço de email por motivo de privacidade.

Los campos obligatorios están marcados con un asterisco (*).

(Escolha um nome de exibição de 3 - 31 caracteres.)

Ao clicar em Enviar, você concorda com os termos e condições do developerWorks.

 


Todas as informações enviadas são seguras.


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=80
Zone=Information Management
ArticleID=430763
ArticleTitle=Usando cubos virtuais no IBM InfoSphere Warehouse 9.7 para combinar cenários de negócios e melhorar desempenho
publish-date=09102009