none
Atualização dos fatos RRS feed

  • Pergunta

  • Pessoal.

    Estou modelando o ETL de um cubo de itens de venda. Nas dimensões não tenho problema algum, porém nas atualizações dos fatos tenho algumas dúvidas:
    1)  Se atualiza os fatos? Digamos q o operador do sistema transacional tivesse digitado o valor do produto errado, por exemplo, era R$ 50,00 e digitou R$ 500,00, duas possibilidades:
    - Percebeu o erro e alterou o registro somente no outro dia; (Devo atualizar registros nos fatos?)
    - Percebeu o erro e excluiu o registro e incluiu um novo, no outro dia; (Devo excluir registros nos fatos?)
    2) Como posso saber quando um registro foi excluido, se nesta tabela o registro é excluido fisicamente?

    Neste cenário o carga do BI é diária.

    Qualquer ajuda é bem vinda.

    Douglas.
    segunda-feira, 21 de julho de 2008 14:56

Respostas

  • Boa Tarde,

     

    Acho que essa decisão depende de como o negócio entende essa mudança e do que sua tabela fato se propõe a fazer.

     

    Se a mudança de preço é de fato uma correção e que a venda foi efetivamente realizada a R$ 500,00 e não R$ 50,00 creio que o mais correto é sem dúvida atualizar o preço. Afinal o que se tem é uma venda de R$ 500,00 e a venda de R$ 50,00 nunca ocorreu.

     

    Se a mundança de preço corresponde a um adicional por conta de evoluções de preço durante a venda. Ex: R$ 50,00 era o preço inicial por conta do frete e posteriormente adicionou-se mais R$ 450,00 por conta das mercadorias, acho que você deve avaliar o propósito da tabela fato. Se o objetivo é apenas monitorar a venda, eu realizaria um UPDATE igual a primeira alternativa. Se o objetivo é auditar as fases pelas quais a venda passou (típico de um DW instantâneo cumulativo) então duas linhas são necessárias (uma para R$ 50,00 e outra para R$ 500,00 ou R$ 450,00 dependendo do que se monitora).

     

    Ralph Kimball recomenda também que você lance um "contra valor" para que o DW também sirva para fins de auditoria. Então nesse caso, teríamos um registro de R$ 50,00, um de -R$ 50,00 e um de R$ 500,00 (admitindo que se trate apenas de um erro).

     

    Normalmente registros não são excluídos da tabela fato. O DW tem a premissa de ser não volátil e excluir registros do DW "mata" essa característica já que estaríamos admitindo que a "história muda". Você pode fazer dessa forma, mas não é a melhor prática. (Já fiz para fins de desempenho e quando o negócio permitia admitir que a "história mudou" e o negócio não queria saber da "história antiga".)

     

    [ ]s,

     

    Gustavo

    • Marcado como Resposta Richard Juhasz quinta-feira, 31 de janeiro de 2013 14:54
    segunda-feira, 21 de julho de 2008 15:50

Todas as Respostas

  • Olá Douglas,

     

    Sobre suas dúvidas... o meu parecer...

    1) Dependendo do número de registros da fato, exclui-se ela inteira e se faz uma nova carga, dessa forma todos os registros serão carregados, e aqueles que sofreram alteração irão subir com as mesmas. Eu particularmente nunca fiz update em fato... nos modelos de transação de venda que fiz adotei essa política. Fiz sim update nas dimensões.

    2) Considernado que você exclui tudo, não vejo motivo para manter um histórico disso.

     

    Claro, tudo depende de número de registros, tempo de ETL e de processamento do cubo, uma opção seria fazer uma verificação por exemplo pena NSU da venda, e verificar se houve alteração em algum dos campos da mesma e dar um update... não sei te falar se esse procedimento seria "correto", e o tempo que você levaria checando os campos da fato poderia ser maior que o de exclusão e reinserção....

     

    Opção para otimizar a minha primeira sugestão, seria vc parametrizar as datas de carga, dessa forma... vc poderia apenas deletar e inserir datas aonde houve de fato alteração mais a data atual entendeu?

     

    Espero que tenha ajudado... e aguardo novas e melhores opiniões...

     

    Abraços,

    PG

    segunda-feira, 21 de julho de 2008 15:33
  • Boa Tarde,

     

    Acho que essa decisão depende de como o negócio entende essa mudança e do que sua tabela fato se propõe a fazer.

     

    Se a mudança de preço é de fato uma correção e que a venda foi efetivamente realizada a R$ 500,00 e não R$ 50,00 creio que o mais correto é sem dúvida atualizar o preço. Afinal o que se tem é uma venda de R$ 500,00 e a venda de R$ 50,00 nunca ocorreu.

     

    Se a mundança de preço corresponde a um adicional por conta de evoluções de preço durante a venda. Ex: R$ 50,00 era o preço inicial por conta do frete e posteriormente adicionou-se mais R$ 450,00 por conta das mercadorias, acho que você deve avaliar o propósito da tabela fato. Se o objetivo é apenas monitorar a venda, eu realizaria um UPDATE igual a primeira alternativa. Se o objetivo é auditar as fases pelas quais a venda passou (típico de um DW instantâneo cumulativo) então duas linhas são necessárias (uma para R$ 50,00 e outra para R$ 500,00 ou R$ 450,00 dependendo do que se monitora).

     

    Ralph Kimball recomenda também que você lance um "contra valor" para que o DW também sirva para fins de auditoria. Então nesse caso, teríamos um registro de R$ 50,00, um de -R$ 50,00 e um de R$ 500,00 (admitindo que se trate apenas de um erro).

     

    Normalmente registros não são excluídos da tabela fato. O DW tem a premissa de ser não volátil e excluir registros do DW "mata" essa característica já que estaríamos admitindo que a "história muda". Você pode fazer dessa forma, mas não é a melhor prática. (Já fiz para fins de desempenho e quando o negócio permitia admitir que a "história mudou" e o negócio não queria saber da "história antiga".)

     

    [ ]s,

     

    Gustavo

    • Marcado como Resposta Richard Juhasz quinta-feira, 31 de janeiro de 2013 14:54
    segunda-feira, 21 de julho de 2008 15:50