none
Cubo com várias tabelas FATO ????

    Question

  • Estou participando de um projeto de migração do SQL2000 para SQL2005 e uma das nossas idéias quando decidimos migrar para o 2005 é que teríamos uma grande vantagem adicionando mais de uma tabela de fato por cubo, porém não estamos tendo o resultado esperado quando misturamos uma dimensão de uma tabela de fato com a measure da outra tabela de fato.

     

    Um breve relato da nossa estrutura:

    Existem informações de cadastro, que são dados únicos por pessoa.

    Existem informações da conta do cliente, que são dados únicos, porém um cliente pode ter uma ou mais contas.

    Sexo, por exemplo, é variável de cadastro. Produto é variável de conta.

    Na tabela de fato de cliente temos o número do CPF do mesmo, e a measure "Qtde Clientes" é calculada no cubo com um Distinct Count da chave do CPF.

    Na tabela de fato de contas temos o número da conta do cliente, e a measure "Qtde Contas" é calculada no cubo com um Count da chave do Número da Conta.

    A chave entre estas duas tabelas de fato é o número do CPF.

     

    O problema é que quando eu uso a dimensão de Sexo, a quantidade de Contas é igual para os dois domínios que eu tenho, neste caso 1.000, sendo que o correto seria 700 masculino e 300 feminino (isso homologado no BD relacional), porém a quantidade de clientes fica distrubuida corretamente. Quando uso a variável de Produto, é o inverso, a measure de Contas fica distribuida corretamente nos dominios de produtos e a measure de Clientes fica repetida para todos estes domínios.

     

    Simplificando, quando faço uso da dimenção SEXO sobre a measure QTD_CLIENTES ele me retorna a quantidade correta de clientes por SEXO ou seja .. 700 clientes Masculino e 300 clientes Feminino(tanto dimensão como measure pertencem a mesma tabela FATO), o mesmo não acontece quando eu uso a dimensão SEXO sobre a measure QTD_CONTAS (querendo obter a quantidade de contas por sexo de clientes) , obtenho valores repetidos:

    1000 feminino

    1000 masculino

    ----------------------

    não havendo correta divisão - vale lembrar que a Measure QTD_CONTAS pertence a outra tabela FATO

     

    O que poderia estar errado neste modelo ou como devemos implementar isso no Cubo? Eu preciso replicar as dimensoes que eu vou usar em todas as fatos ou existe alguma "configuração" para que isto funcione sem que eu necessite replicar estas variáveis???

     

    Thursday, October 04, 2007 6:30 PM

Answers

  •  

    Boa tarde a todos,

     

    Ainda sobre o post acima, depois de alguns anos luz, voltei a me deparar com o mesmo problema , montar um CUBO contendo várias tabelas FATO. O problema, as Measures necessitariam ter como propriedade COUNT DISTINCT uma vez que exista duplicidade de "keys" devido a regras de negócios.

     

    De que forma implementar uma solução dessas??

     

    Tentei realizar a montagem do cubo com cinco tabelas fato e "linkar" cada measure a sua tabela FATO de origem ou seja, Contagem de Clientes (fato CLIENTE) , Contagem de Produtos (fato PRODUTO).

    Sem sucesso pois precisaria criar DIMENSÕES DE RELACIONAMENTO (coisa que eu não tenho idéia do que seja).

     

    Optei por montar uma VIEW relacionando todas as FATOS (retornando "keys" duplicadas) e implementando também COUNT(DISTINCT) dentro de cada campo "key" (no próprio select) , esse procedimento iria sim prejudicar a velocidade da solução como um todo, foi aí que indexei a VIEW.

     

    Consegui resolver o problema de velocidade e integridade de informação.

     

    Vale lembrar que na hora de criar o SOURCE do projeto OLAP no AS2005 deveremos adicionar uma tabela e setar a TABELA com a sua VIEW.

     

    Abraço a todos...

     

    Novas idéias por favor postem ... serão estudadas e implementadas.

    Friday, July 11, 2008 6:13 PM

