Solucionado (ver solução)
Solucionado
(ver solução)
6
respostas

Dificuldade na gravação de campo numerico com decimais na tabela de Fato

Bom dia. Eu estou seguindo um projeto "dever de casa", onde a origem da tabela de fato é um "flat file", um arquivo csv. Consigo gravar as linhas na tabela de fato no banco criado; entretanto, os campos numéricos estão incorretos no banco, sem que eu consiga que seja respeitado o ponto flutuante. Minhas tentativas foram usando o bloco Coluna Derivada, onde tentei, sem sucesso, a conversão via DT_NUMERIC, DT_DECIMAL e DT_R8. No Banco, os campos numéricos estão criados com o tipo "float". Agradeço a ajuda.

6 respostas

Calos,

Qual o tipo de dados definido no banco de dados?

Consegue informar qual formação e qual aula que esta o projeto.

Olá Cleiton, Na verdade, o que estou fazendo não está na aula. Eu decidi me "impor" um "dever de casa", de modo a testar meu próprio conhecimento, iniciando um pequeno projeto, desde o inicio. Então, o banco é bastante similar ao do curso, e a tabela de Fato é bastante parecida com a Fato_001 do curso. O campo "Faturamento" foi definido como float; a diferença é que minha fonte de dados está em formato csv, diferente do curso, onde tivemos que recuperar uma base já pronta. É isso. Grato pela atenção !

Show boa iniciativa...

Bem você consegue detalhar um pouco mais como você esta fazendo a carga desse arquivo csv para tabela.

Existe alguma transformação sendo realizada?

Poderia compartilhar algumas linha de exemplo do arquivo.

Bom dia, Cleiton. O exercício auto proposto tem relação com o curso Olap com SQL Server, montagem do Dw. Bom, os passos foram os seguintes:

  1. Leitura de arquivo flat file
  2. Classificação pelas colunas chave (Cod Cliente, Cod Produto, Cod Dia ), bloqueando chaves duplicadas
  3. Coluna Derivada -> aqui foi onde tentei a "conversão" de tipo da informação do csv para uma coluna numérica do banco; usei DT_NUMERIC ( erro e abort do processo ), DT_DECIMAL, DT_R8 (esses dois últimos "passam", mas não funciona).
  4. Copiar coluna
  5. Conversão de dados (nas colunas "numéricas", uso "flutuante de precisão dupla")
  6. Dimensão de alteração lenta

O "erro" percebido: coluna no csv denominada 'fat' com conteúdo (exemplo) 244.39 Gravado no banco como 24439.

Bem, é isso ....

solução!

Olá novamente ! Eu consegui matar a xarada. O encode type com a qual a tabela foi criada me deu a ideia de que o ponto no csv (como 244.39) não estava sendo reconhecido. Programador Clipper da velha guarda, já passei por algumas situações dessas, mas demorou para cair a ficha. No bloco de Coluna derivada, resolvi "operar" sobre a coluna (csv ) 'Fat' da seguinte forma: Replace( Fat, ".", ","). Ou seja, mandei substituir o "ponto" por vírgula como caracter de separação de decimal. E funcionou ! Agradeço imenso a sua ajuda, e até peço desculpas por incomodar com um problema tão trivial (bom, trivial agora, que achamos a solução ). Abraços !

Boa Carlos, já passei por isso varias vezes também.