Выбрать дату в календареВыбрать дату в календаре

Страницы: 1 2 След.
Базы данных, Как слезть с эксель и прийти к базе данных
 
Цитата
написал:
Что именно нужно получить на выходе?
На выходе нужно получить многопользовательскую базу данных с пользовательскими формами заполнения данных, в которых нужна проверка вводимых данных, понятно дело со связями между таблицами внутри базы данных. Одни люди вносят свою часть данных, на основании этих данных другие люди берут данные из например второй таблицы, и делают из неё третью. И всё это внутри одной единой базы данных, на выходе из которой можно делать итоговые сводки или отчёты и т
Базы данных, Как слезть с эксель и прийти к базе данных
 
Аналогичный вопрос, как у автора, волнует и меня. Имею на работе просто огромный ворох таблиц ексель. Всё завязывается на ручном "подтягивании" данных. Естественно это прошлый век, но тут так было заведено изначально и руководство не купит нам никаких программ. Я как умею, использую powerquery. Очень много где он выручает. Требуется, чтобы данные вводились примерно 10-20 людьми, всё это сводилось в 1 место, между собой было взаимосвязано, откуда можно будет делать и отчёты сводные, и аналитику. Я понимаю, что эта задача не уровня рядового инженера в крупной строительной организации общероссийского масштаба, но если я смог бы облегчить работу тут на месте для небольшой группы людей-это было бы чудом. Понимаю, что access может удовлетворить мои нужды, но нет знаний как это всё настроить.
Мой пост не содержит конкретного вопроса, скорее поддержу тему беседы, вдруг кто напишет чего путёвого куда мыслить дальше в такой ситуации.
Изменено: Andrew Rubanov - 16.08.2025 11:09:43
PQ и ошибка "[DataFormat.Error] Предоставленный путь к папке должен быть допустимым абсолютным значением"
 
sotnikov, век живи, век учись! Спасибо за уделенное мне время.
Я понял где у меня в коде ошибка.
В своём коде я ссылался на ячейку с текущей папкой таким образом:
Код
src=Excel.CurrentWorkbook(){0}[Content]{0}[Column1]
А надо было так
Код
src=Excel.CurrentWorkbook(){[Name="path"]}[Content]{0}[Column1]
потому, что когда создается именованный диапазон данных на листе от выгрузки запроса, он становится первой строчкой в этой таблице, и сбивает с толку весь запрос, поскольку запрос попадает сам в себя.
Спасибо за внимание.
Изменено: Andrew Rubanov - 04.08.2025 14:33:14
PQ и ошибка "[DataFormat.Error] Предоставленный путь к папке должен быть допустимым абсолютным значением"
 
Здравствуйте. Имеется два файла. В одном источник данных (source). Второй (output) должен затянуть эти данные и обработать их дальше.
Столкнулся с такой ошибкой, которая указана в названии темы. Понять не могу в чём дело. Работаю локально, в пути к папке нет кириллицы, спец.символов и тд.
Когда в свойствах "Загрузить в" у запроса указано "Только создать подключение" - то можно зайти в запрос и увидеть результаты действий, без ошибок. Как-будто бы всё в порядке. И дальше создавать шаги и тд.
Но стоит указать "Загрузить на лист", как вываливается ошибка и перестаёт показывать внутри PQ результат вычислений.
PQ и краш файла из-за наличия запроса в этом файле
 
Код
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 и краш файла из-за наличия запроса в этом файле
 
Здравствуйте.
Есть проблема. Краткая предыстория. Имеется файл xlsb, в который вносятся данные по сварке стыков. Файл хранится в сети и им пользуются несколько человек по очереди. Потребовалось сделать ко-какие вычисления для производства, которые я реализовал внутри файла с помощью PQ. Делал я всё на копии этого файла у себя на рабочем столе. Вычисления не сложные, всё работало нормально, довольно быстро вычислялось. Пришло время интегрировать этот запрос в общесетевой файл. Я скопировал текст запроса в блокнот, закрыл свой локальный файл, открыл сетевой файл, в него вставил этот код, сделал табличку выгрузки на лист, и вот тут началось. Выгрузка делалась наверное минут 20 и так и не завершилась удачно. Эксель просто завис и не подавал признаков жизни, хотя локально этот же запрос вычислялся менее, чем за минуту. Я завершил его через диспетчер задач. Тут же захожу в сетевой файл-а мне выдает ошибку восстановления файла. Путём долгих мытарств я вычислил, что именно присутствие этого запроса, который я добавил в файл, ломает его. Но я не пойму, почему это происходит. Запрос, который ломает файл, называется "wfo". Стоит его удалить-файл начинает нормально работать.
Подскажите, где кроется проблема такого поведения PQ?

