Страницы: 1
RSS
PowerQuery: некорректная загрузка десятичных чисел из внешних файлов., Излишние преобразования при смене типа данных
 
Добрый день!
Столкнулся с такой проблемой: при изменении типа данных колонки с "Десятичное число" на "Текст" разделитель дробной части меняется с точки на запятую. Предполагаю, что это связано с региональными настройками в системе и самой PowerQuery, но все равно напрягает. Но главная проблема не в этом, а в том, что некоторые десятичные числа с дробной частью преобразуются в числа с кучей нулей после запятой. Вся информация собирается из нескольких однотипных файлов Excel. Проверил по конкретной ошибке в исходном файле ячейка со значением имеет тип "Общий", в ячейке забито значение - не формула. В тестовом файле воспроизвести данное преобразование не удалось, поэтому даже не знаю уже куда копать.

ps Про точку и запятую - да, на конкретном компьютере не правильно были настроены региональные настройки. Но вопрос с кучей нулей остается
Изменено: StepanWolkoff - 10.01.2018 13:35:31
 
Коллега, вот всякое уже видел, но такого ни разу такого не наблюдал.
А если обрезать проблемный файл-источник, чтобы оставить строку с косяком и выложить на форум? Не выходит? Выгрузки из какой информационной системы? У меня разного вида хвосты в основном наблюдаются в выгрузках из 1С.
Проверьте ячейку на наличие невидимых символов.
Вот горшок пустой, он предмет простой...
 
PooHkrd, файл пример - это как раз обрезанный уже файл. И вот в нем уже не воспроизводится эта ошибка 8-0  Исходники - это обычные Excel файлы, которые заполняют в ручную. Я уже взял проблемный код и полностью сам по нему заполнил данные - не помогло.
 
Цитата
StepanWolkoff написал:
некоторые десятичные числа с дробной частью преобразуются в числа с кучей нулей после запятой.
а каким инструментом они преобразуются?
Неизлечимых болезней нет, есть неизлечимые люди.
 
Ну, в таком случае могу предложить только добавлять в код шаг с округлением чисел в столбце до нужного количества знаков. Но до этого, думаю, вы и сами догадались.
Вот горшок пустой, он предмет простой...
 
Цитата
PooHkrd написал:
... могу предложить только добавлять в код шаг с округлением чисел в столбце до нужного количества знаков
ну почему же, можно вообще не преобразовывать, оставить в тексте.
Неизлечимых болезней нет, есть неизлечимые люди.
 
Гм. Ну да, тоже вариант :)
Вот горшок пустой, он предмет простой...
 
Вобщем, покопался в файликах, если кому будет интересно ссылка на яндекс.диск
В архиве три файла: исходный - "test_full.xlsx", файл "test_error.xlsx" - в нем используется подключение к исходному файлу как внешнему источнику и вот в нем при загрузке в PowerQuery десятичное число превращается в число с кучей нулей после запятой, файл "test_full_PQ.xlsx" - это исходный файл, в котором таблица на листе преобразована в умную таблицу и она в этом же файле загружается в PowerQuery - но здесь десятичное число нормально преобразуется. Т.е. проблема именно в загрузке данных из внешних файлов. Ищу решение проблемы на англомовных сайтах, но пока не наткнулся.
Изменено: StepanWolkoff - 10.01.2018 13:16:11
 
округлите эту колонку до 3-4 знака, это косяк обработчика SQL
Неизлечимых болезней нет, есть неизлечимые люди.
 
TheBestOfTheBest, да, видимо придется добавить несколько промежуточных шагов с преобразованиями, просто, если бы эти числа использовались в математических операциях - вопроса нет, округлить или отбросить ненужные нули не проблема, но эти числа далее используются в составной текстовой строке, соответственно числа, которые изначально целые должны попасть в эту строку без всяких знаков дроби (без точек, без запятых) и уж тем более без чисел в дроби, а те числа, которые изначально идут как дробные, должны быть отражены в строке как дробные и столько знаков после запятой сколько в исходном файле.
 
сразу после загрузки из файла test_full.xlsx видим вот такое

Это обычная история, связанная с тем, как некоторые десятичные числа хранятся в виде числа с плавающей точкой.
Самое интересное, что если в исходном файле просто поменять формат ячеек на текстовый, в PQ длинное число подтянется прям сразу, в виде текста, так как при этом преобразование самого значения в строку не происходит.
Если прокликать ячейку с "2,2" (то есть: поменять формат на текст, F2, Enter) то тогда число становится текстом, и всё остальное в том числе в PQ работает и видит нормально.

Можно макросом пробегаться по этому столбцу
Код
For each cell in Selection.Cells
    cell.Value = CStr(cell.Value)
Next cell

и тогда он сохранится как текст с системным разделителем (при этом 2,2 станет "2,2"), и заменить потом в PQ запятые на точки.
F1 творит чудеса
Страницы: 1
Читают тему
Наверх