Страницы: 1
RSS
Power Query: определить разделитель при использовании Table.SplitColumn
 
Здравствуйте!
Помогите с элементарной казалось бы задачей. Делаю в PQ запрос и вдруг часть данных на определенном этапе не делится по разделителю.
Причем часть делиться, часть нет. Запускаю деление в Excel - нет проблем. Текст по столбцам, все нормально.
Как посмотреть разделитель который стоит в ячейках? Если нестандартный - то как его указать в PQ как delimiter?
(и да, конечно, выгрузка из 1С)
 
Доброе время суток.
Похоже на глюк Power Query. Если поставить QuoteStyle.None, то получим требуемые три столбца.
 
И вам здравствовать.
Если при разделении столбцов указать в меню "Символ кавычек" значение "Нет", то все нормально разделится.
Вот горшок пустой, он предмет простой...
 
О, спасибо! Андрей VG, PooHkrd !
не додумался. (
А вы, извините, методом тыка нашли или была какая-то логика в рассуждениях?
Этот символ кавычек какую роль играет вообще?  
 
Цитата
игорь сергеев написал:
А вы, извините, методом тыка нашли или была какая-то логика в рассуждениях?
Я вас обожаю, вы являетесь наглядным доказательством одного из великих законов Вселенной:
"Если уже совсем ничего не получается, то прочтите, наконец, инструкцию!" :D
Так вот, я если что-то начинаю в работе использовать, то сначала читаю инструкцию. Вижу в тексте из примера кавычки, смотрю на настройку и сразу понятно, почему не работает так как вами ожидалось.
Изменено: PooHkrd - 25.09.2018 10:30:33
Вот горшок пустой, он предмет простой...
 
Ну это не глюк... Это скорее недо-документированные функции.
Есть некоторые неочевидные особенности в работе функции Splitter.SplitTextByDelimiter и ей подобных, а именно пресловутый QuoteStyle
Описание параметров QuoteStyle.None и QuoteStyle.Csv есть в инлайн-справке к функции Lines.FromText
  • QuoteStyle.None: (по умолчанию) обработка специальных символов не требуется.
  • QuoteStyle.Csv: обработка специальных символов как для формата CSV. Символ двойной кавычки используется для разграничения таких областей, пара символов двойной кавычки используется для представления одного символа двойной кавычки в пределах такой области.
В данном конкретном случае мы видим, что во второй строке у нас встречаются кавычки, причем всего ТРИ раза.
Получив на входе параметр QuoteStyle.Csv, PQ расценивает все, что встречается между кавычками, как единое целое, которое делить не надо (как в формате CSV). То есть, указанный нами разделитель не ищется внутри текста, обрамленного в кавычки.
Вот она идет с начала текста, ищет разделители. Видит первую пару кавычек, которая вокруг +. Не ищет там разделитель. А затем находит еще одну кавычку (3-ю), и от нее и до следующей тоже не ищет разделитель. Но следующей (4-й) нет, поэтому не ищет аж до конца строки.
При этом после сплита он убирает одинарные кавычки, а двойные заменяет на одинарные (опять же как при обработке CSV).
Это легко проверить, видно, что после сплита клемма"+"-" превращается в клемма+-, то есть без кавычек

Если поиграться с расстановкой кавычек в этом тексте, то можно всё это увидеть. Приложил файл - поставил красную кавычку в разные места
Так что да, если на входе не "чистый" CSV, то надо символ кавычек указывать "Нет", т.е. QuoteStyle.None
F1 творит чудеса
 
Максим Зеленский, не, так глубоко я не копал. Как всегда, спасибо за такой мощный разбор!
Вот горшок пустой, он предмет простой...
 
Большое спасибо, Максим.
Число кавычек посчитать я не удосужился, а сразу баг вопить... (прям в стиле ТСов - формула такая-то не правильно считает) :(
 
Спасибо, Максим Зеленский!
Сильно, да..., что тут скажешь. Спасибо за науку.
 
Здравствуйте!

Решил освоить PQ и на первом же шаге засада - разделитель " ; " не срабатывает как надо - видно что получается один столбец, а по идее должно быть шесть. Что нужно сделать, чтобы появились все шесть столбцов? Я вижу в посте 3 есть меню, где можно поковыряться там, но как и где его найти?
 
Алексей Комаров, нажмите "преобразовать данные"
 
Цитата
написал:
Алексей Комаров , нажмите "преобразовать данные"
Должно получиться вот так. И только потом "Преобразовать данные"
Изменено: Алексей Комаров - 12.11.2022 18:15:40
 
Алексей Комаров, вы все таки нажмите и посмотрите, что формирует PQ.
Код
= Csv.Document(File.Contents("C:\Users\Lenovo\Downloads\Отчет.txt"),[Delimiter=";", Columns=1, Encoding=65001, QuoteStyle=QuoteStyle.None])

Видимо, на основе первых строк PQ посмотрел и понял, что точек в запятой вообще нет поставил Columns=1, т.е. разбил на один столбец. Замените на 6 и будет норм. Можно динамически считать это число, если вдруг кол-во столбцов разное бывает.
 
Алексей Комаров,
1. В Csv.Document измените параметр Columns=1 на Columns=6
2. Лучше всего удалять этот параметр. Тогда число загружаемых столбцов будет динамически определяться по первой строке.
Для корректной работы - измените настройки отчета, который в вы в txt экспортируете. Чтобы не было этих настроек в первых 3 строках.
 
surkenny, whateverlover, Спасибо! Получилось! :)

А где найти меню изменения параметров, как в посте 3?
 
Алексей Комаров, вкладка "преобразование" - "разделить столбец" - "разделить столбец по разделителю"
Страницы: 1
Наверх