All replies

  • Para esse caso vc precisará replicar as chaves da dimensão nas duas tabelas fato.

     

    Pense da seguinte forma:

    Vc criou um agrupamento de medidas de tabelas fato diferentes. Vc apenas conseguirá selecionar a informação das medidas atraves de uma dimensão se a tabela fato de origem da medida contiver a chave para a dimensão.

     

    Abraço

    Thursday, October 04, 2007 7:21 PM
  •  

    Boa tarde Lucas,

     

    Se eu preciso duplicar as chaves de dimensões nas duas tabelas FATOS, não perderia um pouco o sentido de ter mais de uma tabela FATO para este relacionamento, não ficaria mais pratico e rapido eu criar apenas uma tabela FATO contendo as chaves das dimensões em questão??

     

    Se utilizar este processo de duplicar as chaves de dimensões nas tabelas FATO, eu ganho em velocidade de leitura e processamento???

     

    Abraços.

    Thursday, October 04, 2007 7:32 PM
  • Cara, acredito que uma fato resolve bem seu problema.

    Vc pode me descrever quais dimensões e medidas vc tem em cada tabela fato e quais delas entrarão no seu novo cubo?

    Abraço

    Thursday, October 04, 2007 7:49 PM
  • Boa tarde,

     

    Depois de pesquisar em alguns manuais sobre modelagem multidimensional e principalmente tentando entender a arquitetura do software ANALYSIS do SQL2005 , descobri que poderemos utilizar um modelo com várias tabelas fatos não precisando REPLICAR todas as dimensões em todas as tabelas fatos (se fizermos isso, perderá o sentido de termos várias tabelas fato).

     

    Bom solucionando o problema acima, basta criarmos uma tabela de relacionamentos ou seja utilizando o NAMED QUERY iremos criar uma tabela que possuir todas as dimensões e relacionamentos que desejamos e no centro e as dimensões e as tabelas fatos se comunicam com esta tabela de relacionamentos. Prontinho, mais velocidade e uma modelagem multidimensional mais organizada.

     

    Abraços a todos.

    Monday, October 08, 2007 8:20 PM
  • Vc pode nos passar o link desse artigo, por favor.

    Abraço

    Tuesday, October 09, 2007 11:58 AM
  • Bom dia Lucas,

     

    Não foi de um artigo que consegui solucionar o problema, reuni dois grandes amigos "meus professores" e com o apoio do material de modelagem multidimencional que é dado na Pós da FIAP (inclusive posso enviar os arquivos por e-mail se quiser), chegamos na solução.

     

    Estou montando um arquivo de solução que gera uns bacos ja com alguns registro para reproduzir a solução adotada, acredito que até dia 13 / 10 eu tenha terminado e vou disponibilizar.

     

    Obs: literatura sobre o analysis services do 2005 (aquela coleção de livros step by step) foi absurdamente útil para conseguirmos entender a arquitetura do software.

     

    Abraços.

     

    Tuesday, October 09, 2007 12:06 PM
  •  

    Boa tarde a todos,

     

    Ainda sobre o post acima, depois de alguns anos luz, voltei a me deparar com o mesmo problema , montar um CUBO contendo várias tabelas FATO. O problema, as Measures necessitariam ter como propriedade COUNT DISTINCT uma vez que exista duplicidade de "keys" devido a regras de negócios.

     

    De que forma implementar uma solução dessas??

     

    Tentei realizar a montagem do cubo com cinco tabelas fato e "linkar" cada measure a sua tabela FATO de origem ou seja, Contagem de Clientes (fato CLIENTE) , Contagem de Produtos (fato PRODUTO).

    Sem sucesso pois precisaria criar DIMENSÕES DE RELACIONAMENTO (coisa que eu não tenho idéia do que seja).

     

    Optei por montar uma VIEW relacionando todas as FATOS (retornando "keys" duplicadas) e implementando também COUNT(DISTINCT) dentro de cada campo "key" (no próprio select) , esse procedimento iria sim prejudicar a velocidade da solução como um todo, foi aí que indexei a VIEW.

     

    Consegui resolver o problema de velocidade e integridade de informação.

     

    Vale lembrar que na hora de criar o SOURCE do projeto OLAP no AS2005 deveremos adicionar uma tabela e setar a TABELA com a sua VIEW.

     

    Abraço a todos...

     

    Novas idéias por favor postem ... serão estudadas e implementadas.

    Friday, July 11, 2008 6:13 PM