Код |
---|
let src = Table.SelectColumns(Table.SelectRows(Excel.CurrentWorkbook(), each [Name]="data"), "Content"), getReadySpoolsColumns = {"1", "3", "4", "9", "10", "126", "12", "23", "28", "34", "39", "47", "115"}, pt1 = Table.TransformColumns(src, {"Content", each Table.SelectColumns(Table.PromoteHeaders(_), getReadySpoolsColumns)}), expandContent = Table.ExpandTableColumn(pt1, "Content", Table.ColumnNames(pt1[Content]{0}), Table.ColumnNames(pt1[Content]{0})), pt2 = Table.ReplaceValue(expandContent,"",null,Replacer.ReplaceValue, Table.ColumnNames(pt1[Content]{0})), pt3 = Table.SelectRows(pt2, each [10] <> null and [10] <> ""), pt4 = Table.TransformColumns(pt3,{{"3", Text.Lower, type text}, {"4", Text.Lower, type text}, {"9", Text.Lower, type text}, {"10", Text.Lower, type text}, {"126", Text.Lower, type text}, {"12", Text.Lower, type text}, {"28", Text.Lower, type text}, {"39", Text.Lower, type text}}), pt5 = Table.CombineColumns(pt4,{"3", "4", "9"},Combiner.CombineTextByDelimiter("-", QuoteStyle.None),"zls"), pt6 = Table.TransformColumnTypes(pt5,{{"23", Int64.Type}, {"34", Int64.Type}, {"47", type date}}), replErrors = Table.ReplaceErrorValues(pt6, {{"23", null}, {"34", null}}), pt7 = Table.RemoveColumns(Table.SelectRows(replErrors, each not Text.Contains([10], "sup") and ([126]<>"ремонт" and [126]<>"tur. ремонт") and [115]<>"не получено"), {"115","126"}), pt8 = Table.ReplaceValue(pt7, each [28], each if Text.Contains([28],"gm", Comparer.OrdinalIgnoreCase) then 1 else null,Replacer.ReplaceValue,{"28"}), pt9 = Table.ReplaceValue(pt8, each [39], each if Text.Contains([39],"gm", Comparer.OrdinalIgnoreCase) then 1 else null,Replacer.ReplaceValue,{"39"}), pt10 = Table.AddColumn(pt9, "ready", each if [47]<>null then "готов" else if (Text.Start([10],2)="fw" and (([23]<>null and [28]<>null and [34]<>null and [39]=null) or ([23]<>null and [28]=null and [34]<>null and [39]<>null) or ([23]<>null and [28]<>null and [34]<>null and [39]<>null))) then "готов*" else if (Text.Start([10],2)="fw" and (([23]<>null and [28]<>null and [34]=null and [39]=null) or ([23]=null and [28]=null and [34]<>null and [39]<>null))) then "готов" else null), pt11 = Table.AddColumn(pt10, "jointWithMaterial", each if [23]<>null or [34]<>null then 1 else 0), groupData = Table.Group(pt11, {"zls"}, {{"data", each _, type table [zls=text, 10=text, 12=text, 23=nullable number, 28=nullable number, 34=nullable number, 39=nullable number, 47=nullable date, ready=nullable text, jointWithMaterial=number]}}), pt12 = Table.AddColumn(groupData, "ready", each if List.Count(List.RemoveNulls([data][ready]))>0 then if (List.Count(Table.SelectRows([data], each [jointWithMaterial]=1)[jointWithMaterial]) = List.Count(List.RemoveNulls(Table.SelectRows([data], each [jointWithMaterial]=1)[ready]))) then "WFO" else null else null), pt13 = Table.Buffer(Table.SelectRows(Table.RemoveColumns(pt12,{"data"}), each [ready]<>null)), pt14 = Table.SelectColumns(pt7, {"1", "zls", "10", "12"}), pt15 = Table.AddColumn(pt14, "wfo1", each try pt13[ready]{List.PositionOf(pt13[zls],[zls])} otherwise null), pt16 = Table.AddColumn(pt15, "wfo2", each try pt13[ready]{List.PositionOf(pt13[zls],[12])} otherwise null), pt17 = Table.AddColumn(pt16, "wfo", each if [wfo1]<>null and [wfo2]<>null then "WFO" else null), pt18 = Table.SelectRows(Table.SelectColumns(pt17, {"1","wfo"}), each [wfo]<>null) in pt18 |
PQ и краш файла из-за наличия запроса в этом файле
PQ и краш файла из-за наличия запроса в этом файле
19.05.2025 08:45:01
Здравствуйте.
Есть проблема. Краткая предыстория. Имеется файл xlsb, в который вносятся данные по сварке стыков. Файл хранится в сети и им пользуются несколько человек по очереди. Потребовалось сделать ко-какие вычисления для производства, которые я реализовал внутри файла с помощью PQ. Делал я всё на копии этого файла у себя на рабочем столе. Вычисления не сложные, всё работало нормально, довольно быстро вычислялось. Пришло время интегрировать этот запрос в общесетевой файл. Я скопировал текст запроса в блокнот, закрыл свой локальный файл, открыл сетевой файл, в него вставил этот код, сделал табличку выгрузки на лист, и вот тут началось. Выгрузка делалась наверное минут 20 и так и не завершилась удачно. Эксель просто завис и не подавал признаков жизни, хотя локально этот же запрос вычислялся менее, чем за минуту. Я завершил его через диспетчер задач. Тут же захожу в сетевой файл-а мне выдает ошибку восстановления файла. Путём долгих мытарств я вычислил, что именно присутствие этого запроса, который я добавил в файл, ломает его. Но я не пойму, почему это происходит. Запрос, который ломает файл, называется "wfo". Стоит его удалить-файл начинает нормально работать. Подскажите, где кроется проблема такого поведения PQ? Так, как файл превышает размер 300кб, прикладываю его на яндекс.диск. |
|
|
Удаление текста до и после символа одновременно, Нужно оставить часть текста до и после определённого символа
PQ, Web.Page(JS), регулярки - вытащить номера вхождений в строке
02.05.2025 09:42:02
Господа, спасибо за варианты. Подобрал наиболее подходящий, всё работает. Каждый из вариантов - пища для ума. Вы лучшие!
Изменено: |
|
|
PQ, Web.Page(JS), регулярки - вытащить номера вхождений в строке
01.05.2025 14:22:42
Здравствуйте господа.
Имеется таблица, в которой есть столбец с такими данными:
Требуется разделить текст по ключу. Ключём для разделения является буква G, за ней любая цифра и далее дефис (например "G2-"). Обращаю внимание, что просто использовать букву "G" нельзя, она может быть частью блока текста, который требуется отделить. Хочу реализовать это с помощью регулярок, которые можно использовать через функцию Web.Page. Для этого написал код, протестировал его в браузере, всё фунциклирует, на выходе в браузере выводится текст через запятую с позициями вхождений искомого текста. Далее хочу на основе позиции вхождения дальше колдовать над текстом. А вот в Web.Page внутри PQ этот код работать уже не желает, выводит ошибку. Ошибка сейчас присутствует в приложенном файле. Помогите разобраться с регуляркой. Я задаюсь вопросами: 1) какой движок js использует powerquery? 2) этот движок js, который использует pq, поддерживает метод exec? Ну и если посмотреть с другой стороны - может есть иное решение данной задачи? |
|||
|
PQ и повторение строки требуемое количество раз
PQ и повторение строки требуемое количество раз
PQ и трансформация списка по условию
PQ и трансформация списка по условию
10.03.2025 18:19:01
Здравствуйте.
Требуется превратить значения в списке из одной ячейки по разделителю (в данном случае запятая) в список отдельных значений. Тупым способом, обратив из листа в таблицу, разделив столбец по разделителю, транспонировав и в List - это я могу. Но хочется от гуру увидеть грамотный изящный способ без глупых шагов, если конечно он существует.
Изменено: |
|
|
PQ и pivot-unpivot столбцов
02.03.2025 11:06:42
Приветствую!
Есть табличка, в каждой строке которой есть два материала (столбцы 3-4 и 5-6). Заголовки столбцов имеют разные названия. Требуется поместить пары столбцов с материалами друг под друга, то есть сделать отмену свертывания столбцов. Тупым многошаговым способом я понимаю как это сделать. Сюда пришел с вопросом о том, как сделать тоже самое более красиво и изящно за меньшее количество шагов?
Изменено: |
|
|
PQ и столбец нумерации групп данных
16.02.2025 18:02:31
Здравствуйте.
Не могу додуматься, как сделать счетчик в текущей группе данных. Первым маркером служит первый null во втором столбце. Далее все что идет до второго null должно быть пронумеровано единицей. Второй null цифрой 2 и так далее.
Изменено: |
|
|
PQ. Table.CombineColumns и своя функция взамен Combiner.CombineTextByDelimiter
08.02.2025 14:29:39
mechanix 85, спасибо за вариант решения, но я написал, что хочу понять как решить эту задачу без дополнительного столбца
sotnikov, получается аргумент " х ", передаваемый функции " f " - это "мини-список" из двух значений data1 и data2 ? |
|
|
PQ. Table.CombineColumns и своя функция взамен Combiner.CombineTextByDelimiter
08.02.2025 12:22:54
Здравствуйте!
Имеется таблица из двух столбцов. Требуется объединить их, используя функцию Table.CombineColumns
В данном вопросе я прошу местных гуру разъяснить синтаксис использования своей функции для проверки содержимого ячеек вместо Combiner.CombineTextByDelimiter. Другими словами "показать как пользоваться удочкой", а не кормить рыбой )) К моему сожалению никак не могу понять как правильно писать стрелочные функции в таких случаях |
|||
|
PQ & Table.FillDown с условием
PQ & Table.FillDown с условием
05.02.2025 14:56:14
Здравствуйте! Требуется заполнить слово "название" в свой соответствующий блок данных с помощью PowerQuery. Конечно же стандартный способ через Table.FillDown не работает, поскольку при первом заполнении в любую сторону заполняется "Заголовком" из другого блока данных. Не могу ума дать, как сделать это. "Название" может находится в разных строках.
|
|
|
Требуется конвертировать данные из XLS в PLT (plotter)
Требуется конвертировать данные из XLS в PLT (plotter)
Требуется конвертировать данные из XLS в PLT (plotter)
04.02.2025 09:45:55
На работе имеется задача брать текст (в данном случае из таблиц эксель), вставлять его в coreldraw, выбирать "сохранить как", выбирать формат файла plt.
Интересен вопрос - а в экселе есть-ли вообще некая возможность с помощью расширения организовать такую возможность конвертации? И глобальный вопрос - существует-ли вообще база расширений (надстроек) для экселя, где можно поискать что-то интересное и полезное для себя?
Изменено: |
|
|
PQ и индексация (нумерация) строк по определенному алгоритму
23.01.2025 11:57:22
Подниму тему. Я стараюсь разбираться, как работают алгоритмы и в решении выше
Не могли бы пояснить, что делает оператор "?" в данном случае? Не смог найти нигде в спецификации про это. Есть только "??", но к данному случаю, как я понимаю, он не относится. |
|||
|
Почему Power Query так медленно работает?
04.11.2024 14:53:54
Вот и мне пришлось искать в интернете причины медленной работы PQ.
Замечательный инструмент, который работает порой через "пень-колоду". На ровном месте выдает ошибки (то таблица ему не та - недопустимый формат, то какие-то поля OLE DB не устраивают его, и там ещё масса подобных сообщений). Никакого решения я не смог найти. Делаю на одном компьютере запрос, закидываю в сетку, коллега открывает мой файл с запросом - всё опять сломано, не работает. Иду чинить... Порой ремонт заключается в том, чтоб просто открыть запрос в PQ, нажать там по очереди "обновить" на каждый запрос, и обязательно терпеливо дождаться его выполнения. Ведь PQ гордая птица, 10000 строк быстро не должны обрабатываться. Это же не нормально! МС Офис является образцом и примером для подражания всех остальных офисных "пакетов". А тут такой факап с ним. Так и приходиться работать :-(
Изменено: |
|
|
PQ и индексация (нумерация) строк по определенному алгоритму
24.10.2024 21:04:24
Спасибо за интерес к этой теме. Раз уж вам это интересно, помогите прикрутить любое из этих решений внутрь PQ. То есть чтоб сырые данные брались не из таблицы с листа эксель, а из столбцов в PQ. Можно оформить решение отдельной функцией, где например в качестве аргументов будут передаваться столбец с номером стыка и столбец с номерами труб. Так было бы вообще шикарно.
п.с. завидую вам, что можете написать эту логику. Я вроде не тупой, но мне очень трудно понять, как можно такой код придумать)) |
|
|
PQ и индексация (нумерация) строк по определенному алгоритму
22.10.2024 14:25:56
Изменено: |
|||
|
PQ и индексация (нумерация) строк по определенному алгоритму
22.10.2024 14:16:02
Изменено: |
|||
|
PQ и индексация (нумерация) строк по определенному алгоритму
21.10.2024 08:54:08
Здравствуйте!
Имеется такой список. В нём в первом столбце - номер стыка. Каждый стык занимает две строки (цветом специально выделил для наглядности пары строк одного стыка). В третьем столбце номера труб по одну и другую сторону стыка. Трубы внутри стыка могут быть в рандомном порядке, то есть первая строка в стыке не обязательно является первой трубой, может и наоборот. Поэтому привязаться к каждой первой строке каждого стыка тоже не получится. Задача такая - расставить с помощью функций (формул) нумерацию в порядке следования труб. То есть - есть "начало", это первая труба. Следующая труба - это вторая труба в этом стыке. Соответственно надо найти такой же номер (второй трубы первого стыка) у другого стыка, пронумеровать его номером 3, взять вторую трубу второго стыка, пронумеровать её номером 4 и найти этот же номер трубы уже у следующего стыка. И так далее.... На случай, когда будет не найдена последующая труба - просто прекратить нумерацию. Тем самым я увижу, на какой трубе у нас проблема во внесении данных. Ну и нумерация нужна не просто, чтоб найти эту проблему, а чтоб в последствии отсортировать по этому новому столбцу "нумерация", и весь список стыков и труб получился в том порядке, в котором они сварены в линию. И чуть не забыл. Прошу помочь с решением этого вопроса именно в powerquery, поскольку там ещё много других столбцов, которые также нужно обрабатывать. Я прикрепил лишь базовую выжимку, чтоб понять алгоритм такой нумерации. Но если у кого будет решение для excel, то как пищу для ума тоже буду рад увидеть.
Изменено: |
|
|
PQ и вытягивание значения из одного столбца по совпадению в другом
20.10.2024 17:02:47
Сделал такое решение - создал столбец с такой формулой
Из формулы понятно, что я сослался на нужную строку во вложенной таблице, найдя индекс строки с помощью List.PositionOf Всем спасибо за помощь))
Изменено: |
|||
|
PQ и вытягивание значения из одного столбца по совпадению в другом
20.10.2024 15:52:30
Приветствую!
Не хватает ума как сделать функцию, что вытянула значение из вложенной таблицы (столбец uniq_number -> вложенная таблица -> столбец количество) по совпадению номера трубы (совпадение N трубы в основной таблице и вложенная таблица в столбце uniq_number[Значение]. Во вложенной таблице я посчитал количество повторяющихся значений, теперь надо вытянуть сколько раз труба повторяется в основной таблице. Скрин с графическим описанием "что требуется" во вложении. В примере одна строка, требуется, чтоб напротив каждой вытянулось
Изменено: |
|
|
Скрытые диапазоны в книге xlsx
17.10.2024 17:30:02
|
|||
|
Скрытые диапазоны в книге xlsx
17.10.2024 15:03:56
И как всегда в процессе тестирования наступаешь на подводные камни. А как можно очистить этим скриптом всё, кроме нужного мне? А то он поудалял в том числе и "умные" таблицы", которые мне нужны. А у меня все ссылки на эти таблицы слетели. Привязаться можно было бы например к "видимости" диапазона, если такой атрибут имеется у него.
Изменено: |
|||
|
Скрытые диапазоны в книге xlsx
17.10.2024 14:20:05
Здравствуйте! На работе имеется файл xlsx, в котором производится внесение данных, строк около 10 тысяч, столбцов около 200. К сожалению с файлом работают много человек, со временем файл стал тормозить. Ранее он был в общем доступе (для совместного редактирования), потом общий доступ отменили по причине полного непонимания людей как правильно работать и что нажимать при совместном сохранении и тд. При подгрузке этого файла к powerquery я вижу множество именованных диапазонов (скрин pq.png), которые почему-то не видны в стандартном окне excel-формулы-диспетчер имен (скрин диспетчер имен xlsx.png). Суммарно в PQ видно около 130 строк с возможными данными в этой книге, из которых "полезные" данные - это всего около 10 листов (скрин листы книги xlsx.png).
Подскажите есть ли способ почистить книгу от этого "мусора"? |
|
|
Excel и всплывающая плашка с подсказкой аргументов формулы
08.10.2024 12:47:57
Здравствуйте. Проблема на прикрепленной картинке - бл$#ская подсказка каждый раз появляется ровно поверх буквенных обозначений столбцов, и как назло именно тех столбцов, которые мне нужно смотреть. Каждый раз убираю её к чертям собачьим, делая жёсткое движение мышью, в надежде доставить боль создателям этой плашки. Но в следующий раз она опять закрывает мне обзор. ВАЖНО! Мне она нужна, убрать полностью - не вариант.
Вопрос - можно ли изменить её "положение по умолчанию" ?
Изменено: |
|
|