Разделение одной таблицы состоящей из 1000 строк и 3х столбцов на равные таблицы по 50 строк, Приходится ежедневно разносить одну длинную таблицу на несколько по 40-50 строк для вывода в чертеж
Пользователь
Сообщений: Регистрация: 09.07.2023
11.05.2026 18:32:11
Здравствуйте!
pq
Код
let
f=(x)=>Excel.CurrentWorkbook(){[Name=x]}[Content],
from = f("table1"),
num=Table.FirstValue(f("number")),
lst=List.Buffer(Table.ToList(from,(x)=>x&{null})),
spl=List.TransformMany(List.Split(lst,num), (x)=>{{1..List.Count(x)}}&List.Zip(x),(x,y)=>y),
tbl=Table.FromColumns(spl)
in
tbl
Изменено: - 11.05.2026 18:38:49
Ma_Ri ≠ Мария
Создать таблицу из массива данных в Power Query, Создать таблицу из массива данных в Power Query
Пользователь
Сообщений: Регистрация: 09.07.2023
11.05.2026 18:25:33
Здравствуйте!
Цитата
MindMeicter, написал: Как это делается через транспонирование и функцию ОБЪЕДИНИТЬ в обычном экселе я знаю.
тоже самое только в Power Query (практически кнопками)
pq
Код
let
Source = Excel.CurrentWorkbook(){[Name="Source"]}[Content],
trsp = Table.Transpose(Table.DemoteHeaders(Source)),
nms=List.Skip(Table.ColumnNames(trsp)),
com=Table.CombineColumns(trsp,nms,(x)=>Text.Combine(List.Transform(x,Text.From), ", "),"Value")
in
com
Ma_Ri ≠ Мария
Выборочное изьятие символов в тексте, Выборочное изьятие символов в тексте
Пользователь
Сообщений: Регистрация: 09.07.2023
11.05.2026 18:17:46
Здравствуйте!
pq
Код
let
f=(x)=>Combiner.CombineTextByEachDelimiter({"01","21"})(Splitter.SplitTextByAnyDelimiter({"(01)","(21)"})(x)),
Source = Excel.CurrentWorkbook(){[Name="Таблица1"]}[Content][text],
to=List.Transform(Source,f)
in
to
Ma_Ri ≠ Мария
Подсчет рабочего времени из СКУД
Пользователь
Сообщений: Регистрация: 09.07.2023
29.04.2026 15:40:56
Здравствуйте! smart2024, а как Вы обрабатываете такую ситуацию: когда есть "вход" и два подряд "выход"?
Ma_Ri ≠ Мария
Перенос строк в соответствии с заданным значением
Пользователь
Сообщений: Регистрация: 09.07.2023
27.04.2026 18:35:51
Red_barada, пробуйте, вносите данные в таблицы, которые я выгрузила на Лист на основе Запросов, меняйте, обновляйте.
Red_barada, что это значит? Сейчас у Вас даты подсвечены в столбце "I"?
Ma_Ri ≠ Мария
Перенос строк в соответствии с заданным значением
Пользователь
Сообщений: Регистрация: 09.07.2023
27.04.2026 13:13:33
Цитата
Red_barada написал: Требуется. В прилагаемом файле необходимо перенести строчку (№1) ниже 60 строчки по наступлению текущей даты в столбце М2:М60.
СТОП! Речь шла о столбце М2:М60? Так где надо проверять дату, чтобы она соответствовала условию?
Ma_Ri ≠ Мария
Перенос строк в соответствии с заданным значением
Пользователь
Сообщений: Регистрация: 09.07.2023
27.04.2026 11:43:23
Red_barada, это код на языке M. В данном файле Вы можете посмотреть работу кода на Листе "base" (вносите данные в таблицу, обновляйте Запрос). Мне непонятно это постоянная таблица, в которой Вы работаете? Как попадают данные в таблицу, я так понимаю строки с 1 по 60? Я видимо чего-то не понимаю...
Изменено: - 27.04.2026 13:03:52
Ma_Ri ≠ Мария
Перенос строк в соответствии с заданным значением
Пользователь
Сообщений: Регистрация: 09.07.2023
27.04.2026 11:25:29
Здравствуйте!
Цитата
Red_barada, написал: необходимо 1ю закупку перенести в 61 строку, а первую строчку стереть.
Если строку надо не очистить, а удалить, то код надо скорректировать
pq
Код
let
from = Excel.CurrentWorkbook(){[Name="base"]}[Content],
dt=Date.From(DateTime.LocalNow()),
nms=List.Buffer(Table.ColumnNames(from)),
rec_null=Record.FromList(List.Repeat({null},List.Count(nms)),nms),
frst=((a)=>if Table.RowCount(a) <60 then a & #table({},List.Repeat({{}},60-Table.RowCount(a))) else a) (Table.FirstN(from,60)),
skip=Table.Skip(from,60),
sel=Table.SelectRows(frst,(x)=>Date.From(x[Итог])=dt),
rep=Table.ReplaceMatchingRows(frst, List.Zip({Table.ToRecords(sel), List.Repeat({rec_null},Table.RowCount(sel))})),
to=Table.CombineColumns(Table.AddIndexColumn(rep & sel & skip,"ind",1),{"ind","№ п/п"},(x)=>x{0},"№ п/п")
in
to
Изменено: - 27.04.2026 12:30:25
Ma_Ri ≠ Мария
распределение плана продаж слево направо
Пользователь
Сообщений: Регистрация: 09.07.2023
21.04.2026 17:03:55
Здравствуйте!
pq
Код
let
from = Excel.CurrentWorkbook(){[Name="data"]}[Content],
add1=Table.AddColumn(from,"Доля",(x)=>x[продажи]/List.Sum(from[продажи]),Percentage.Type),
add2=Table.AddColumn(add1,"Месячный план",(x)=>mpl*x[Доля],type number),
add3=Table.AddColumn(add2,"Отклонение",(x)=>x[Стратег план]-x[Месячный план]),
rec=((a)=>[#"dif(+)"=List.Sum(List.Select(a,(x)=>x>0)),
#"dif(-)"=List.Sum(List.Select(a,(x)=>x<0)),
pr=- #"dif(-)"/#"dif(+)"])(add3[Отклонение]),
add4=Table.AddColumn(add3,"Коррекция",(x)=>if x[Отклонение]<0 then x[Стратег план] else x[Отклонение]*rec[pr]+x[Месячный план]),
to=Table.RemoveColumns(add4,"Отклонение")
in
to
Изменено: - 21.04.2026 17:35:04
Ma_Ri ≠ Мария
Подбор по дате продажи и SKU из списка номера Акции и информации по причинам (в списке Акций указан интервал по датам действия)
Пользователь
Сообщений: Регистрация: 09.07.2023
16.04.2026 17:09:45
Здравствуйте!
pq
Код
let
f=(x)=>Excel.CurrentWorkbook(){[Name=x]}[Content],
g=(x)=>Table.FillDown(Table.Sort(x,{"Дата",{"Дата окончания",Order.Descending}}),List.LastN(nms,4)),
sale = Table.TransformColumnTypes(f("sales"),{{"Дата", type date}}),
act = Table.RenameColumns(Table.TransformColumnTypes(f("data"),{{"Дата начала", type date}, {"Дата окончания", type date}}),{"Дата начала","Дата"}),
gr_data= Table.Group(act,{"SKU Код","Дата"},{"tmp",(x)=>Table.Max(x,"Дата окончания")}),
rec=Table.FromRecords(gr_data[tmp]) & sale,
nms=Table.ColumnNames(rec),
gr=Table.Group(rec,"SKU Код",{"tmp",g}),
com=Table.RemoveColumns(Table.SelectRows(Table.Combine(gr[tmp]),(i)=>i[Дата окончания]=null),"Дата окончания")
in
com
Ma_Ri ≠ Мария
Сравнить две таблицы Excel, Не могу сверить две таблицы со значениями общий признак, которых повторяется по несколько раз в строках
Пользователь
Сообщений: Регистрация: 09.07.2023
25.03.2026 16:38:55
Здравствуйте!
Цитата
arturdaimler, написал:Я плохо работаю с макросами. Если есть возможность ...работать с вашими кодами на постоянной основе.
Это не макрос, а код на языке M (Power Query). Чтобы работать с кодом на постоянной основе необходимо понимать с какими данными Вы будете работать на постоянной основе. 1.Почему выделен шифр 7.139 (новое) и 7.138 (старое) в Вашем первом файле. Эти шифры присутствуют и в старых и новых данных. 2. Что значит зачеркнутый шифр строка 421 (второй файл), у меня это обработается как значение.
Цитата
ПавелW, написал:...и в A5 у вас дата (не исправлял)
3. Как уже указали Вам, у Вас в данных в ячейке A5 - дата, я в своих данных исправила вручную, но если не править, то результат будет с этим шифром неверный (не тот, который Вы ожидаете). 4. Объединенные шифры, которые присутствовали в первом файле, у меня в коде я разношу их в отдельные строки, посмотрите итоговый результат (res). А какой результат надо получить в этом случае, если рассматривать исходные данные? 5. Во втором загруженном файле Вами выделены проблемные (как Вы сказали) шифры и у Вас при сравнении выдает ЛОЖЬ. Смотрите у меня при сравнении ИСТИНА и поэтому их в файле с отличиями нет.
Цитата
arturdaimler, написал:Данные по этапам и шифрам в этих этапах регулярно меняются
arturdaimler, Вы не могли бы приложить файл (ы) с реальными данными (в первозданном виде) - с новыми шифрами и старыми шифрами (удалив лишь другую информацию), а не те, в которых Вы поработали... Если это невозможно, то могу предложить вариант - отправить мне на e-mail (в профиле). Если у меня получится Вам помочь, то это будет абсолютно бесплатно... Сейчас я пока не вижу смысла в пояснениях.
Изменено: - 25.03.2026 16:54:01
Ma_Ri ≠ Мария
Создание отчета при помощи сводной таблицы или группировка товаров с агрегацией показателей в Power Query
Пользователь
Сообщений: Регистрация: 09.07.2023
24.03.2026 09:57:46
Добрый день! Vasyanya, здравствуйте! Не расстраивайтесь из-за закрытия темы, такое случается со многими новичками. Главное, что Вы разобрались со своими проблемами. Правила оформления существуют, чтобы всем было проще ориентироваться, и Вы быстро их освоите.Смело обращайтесь на форум, когда понадобится помощь! Здесь настоящие профессионалы, которые творят чудеса, по-другому и не скажешь. PS. Теперь Вы знаете этот нюанс с названием темы, и в следующий раз постарайтесь при создании темы сформулировать название, которое отражает суть задачи. Это сразу привлечёт внимание экспертов по указанной теме. Всего Вам доброго!
Ma_Ri ≠ Мария
Прошу открыть тему
Пользователь
Сообщений: Регистрация: 09.07.2023
24.03.2026 09:45:55
Добрый день! Sanja, если бы Вы написали об этом в теме (как это обычно делаете), то я бы так и сделала. Благодарю!
Ma_Ri ≠ Мария
Прошу открыть тему
Пользователь
Сообщений: Регистрация: 09.07.2023
23.03.2026 18:32:59
Уважаемые модераторы, очень Вас прошу отнестись снисходительно к ТС (), который новичок на форуме (количество сообщений) и возможно, еще теряется в разделах форума и испытывает трудности в оформлении поста и формулировки темы. Уважение должно быть обоюдным: не только новичок должен стараться следовать правилам, но и старожилы — быть терпимее и отзывчивее. Давайте поможем ему разобраться с проблемой, но уже второй раз (думала второй раз, а там по-моему уже 4-ый раз) закрываете тему. Нам всем когда-то была нужна помощь. Название для : "Создание отчета при помощи сводной таблицы или группировка товаров с агрегацией показателей в Power Query"
Надеюсь на понимание и позитивный отклик!
Изменено: - 23.03.2026 19:17:29
Ma_Ri ≠ Мария
Создание отчета при помощи сводной таблицы или группировка товаров с агрегацией показателей в Power Query
Пользователь
Сообщений: Регистрация: 09.07.2023
23.03.2026 16:59:23
Здравствуйте!
pq
Код
let
f=(x)=>(y)=>List.Sum(Table.Column(y,x)),
lst=List.Transform({"Цена","кол-во ","сумма"},(x)=>{x,f(x)}),
from = Excel.CurrentWorkbook(){[Name="Таблица13"]}[Content],
gr= Table.Group(from,{"ID","наименование"},lst)
in
gr
Если порядковый номер обязательно нужен, то добавьте в код (в файле)
Сложение по конкретным артикулам , которые объединённые, EXcel
Пользователь
Сообщений: Регистрация: 09.07.2023
23.03.2026 16:32:58
Здравствуйте!
Цитата
LuckyArts, написал:таблицами не умею пользоваться (
Придется Sanja, писать макрос, так как ТС не умеет работать с таблицами и надо нажать на "волшебную" кнопку и "Вуаля" (как-то так)... По теме:
Цитата
Sanja, написал: А строка 738? Название магазина такое?
с такими названиями магазинов как "ужасное качество" (строка 738) и "утиль" проще на самом деле, эти строки - "утиль" и они удаляются. Так по крайней мере указывает в своей просьбе ТС ("убрать утиль"). Далее просит ТС
Цитата
LuckyArts, написал: сложились единички в общее количество с объединёнными артикулами
Понятно... Но в таблице присутствуют пустые (необъединенные) ячейки, в которых нет артикула, но в некоторых проставлено количество. Как это понимать (к чему это относится)? У меня в файле зеленой заливкой выделены все объединенные ячейки, желтой заливкой выделены пустые (необъединенные) ячейки. А с магазинами вообще ничего не понятно, что к чему относится? Поэтому куда двигаться дальше не знаю...
Ma_Ri ≠ Мария
Сложение по конкретным артикулам , которые объединённые, EXcel
Пользователь
Сообщений: Регистрация: 09.07.2023
22.03.2026 17:17:15
Здравствуйте!
Цитата
написал:И строки 1404-1405?
Это тоже "утиль" (отметка в столбце "Магазин")
Цитата
написал: Правда не понятно что с названиями магазинов делать.
И правда не понятно...
Изменено: - 22.03.2026 17:41:24
Ma_Ri ≠ Мария
Сравнить две таблицы Excel, Не могу сверить две таблицы со значениями общий признак, которых повторяется по несколько раз в строках
Пользователь
Сообщений: Регистрация: 09.07.2023
20.03.2026 18:08:58
Здравствуйте! В одной из таблиц есть объединенные шифры, в другой нет, но я преобразовала на всякий случай обе таблицы. Код думаю можно покритиковать , надеюсь будут предложены другие варианты. Сделала по представленному примеру и добавила код с отличиями.
Цитата
arturdaimler, написал:Удобнее было бы проверять все это, если бы были столбцы с названием этапа, и в этом столбце указаны шифры к этому этапу
let
f=(x)=>Excel.CurrentWorkbook(){[Name=x]}[Content],
g=(x)=>List.Transform(List.RemoveMatchingItems(Text.Split(x??"","#(lf)"),{""}), f_txtTrim),
tr_new=Table.TransformColumns(f("table_new"),{"Шифр",g}),
exp_new =Table.ExpandListColumn(tr_new, "Шифр"),
tr_old=Table.TransformColumns(f("table_old"),{"Шифр",g}),
exp_old =Table.ExpandListColumn(tr_old, "Шифр"),
gr_new=Table.Buffer(Table.Group(exp_new,"Номер Этапа",{"Этап",(x)=>x[Шифр]})),
gr_old=Table.Buffer(Table.Group(exp_old,"Номер Этапа",{"Этап",(x)=>x[Шифр]})),
nms_new=List.Buffer(List.Transform(gr_new[Номер Этапа],(x)=>x&" new")),
nms_old=List.Buffer(List.Transform(gr_old[Номер Этапа],(x)=>x&" old")),
to=Table.FromColumns(gr_new[Этап]&gr_old[Этап],nms_new&nms_old),
nms=List.Combine(List.Zip({nms_new,nms_old})),
sel=Table.SelectColumns(to,nms)
in
sel
Изменено: - 22.03.2026 17:12:58
Ma_Ri ≠ Мария
PQ, операции с данными в предыдущей строке, Вычислить остаток, используя значение предыдущей строки
Пользователь
Сообщений: Регистрация: 09.07.2023
17.03.2026 18:28:13
Добрый вечер! LkkL, по правилам форума рекомендуется загружать файлы, а не изображения. Это позволит и другим участникам предложить помощь. Но я Вам предложила как это сама поняла, один вариант с группировкой по товару, другой без группировки.
pq_v1
Код
let
f=(x)=> Excel.CurrentWorkbook(){[Name=x]}[Content],
g=(x)=>[tb=Table.Sort(x,"Дата"),
rec=List.Buffer(Table.ToRecords(tb)),
gen=List.Generate(
()=>[i=0,r=rec{i},ost_mon=Record.FieldOrDefault(dict,r[Товар],0),ost=ost_mon+r[Поступление]-r[Выбытие]],
(x)=>x[i]<List.Count(rec),
(x)=>[i=x[i]+1,r=rec{i},ost_mon=x[ost], ost=ost_mon+(r[Поступление]??0)-(r[Выбытие]??0)],
(x)=>x[r] & [остаток на начало дня=x[ost_mon], остаток на конец дня=x[ost]])][gen],
from=Table.TransformColumns(Table.Buffer(f("data")),{"Дата",Date.From},(x)=>x??0),
dict=((a)=>Record.FromList(a[Остаток],a[Товар]))(f("dict")),
gr=Table.Group(from,"Товар",{"tmp",g}),
nms=((a)=>List.FirstN(a,2)&{"остаток на начало дня"}&List.Skip(a,2)&{"остаток на конец дня"})(Table.ColumnNames(from)),
to=Table.FromRecords(List.Combine(gr[tmp]),nms)
in
to
pq_v2
Код
let
f=(x)=> Excel.CurrentWorkbook(){[Name=x]}[Content],
g=(optional x)=>[i=if x=null then 0 else x[i]+1,
dict=if x=null then dict else x[new_dict],
r=rec{i},
ost=Record.FieldOrDefault(dict,r[Товар],0),
new_ost=ost + r[Поступление] - r[Выбытие],
new_dict=if Record.HasFields(dict,r[Товар])
then Record.TransformFields(dict,{r[Товар],(x)=>new_ost})
else Record.AddField(dict,r[Товар],new_ost) ],
dict=((a)=>Record.FromList(a[Остаток],a[Товар]))(f("dict")),
from = Table.Sort(Table.TransformColumns(Table.Buffer(f("data")),{"Дата",Date.From},(x)=>x??0),{"Дата"}),
n=List.Count(rec),
rec=List.Buffer(Table.ToRecords(from)),
gen=List.Generate(g,(x)=>x[i] < n,g,(x)=>x[r] &[остаток на начало дня=x[ost], остаток на конец дня=x[new_ost]]),
nms=((a)=>List.FirstN(a,2)&{"остаток на начало дня"}&List.Skip(a,2)&{"остаток на конец дня"})(List.Buffer(Table.ColumnNames(from))),
tb=Table.FromRecords(gen,nms)
in
tb
Ma_Ri ≠ Мария
ПРОСМОТРХ - поиск в двух столбцах, Как заставить функцию ПРОСМОТРХ искать значение в двух столбцах?
Пользователь
Сообщений: Регистрация: 09.07.2023
12.03.2026 17:40:33
Здравствуйте!
pq_v1
Код
let
f=(x)=>Excel.CurrentWorkbook(){[Name=x]}[Content],
from=List.Buffer(Table.ToColumns(f("event"))),
dt=Table.FirstValue(f("date")),
lst=List.Transform(List.FirstN(from,2),(x)=>List.PositionOf(x,dt,Occurrence.All)),
to=((pos)=>if pos={}
then "нет"
else Text.Combine(List.Distinct(List.Transform(List.Buffer(pos),(i)=>List.Last(from){i})),", "))
(List.Combine(lst))
in
to
pq_v2
Код
let
f=(x)=>Excel.CurrentWorkbook(){[Name=x]}[Content],
from=List.Buffer(Table.ToList(f("event"),(x)=>List.Transform(x,Text.From))),
dt=Table.FirstValue(f("date")),
fnd=List.FindText(from,Text.From(dt)),
to=if fnd={} then "нет" else Text.Combine(List.Distinct(List.Transform(fnd,List.Last)),", ")
in
to
Ma_Ri ≠ Мария
массовая подстановка значений в определенные ячейки по условию, Формула, pq, макрос.
Пользователь
Сообщений: Регистрация: 09.07.2023
10.03.2026 14:45:21
Здравствуйте! Вариант с PQ (выделение с УФ)...в файле исходные данные перемешала, поэтому с Вашим результатом не совпадает,
Скрытый текст
Код
let
f=(x)=>((n)=>List.Repeat({null},n) & lst{x[row]-1})
(Number.IntegerDivide(x[порядок]-1,3)*4),
from = Excel.CurrentWorkbook(){[Name="data"]}[Content],
typ=List.Zip({{"поле 1","поле 2","поле 3","поле 4"},List.Repeat({Text.Type},4)}),
tr=Table.TransformColumnTypes(from,typ),
lst= List.Buffer(Table.ToList(tr,(x)=>List.RemoveLastN(List.Skip(x),1)&List.FirstN(x,1))),
add=Table.AddColumn(tr,"x", f),
to=Table.SplitColumn(add,"x",(x)=>x,21)
in
to
Изменено: - 10.03.2026 14:51:07(комментарий по исходным данным)
Ma_Ri ≠ Мария
Распределение по столбцам., Необходимо распределить артикулы согласно индексам.
Пользователь
Сообщений: Регистрация: 09.07.2023
01.03.2026 18:13:13
Здравствуйте!
для NIK2020
NIK2020, вижу, что Вы воспользовались рекомендациями по ссылке, где данные в редактор Power Query загружаются из Данные - Получить данные - Из файла - Из книги Excel (Data - Get Data - From file - From Excel).Хорошо, пусть так. Но дальше – это … надо поправить )
Код
Источник = Excel.Workbook(File.Contents("S:\B2C\МАРКЕТИНГ\Аналитика\Проекты и разработки\Категорийный анализ\2025\4 кв 2025\Автоматизация\Отчет (4 квартал 2025 г.).xlsx"), null, true),
#"База по группам_Sheet" = Источник{[Item="База по группам",Kind="Sheet"]}[Data],
1. Это Вы получили при загрузке данных из файла. Значение «null» указывает, должна ли первая строка таблицы рассматриваться как заголовок. Если null, оставляем как есть. Соответственно Вам пришлось создавать дополнительный шаг и поднимать первую строку таблицы в Заголовок.
Код
#"Повышенные заголовки" = Table.PromoteHeaders(#"База по группам_Sheet", [PromoteAllScalars=true]),
А если мы поставим вместо null - true, то этот шаг не нужен. Первая строка таблицы сразу при загрузке станет заголовком. Значение «true» указывает, что столбцы таблицы должны оставаться нетипизированными. Но так как у Вас скорее всего в настройках редактора установлено «Всегда определять типы…» то Вы получили еще один шаг с типизацией столбцов
Код
#"Измененный тип" = Table.TransformColumnTypes(#"Повышенные заголовки",{{"Группа", type text}, {"Подгруппа ", type text}, {"Номер артикула", type text}, {"Номенклатура", type text}, {"Статус товара", type text}, {"Поставщик", type text},}}),
Здесь вы сократили для нас код, так как у Вас там столбцов за 50. А теперь вопрос: Зачем мы типы присваиваем, если следующим шагом мы столбцы практически все удаляем.
Список столбцов тоже Вы сократили здесь. На этом шаге давайте все-таки не удалять почти 50 столбцов, а сделаем обратную операцию – выберем те столбцы, которые нам необходимы (можно это сделать с помощью графического интерфейса).
Код
#"Removed Other Columns" = Table.SelectColumns(#"База по группам_Sheet",{"Группа", "Номенклатура", "АВС 4 кв 2025", "XYZ 4 кв. 2025", "Индекс Х-Х 4 кв. 2025"}),
NIK2020, если есть необходимость в типизации и удалении столбцов, логично вначале тогда удалить столбцы, а потом их типизировать. Но если мы решаем ту задачу, которую Вы представили и не предполагаются еще какие-либо действия с другими столбцами таблицы, то давайте не будем усложнять код избыточными преобразованиями. 2.
Подсчет повторов в столбце, Подсчет повторов в столбце
Пользователь
Сообщений: Регистрация: 09.07.2023
01.03.2026 16:38:26
Здравствуйте!
pq
Код
let
Source = Excel.CurrentWorkbook(){[Name="table1"]}[Content],
gr=Table.Group(Source,"ИСХОДНИК",{"count",Table.RowCount})
in
gr
Ma_Ri ≠ Мария
Распределение по столбцам., Необходимо распределить артикулы согласно индексам.
Пользователь
Сообщений: Регистрация: 09.07.2023
26.02.2026 17:19:57
Здравствуйте! Н.Павлов объяснил зачем мы создаем таблицу параметров (у меня - tParam) внутри файла. У меня функция fParam("Path") возвращает путь к внешнему файлу.
Цитата
NIK2020, написал: Первый шаг в запросе, он каким образом создается?
Я вынесла в первый шаг Запроса функцию f=(x)=>… она используется для преобразования данных после группировки по ключевым полям в шаге
Эту функцию можно было и не выносить в отдельный шаг, а прописать прямо в шаге gr, но тогда это будет громоздко и менее удобно для понимания.
Цитата
NIK2020, написал:= Table.AddColumn... вот этот шаг не получается. Он я, так понимаю, связан с отдельным подключением
Здесь нет отдельного подключения. Создаем запись из полей строки таблицы x[Номенклатура] и {x[XYZ 4 кв. 2025]. Я не буду расписывать весь код, Вы можете с помощью ИИ получить пояснения по нему. NIK2020, меня беспокоит, почему Вы не можете этот код адаптировать под свои данные. Проверьте наименования полей в реальной таблице с теми, что в коде, возможно у Вас есть спецсимволы в именах, в таком случае имена полей писать надо в виде x[#”XYZ 4 кв. 2025”]. Важный момент! Если вносите изменения в файле, то обязательно сохраните файл, а потом уже обновляйте Запрос. Иначе обновление будет со старыми сохраненными данными и новые изменения будут проигнорированы. Если есть возможность NIK2020, покажите файл с ошибками, чтобы понимать причину и характер их возникновения. Если структура реальных данных отличается от представленного примера, то такой результат предсказуем. Я писала от представленных данных.Кстати, увидела в Вашем сообщении, что у меня таблица создается с именем «y» вместо «Y», поменяйте в коде, но это не влияет в данном случае на результат. И еще добавила сортировку по столбцу «Группа». Вижу, что Вам сложно с моим решением, поэтому предлагаю воспользоваться альтернативными вариантами решения от профессионалов, которые для Вас будут понятны (макросом или варианты формулами от ПавелW, МатросНаЗебре, ). С уважением, Ma_Ri,!
Ma_Ri ≠ Мария
Распределение по столбцам., Необходимо распределить артикулы согласно индексам.
Объединение ячеек столбца в строку по условию с разделителем
Пользователь
Сообщений: Регистрация: 09.07.2023
25.02.2026 15:03:58
Здравствуйте! Вариант Power Query, даже объяснять ничего не надо, обновил Запрос и все.
pq
Код
let
lst=(x)=>List.Buffer(Table.ToList(x,(x)=>List.Skip(x))),
f=(x)=>Text.Combine({Text.From(Table.FirstValue(x))} & List.Transform(lst(x),(y)=>Text.Format("-#{0}(#{1})",y))),
from = Excel.CurrentWorkbook(){[Name="Таблица1"]}[Content],
sel=Table.SelectRows(from,(x)=>List.RemoveNulls(Record.FieldValues(x))<>{}),
max =List.Max(List.Transform(gr[tmp],List.Count)),
nms=List.TransformMany({1..max/2},(x)=>{"Диаметр","Длина"},(x,y)=>y& Text.From(x)),
gr=Table.Group(sel,"Номер",{{"tmp",(x)=>List.Combine(lst(x))},{"txt",f}}),
spl=Table.SplitColumn(gr,"tmp",(x)=>x,nms)
in
spl
pps2703, я думаю будут предложены и другие решения. Просто я и Maximich, видим решение Вашего вопроса именно таким образом. ) Всего доброго! )
Ma_Ri ≠ Мария
Выбор последнего статуса по ID, Задача: получить последнее значение статуса ID для всех ID.
Пользователь
Сообщений: Регистрация: 09.07.2023
25.02.2026 11:02:47
Добрый день!
Цитата
met.constr, написал: выбрать статус «активно» и получить все ID с этим статусом
Выбор по последней строке ID (не по времени)
pq
Код
let
from = Excel.CurrentWorkbook(){[Name="Smart_BD_status"]}[Content],
skip=Table.SelectRows(Table.Skip(from,(x)=>x[Статус] is number),(x)=>x[ID_idei]<>null),
gr=Table.Group(skip,"ID_idei",{"tmp",(x)=>Table.Last(x)}),
to=Table.FromRecords(gr[tmp]),
sel=Table.SelectRows(to,(x)=>x[Статус]=status)
in
sel
Ma_Ri ≠ Мария
Распределение по столбцам., Необходимо распределить артикулы согласно индексам.
Пользователь
Сообщений: Регистрация: 09.07.2023
24.02.2026 17:37:23
Здравствуйте!
pq
Код
let
f=(x)=>Table.FromColumns(List.Transform(Table.ToColumns(x),List.RemoveNulls),{"X","y","Z"}),
from = Excel.Workbook(File.Contents(fParam("Path")),true){[Name="База по группам"]}[Data],
sel = Table.SelectColumns(from,{"Группа", "Номенклатура", "АВС 4 кв 2025", "XYZ 4 кв. 2025", "Индекс Х-Х 4 кв. 2025"}),
add=Table.AddColumn(sel,"new",(x)=>Record.FromList({x[Номенклатура]},{x[XYZ 4 кв. 2025]})),
exp = Table.ExpandRecordColumn(add, "new", {"Z", "Y", "X"}),
rem = Table.RemoveColumns(exp,{"Номенклатура", "XYZ 4 кв. 2025"}),
gr=Table.Buffer(Table.Group(rem,{"Группа","АВС 4 кв 2025", "Индекс Х-Х 4 кв. 2025"},{"tmp",(x)=>f(x[[X],[Y],[Z]])})),
to =Table.Sort(Table.ExpandTableColumn(gr, "tmp", {"X", "y", "Z"}),{"АВС 4 кв 2025", "Индекс Х-Х 4 кв. 2025"})
in
to