Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 SSIS: теряются числовые данные при передаче  [new]
msleg
Member

Откуда: Москва
Сообщений: 563
Добрый день! Пытаюсь через SSIS загрузить данные из файла CVS в таблицу SQL Server. Есть в базе столбец с суммой (формат money). В у CSV формат этого же поля стоит FLOAT. Проблема в том, что когда данные загружаются сумма по полю в Базе и CSV отличаются на небольшое значение. есть ощущение, что это ошибки при преобразовании данных. Какие форматы поставить, чтобы не было расхождений?
2 июн 16, 16:12    [19250898]     Ответить | Цитировать Сообщить модератору
 Re: SSIS: теряются числовые данные при передаче  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 37069
Не надо использовать неточный тип float, и не будет расхождения.
2 июн 16, 16:45    [19251107]     Ответить | Цитировать Сообщить модератору
 Re: SSIS: теряются числовые данные при передаче  [new]
msleg
Member

Откуда: Москва
Сообщений: 563
Гавриленко Сергей Алексеевич,

Я уже поставил
DATAType = currency [DT_CY] у поля в CVS
DATAType =[money] у поля в SQL
Все равно, идет расхождение в пару рублей. Строчек много перекачиваю
2 июн 16, 16:53    [19251154]     Ответить | Цитировать Сообщить модератору
 Re: SSIS: теряются числовые данные при передаче  [new]
msleg
Member

Откуда: Москва
Сообщений: 563
Как правильно перекачивать цифры?
2 июн 16, 16:53    [19251161]     Ответить | Цитировать Сообщить модератору
 Re: SSIS: теряются числовые данные при передаче  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
msleg,

сколько разрядов в источнике?
2 июн 16, 16:55    [19251173]     Ответить | Цитировать Сообщить модератору
 Re: SSIS: теряются числовые данные при передаче  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31444
msleg
Как правильно перекачивать цифры?
Перекачивание перекачивает байты/данные как они есть.

Расхождения в пару рублей возникают при преобразовании типов.

Разумеется, мы тут не можем отладить работу вашей системы, без самой системы :-) И даже без единой строчки кода и без единой строчки данных.

Но это же просто, неужели трудно найти различающиеся строки, и понять, откуда они взялись?
2 июн 16, 17:16    [19251279]     Ответить | Цитировать Сообщить модератору
 Re: SSIS: теряются числовые данные при передаче  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31444
msleg
Какие форматы поставить, чтобы не было расхождений?
Достаточно поставить одинаковый тип данных, а в CSV записывать и читать данные "без обрезания".
msleg
В у CSV формат этого же поля стоит FLOAT
У CSV не бывает "формата".
2 июн 16, 17:20    [19251296]     Ответить | Цитировать Сообщить модератору
 Re: SSIS: теряются числовые данные при передаче  [new]
msleg
Member

Откуда: Москва
Сообщений: 563
TaPaK,

Исходным файлом является excel. Там поле с продажами (руб)
например:
1 261 334 367,950
-19 974 429,96

Исходный файл преобразуется в CSV и загружается в таблицу SQL Server. Строк много и потом после загрузки данных, когда я суммирую значение в исходном файле и в базе, то у меня идет расхождение в пару рублей. Не значительно, но я хочу чтобы все сходилось до копейки!
2 июн 16, 17:20    [19251300]     Ответить | Цитировать Сообщить модератору
 Re: SSIS: теряются числовые данные при передаче  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
msleg,

а вы не при конверте Excel - csv теряете?
2 июн 16, 17:24    [19251312]     Ответить | Цитировать Сообщить модератору
 Re: SSIS: теряются числовые данные при передаче  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31444
msleg
TaPaK,

Исходным файлом является excel. Там поле с продажами (руб)
например:
1 261 334 367,950
-19 974 429,96

Исходный файл преобразуется в CSV и загружается в таблицу SQL Server. Строк много и потом после загрузки данных, когда я суммирую значение в исходном файле и в базе, то у меня идет расхождение в пару рублей. Не значительно, но я хочу чтобы все сходилось до копейки!
Вы, конечно же, открыли потом этот CSV файл в Экселе, и просуммировали?
2 июн 16, 17:28    [19251337]     Ответить | Цитировать Сообщить модератору
 Re: SSIS: теряются числовые данные при передаче  [new]
msleg
Member

Откуда: Москва
Сообщений: 563
alexeyvg,

Открыл exceleм csv и просуммировал)
2 июн 16, 17:33    [19251367]     Ответить | Цитировать Сообщить модератору
 Re: SSIS: теряются числовые данные при передаче  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4804
msleg,

Пора усвоить закон плавающей арифметики: от перемены мест слагаемых сумма незначительно меняется.

Переведите все в целые числа, если это возможно.
2 июн 16, 17:41    [19251402]     Ответить | Цитировать Сообщить модератору
 Re: SSIS: теряются числовые данные при передаче  [new]
msleg
Member

Откуда: Москва
Сообщений: 563
Пока решения не нашел(
Числа в CSV вида
763690,6
31522,26
походу из-за того что после запятой бывает 1 число или 2 числа из-за этого идет расхождение при преобразовании
2 июн 16, 18:36    [19251604]     Ответить | Цитировать Сообщить модератору
 Re: SSIS: теряются числовые данные при передаче  [new]
StarikNavy
Member

Откуда: Москва
Сообщений: 2396
msleg
alexeyvg,

Открыл exceleм csv и просуммировал)

да-да-да. вы даже не предстваляете какие чудеса порой эксель показывает
2 июн 16, 18:38    [19251608]     Ответить | Цитировать Сообщить модератору
 Re: SSIS: теряются числовые данные при передаче  [new]