Так, как файл превышает размер 300кб, прикладываю его на яндекс.диск.
https://disk.yandex.ru/d/CRJZf3Da_hBnCA
Удаление текста до и после символа одновременно, Нужно оставить часть текста до и после определённого символа
 
csv файл не умеет хранить в себе синий цвет выделения текста.
Вам нужно разделить текст по разделителю "_" ?
PQ, Web.Page(JS), регулярки - вытащить номера вхождений в строке
 
Господа, спасибо за варианты. Подобрал наиболее подходящий, всё работает. Каждый из вариантов - пища для ума. Вы лучшие!
Изменено: Andrew Rubanov - 02.05.2025 09:42:33
PQ, Web.Page(JS), регулярки - вытащить номера вхождений в строке
 
Здравствуйте господа.

Имеется таблица, в которой есть столбец с такими данными:
Цитата
G1-87Y11,G2-87Y11,G3-87Y11,G4-87Y11,G1-87Y21,G2-87Y21,G3-87Y21,G4-87Y21,G1-87Y31,G2-87Y31,G3-87Y31,G4-87Y31
D2110BX0-CX(EX)-3201А/G0-D2110BX0-CX(EX)-3201B/G0-D2110BX0-CX(EX)-3201C
G0-87PM01A-TA03G0-87PM01B-TA03G0-33E01C-TA03G0-33E01D-TA03G0-33E01E-TA03G0-33E01F-TA0

Требуется разделить текст по ключу. Ключём для разделения является буква G, за ней любая цифра и далее дефис (например "G2-"). Обращаю внимание, что просто использовать букву "G" нельзя, она может быть частью блока текста, который требуется отделить.
Хочу реализовать это с помощью регулярок, которые можно использовать через функцию Web.Page.
Для этого написал код, протестировал его в браузере, всё фунциклирует, на выходе в браузере выводится текст через запятую с позициями вхождений искомого текста. Далее хочу на основе позиции вхождения дальше колдовать над текстом.
А вот в Web.Page внутри PQ этот код работать уже не желает, выводит ошибку. Ошибка сейчас присутствует в приложенном файле.

Помогите разобраться с регуляркой. Я задаюсь вопросами:
1) какой движок js использует powerquery?
2) этот движок js, который использует pq, поддерживает метод exec?

Ну и если посмотреть с другой стороны - может есть иное решение данной задачи?
PQ и повторение строки требуемое количество раз
 
Великолепно!
Благодарю!
PQ и повторение строки требуемое количество раз
 
Здравствуйте.
Требуется повторить строку столько раз, какое число имеется в ячейке "кол-во".
PQ и трансформация списка по условию
 
Эх я балбес)) Точно! Всё оказалось сильно проще, чем я думал. Спасибо за то, что ткнули куда надо.
PQ и трансформация списка по условию
 
Здравствуйте.
Требуется превратить значения в списке из одной ячейки по разделителю (в данном случае запятая) в список отдельных значений.
Тупым способом, обратив из листа в таблицу, разделив столбец по разделителю, транспонировав и в List - это я могу.
Но хочется от гуру увидеть грамотный изящный способ без глупых шагов, если конечно он существует.
Изменено: Andrew Rubanov - 10.03.2025 18:19:45
PQ и pivot-unpivot столбцов
 
Приветствую!
Есть табличка, в каждой строке которой есть два материала (столбцы 3-4 и 5-6). Заголовки столбцов имеют разные названия.
Требуется поместить пары столбцов с материалами друг под друга, то есть сделать отмену свертывания столбцов.
Тупым многошаговым способом я понимаю как это сделать.
Сюда пришел с вопросом о том, как сделать тоже самое более красиво и изящно за меньшее количество шагов?
Изменено: Andrew Rubanov - 02.03.2025 11:08:46
PQ и столбец нумерации групп данных
 
Здравствуйте.
Не могу додуматься, как сделать счетчик в текущей группе данных. Первым маркером служит первый null во втором столбце. Далее все что идет до второго null должно быть пронумеровано единицей. Второй null цифрой 2 и так далее.  
Изменено: Andrew Rubanov - 16.02.2025 19:22:23
PQ. Table.CombineColumns и своя функция взамен Combiner.CombineTextByDelimiter
 
mechanix 85,  спасибо за вариант решения, но я написал, что хочу понять как решить эту задачу без дополнительного столбца

sotnikov, получается аргумент " х ", передаваемый функции " f " - это "мини-список" из двух значений data1 и data2 ?
PQ. Table.CombineColumns и своя функция взамен Combiner.CombineTextByDelimiter
 
Здравствуйте!
Имеется таблица из двух столбцов. Требуется объединить их, используя функцию Table.CombineColumns
Код
Table.CombineColumns(Источник,{"data1", "data2"},Combiner.CombineTextByDelimiter("", QuoteStyle.None),"Сведено")
Задача простая и выполняется "кнопками". Но есть одно условие - перед объединением требуется проверить содержимое ячеек на идентичность, и с в случае идентичности не объединять их, а оставить одно значение. Я понимаю, что можно сделать дополнительным столбцом, сравнив ячейки с помощью if-then-else.
В данном вопросе я прошу местных гуру разъяснить синтаксис использования своей функции для проверки содержимого ячеек вместо Combiner.CombineTextByDelimiter.
Другими словами "показать как пользоваться удочкой", а не кормить рыбой )) К моему сожалению никак не могу понять как правильно писать стрелочные функции в таких случаях
PQ & Table.FillDown с условием
 
Vik_tor, да, способ не изящный, но простая логика доступна простым крестьянам. Спасибо за вариант!

sotnikov, вот этот способ изящнее и умнее. Не могу понять, какую логику выполняет функция "g", можно пояснить?
PQ & Table.FillDown с условием
 
Здравствуйте! Требуется заполнить слово "название" в свой соответствующий блок данных с помощью PowerQuery. Конечно же стандартный способ через Table.FillDown не работает, поскольку при первом заполнении в любую сторону заполняется "Заголовком" из другого блока данных. Не могу ума дать, как сделать это. "Название" может находится в разных строках.
Требуется конвертировать данные из XLS в PLT (plotter)
 
Да про поиск в яндексе и гугле - это понятно.
Думал может есть какой-то фанатский сайт, где собраны дополнения.
Ладно, понял, что напрямую из xls в plt не смогу конвертировать.
Требуется конвертировать данные из XLS в PLT (plotter)
 
А кроме официального "магазина" что-то типа сторонней базы существует?
Требуется конвертировать данные из XLS в PLT (plotter)
 
На работе имеется задача брать текст (в данном случае из таблиц эксель), вставлять его в coreldraw, выбирать "сохранить как", выбирать формат файла plt.
Интересен вопрос - а в экселе есть-ли вообще некая возможность с помощью расширения организовать такую возможность конвертации?

И глобальный вопрос - существует-ли вообще база расширений (надстроек) для экселя, где можно поискать что-то интересное и полезное для себя?
Изменено: Andrew Rubanov - 04.02.2025 09:52:13
PQ и индексация (нумерация) строк по определенному алгоритму
 
Подниму тему. Я стараюсь разбираться, как работают алгоритмы и в решении выше пост16 есть строка
Код
c=List.Difference(b,{y}){0}?,

Не могли бы пояснить, что делает оператор "?" в данном случае? Не смог найти нигде в спецификации про это. Есть только "??", но к данному случаю, как я понимаю, он не относится.

Почему Power Query так медленно работает?
 
Вот и мне пришлось искать в интернете причины медленной работы PQ.
Замечательный инструмент, который работает порой через "пень-колоду".
На ровном месте выдает ошибки (то таблица ему не та - недопустимый формат, то какие-то поля OLE DB не устраивают его, и там ещё масса подобных сообщений). Никакого решения я не смог найти. Делаю на одном компьютере запрос, закидываю в сетку, коллега открывает мой файл с запросом - всё опять сломано, не работает. Иду чинить... Порой ремонт заключается в том, чтоб просто открыть запрос в PQ, нажать там по очереди "обновить" на каждый запрос, и обязательно терпеливо дождаться его выполнения. Ведь PQ гордая птица, 10000 строк быстро не должны обрабатываться. Это же не нормально! МС Офис является образцом и примером для подражания всех остальных офисных "пакетов". А тут такой факап с ним. Так и приходиться работать :-(
Изменено: Andrew Rubanov - 04.11.2024 14:55:25
PQ и индексация (нумерация) строк по определенному алгоритму
 
Спасибо за интерес к этой теме. Раз уж вам это интересно, помогите прикрутить любое из этих решений внутрь PQ. То есть чтоб сырые данные брались не из таблицы с листа эксель, а из столбцов в PQ. Можно оформить решение отдельной функцией, где например в качестве аргументов будут передаваться столбец с номером стыка и столбец с номерами труб. Так было бы вообще шикарно.

п.с. завидую вам, что можете написать эту логику. Я вроде не тупой, но мне очень трудно понять, как можно такой код придумать))
PQ и индексация (нумерация) строк по определенному алгоритму
 
Цитата
tula19 написал:
Решение без использования табличных функций.
А вот этот способ сработал точно, как надо. Проверил, добавив ещё парных номеров труб, нумерация продолжилась дальше в том порядке, как требуется. Огромное спасибо вам обоим за помощь. Для меня такие монструозные "функции" сложны, но надеюсь смогу прикрутить к существующей задаче.
Изменено: Andrew Rubanov - 22.10.2024 14:27:10
PQ и индексация (нумерация) строк по определенному алгоритму
 
Цитата
AlienSx написал:
вроде сходится с примером (без "начало" и "далее не найдено" - там и так все понятно)
Спасибо за уделённое время. Задачка действительно не простая судя по коду. Результат получился почти правильным. На картинке указал красными стрелками как получилось, а зелеными стрелками желаемый результат. Получается ваш код "перевернул" трубы у каждого стыка.
Изменено: Andrew Rubanov - 22.10.2024 14:26:42
PQ и индексация (нумерация) строк по определенному алгоритму
 
Здравствуйте!
Имеется такой список. В нём в первом столбце - номер стыка. Каждый стык занимает две строки (цветом специально выделил для наглядности пары строк одного стыка). В третьем столбце номера труб по одну и другую сторону стыка. Трубы внутри стыка могут быть в рандомном порядке, то есть первая строка в стыке не обязательно является первой трубой, может и наоборот. Поэтому привязаться к каждой первой строке каждого стыка тоже не получится. Задача такая - расставить с помощью функций (формул) нумерацию в порядке следования труб. То есть - есть "начало", это первая труба. Следующая труба - это вторая труба в этом стыке. Соответственно надо найти такой же номер (второй трубы первого стыка) у другого стыка, пронумеровать его номером 3, взять вторую трубу второго стыка, пронумеровать её номером 4 и найти этот же номер трубы уже у следующего стыка. И так далее....
На случай, когда будет не найдена последующая труба - просто прекратить нумерацию. Тем самым я увижу, на какой трубе у нас проблема во внесении данных. Ну и нумерация нужна не просто, чтоб найти эту проблему, а чтоб в последствии отсортировать по этому новому столбцу "нумерация", и весь список стыков и труб получился в том порядке, в котором они сварены в линию.
И чуть не забыл. Прошу помочь с решением этого вопроса именно в powerquery, поскольку там ещё много других столбцов, которые также нужно обрабатывать. Я прикрепил лишь базовую выжимку, чтоб понять алгоритм такой нумерации. Но если у кого будет решение для excel, то как пищу для ума тоже буду рад увидеть.
Изменено: Andrew Rubanov - 21.10.2024 19:10:07
PQ и вытягивание значения из одного столбца по совпадению в другом
 
Сделал такое решение - создал столбец с такой формулой
Код
[group][Количество]{List.PositionOf([group][Значение],[Значение])}

Из формулы понятно, что я сослался на нужную строку во вложенной таблице, найдя индекс строки с помощью List.PositionOf

Всем спасибо за помощь))

Изменено: Andrew Rubanov - 20.10.2024 17:04:21
PQ и вытягивание значения из одного столбца по совпадению в другом
 
Приветствую!
Не хватает ума как сделать функцию, что вытянула значение из вложенной таблицы (столбец uniq_number -> вложенная таблица -> столбец количество) по совпадению номера трубы (совпадение N трубы в основной таблице и вложенная таблица в столбце uniq_number[Значение]. Во вложенной таблице я посчитал количество повторяющихся значений, теперь надо вытянуть сколько раз труба повторяется в основной таблице. Скрин с графическим описанием "что требуется" во вложении. В примере одна строка, требуется, чтоб напротив каждой вытянулось
Изменено: Andrew Rubanov - 20.10.2024 17:03:09
Страницы: 1 2 След.
Наверх