StarikNavy
Member

Откуда: Москва
Сообщений: 2396
msleg,

http://prntscr.com/bbhgi6
лень объяснять, но в итоге - выделенная "4" вылезает там, где ее вобще не должно быть в принципе )
(просто очередная борьба с экселем на днях была)
2 июн 16, 18:41    [19251617]     Ответить | Цитировать Сообщить модератору
 Re: SSIS: теряются числовые данные при передаче  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31444
msleg
походу из-за того что после запятой бывает 1 число или 2 числа из-за этого идет расхождение при преобразовании
Что вы придумываете, я импортирую миллиарды строк в час, и никаких расхождений не возникает.
Вы найдите конкретную строку, которая импортировалась неправильно, и поэкспериментируйте на отдельной базе, с отдельными пакетами и т.д., отладьте свою программу импорта, найдите, при какой конкретной операции число, допустим, 123.5678 превращается в 123.567.
Что вы, не знаете, как отлаживают программы?
Комп есть нечто мифическое для секретарш и бухгалтеров, а для программиста не должно быть непонятных "отличается на несколько рублей", биты и байты обрабатываются не "приблизительно".
2 июн 16, 18:58    [19251659]     Ответить | Цитировать Сообщить модератору
 Re: SSIS: теряются числовые данные при передаче  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31444
StarikNavy
да-да-да. вы даже не предстваляете какие чудеса порой эксель показывает
Понятное дело, но, как я думал, наиболее вероятная ошибка - в сохранении в CSV, а такой способ позволяет это вычислить точно.
2 июн 16, 19:00    [19251666]     Ответить | Цитировать Сообщить модератору
 Re: SSIS: теряются числовые данные при передаче  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31444
StarikNavy
лень объяснять, но в итоге - выделенная "4" вылезает там, где ее вобще не должно быть в принципе )
"Вылезает" - это как, что за термин такой? В эксельном файле число без "4", а на экране и в расчётах с "4"?
2 июн 16, 19:03    [19251678]     Ответить | Цитировать Сообщить модератору
 Re: SSIS: теряются числовые данные при передаче  [new]
msleg
Member

Откуда: Москва
Сообщений: 563
Еще раз, только теперь с реальными данными и подробно описываю, что делаю. Нужна помощь, где я делаю не то?

Создаю таблицу FBL5N в базе SQL Server. В основном интересует поле Amount_in_local_currency - money, там будут храниться суммы денежные

CREATE TABLE [dbo].[FBL5N](
	[Document_Type] [nvarchar](50) NOT NULL,
	[Customer] [int] NOT NULL,
	[Customer_name] [nvarchar](255) NULL,
	[Assignment] [nvarchar](100) NULL,
	[Document_Number] [nvarchar](100) NOT NULL,
	[Document_Date] [date] NOT NULL,
	[Local_Currency] [nvarchar](10) NULL,
	[Net_due_date] [date] NULL,
	[User_name] [nvarchar](50) NULL,
	[Entry_Date] [date] NULL,
	[Text] [nvarchar](255) NULL,
	[Download_date] [date] NULL,
	[Amount_in_local_currency] [money] NULL
)


У меня есть CVS файл, прикладываю его ниже, данные которого через пакет SSIS загружаю в БД

1) Создаю в SSIS подключение Flat File Connection к СVS, где вручную указываю тип данных поля Amount_in_local_currency = currency [DT_CY]

Картинка с другого сайта.

2) Загружаю данные в таблицу и проверяю суммы в таблице и в файле CVS

SELECT sum([Amount_in_local_currency] as money))
      ,count([Document_Type])
  FROM [Debt_DB].[dbo].[FBL5N]


получаю
(SUM)_____________________(Count)
1 335 480 074,38____________4757

Открываю с помощью Excel файл CVS и у меня сумма 1 335 480 070,60

Картинка с другого сайта.

ОТКУДА ИДЕТ РАСХОЖДЕНИЕ?

К сообщению приложен файл (FBL5N_for_loading.rar - 77Kb) cкачать
3 июн 16, 10:32    [19253376]     Ответить | Цитировать Сообщить модератору
 Re: SSIS: теряются числовые данные при передаче  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
msleg,

залил, расхождений нет
3 июн 16, 10:40    [19253423]     Ответить | Цитировать Сообщить модератору
 Re: SSIS: теряются числовые данные при передаче  [new]
msleg
Member

Откуда: Москва
Сообщений: 563
TaPaK,

И какая сумма получается?
3 июн 16, 10:44    [19253438]     Ответить | Цитировать Сообщить модератору
 Re: SSIS: теряются числовые данные при передаче  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
msleg,

1335480070,60
3 июн 16, 10:45    [19253442]     Ответить | Цитировать Сообщить модератору
 Re: SSIS: теряются числовые данные при передаче  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
а зачем у вас ColumnDelimiter стоит ","? у меня по умолчанию Semicolon {;}. Возможно это из-за региональных настроек, но я точно не знаю
3 июн 16, 10:48    [19253454]     Ответить | Цитировать Сообщить модератору
 Re: SSIS: теряются числовые данные при передаче  [new]
msleg
Member

Откуда: Москва
Сообщений: 563
TaPaK,

Ты залили через SSIS пакет? и сумма эта у тебя в БД?
3 июн 16, 10:49    [19253456]     Ответить | Цитировать Сообщить модератору
 Re: SSIS: теряются числовые данные при передаче  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
msleg,

залил через импорт, сумма на мониторе, где ж ещё :) Если ничего не меняли то пакет у вас такой же должен был получиться
3 июн 16, 10:54    [19253481]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить