Страницы: 1
RSS
Power Query. Индексация строк в пределах каждой группы., Знаю как сделать формулами Excel, но не могу дотумкать как решить проблему в запросе.
 
Доброго дня.
Уважаемые, столкнулся с такой проблемой:
Имеется список машинок и установленных на них колес, каждое колесо - отдельная строка в таблице фактов.
Что нужно: в рамках каждой машинки и каждого вида колеса на этой машинке нужно пронумеровать каждое колесо по порядку, чтобы получить в результате уникальный идентификатор для каждой строки сцепкой.
В примере желтым цветом обозначен столбец, который я знаю как сделать формулами в Эксель при помощи "растягивающихся" диапазонов, но пока не понимаю как мне получить его в Power Query.
Заранее спасибо.
Вот горшок пустой, он предмет простой...
 
Код
let
    Source = Excel.CurrentWorkbook(){[Name="Таблица1"]}[Content],
    #"Grouped Rows" = Table.Group(Source, {"Авто", "Код номенклатуры"}, {{"tab", each Table.AddIndexColumn(_, "Index", 1,1), type table}}),
    #"Expanded {0}" = Table.ExpandTableColumn(#"Grouped Rows", "tab", {"Index"}, {"Index"})
in
    #"Expanded {0}"
F1 творит чудеса
 
Вот это скорость!.
Щас заценим.
Круто, все работает, аналогичный прием Николай недавно публиковал.
Но получается я дал не полные исходные данные. Исправляюсь и извиняюсь.
В таблице есть еще один столбец, в котором имеются пробеги, они в группировке не участвуют, но их в результирующей таблице нужно сохранить.
Изменено: PooHkrd - 23.11.2017 16:13:20
Вот горшок пустой, он предмет простой...
 
Доброе время суток
Цитата
PooHkrd написал:
но их в результирующей таблице нужно сохранить.
Так он после группировки и не терялся. На шаге #"Expanded {0}" в настройках (шестерёнка) добавьте нужные столбцы для отображения.
 
Все прекрасно работает! Максим, как всегда огромное спасибо! И вам, Андрей, за подсказку тоже.

Значит я был не прав, это не по аналогии примера от Николая.
Только я вообще не понял по какому принципу в функцию Table.AddIndexColumn передается именно тот кусок таблицы, который относится к сгруппированным строкам, ведь знак подчеркивания, который итератор, должен передавать в неё всю таблицу целиком.
Где я не прав?

З.Ы. Кажется начинаю понимать, Table.Group сам фильтрует список строк, которые передает аггрегирующей функции, дальше мы можем с каждым куском таблицы творить что хотим, после чего можно вытянуть все в общую таблицу обратно.
Максим, очень круто, и ведь я что-то подобное на DAX сочинял, а вот тут не догадался.
Изменено: PooHkrd - 23.11.2017 18:15:37
Вот горшок пустой, он предмет простой...
 
Цитата
PooHkrd написал:
Table.Group сам фильтрует список строк, которые передает аггрегирующей функции
да, этот немного запутывает, так как отличается от логики других функций итераторов таблицы, когда в обработку передается только одна строка. Но если в группировке сделать встроенный выбор "Все строки", то вид формулы будет примерно такой:
Код
each _
, а в результате получаем в ячейку кусок таблицы, сгруппированной (отобранной) по заданным столбцам. Соответственно, понимаем, что _ обозначает сгруппированный набор строк в этой функции, а не одну строку или всю таблицу целиком.
F1 творит чудеса
 
Кто ни будь может подсказать как проставить индекс по продажам, при это чтоб была группировки по городам.
то ни будь может подсказать как проставить индекс по продажам, при это чтоб была группировки по городам.

Пример:                                                                                                          
Скрытый текст

Буду очень сильно благодарен за помощь.
Изменено: Hunterhomer - 12.10.2018 10:27:52
 
Так в посте №2 приведен код именно это и проделывающий, в чем проблема его применить?
Вот горшок пустой, он предмет простой...
 
Там не много ни то, мне необходимо чтоб к большему числу ставился наименьший Индекс то есть 1, а к наименьшему 3 и т.д.
В посте №2 идет к меньшему ставить 1 и далее по нарастающей.

Не могу понять куда поставить сортировку чтоб к большему числу в колонке "Продажи" проставлялось наименьшее значение Индекс, и далее по увеличению
 
Всегда удивляло, в чем такая проблема прикрепить файл пример к сообщению?
Вот вариант с обратной сортировкой.
Код
let
    Источник = Excel.CurrentWorkbook(){[Name="Таблица1"]}[Content],
    #"Измененный тип" = Table.TransformColumnTypes(Источник,{{"Город", type text}, {"Магазин", type text}, {"Продажи,шт.", Int64.Type}}),
    #"Сгруппированные строки" = Table.Group(#"Измененный тип", {"Город"}, {{"Таблица", each Table.AddIndexColumn(Table.Sort(_,{{"Продажи,шт.", Order.Descending}}), "Индекс", 1, 1), type table}}),
    #"Развернутый элемент Таблица" = Table.ExpandTableColumn(#"Сгруппированные строки", "Таблица", {"Магазин", "Продажи,шт.", "Индекс"}, {"Магазин", "Продажи,шт.", "Индекс"})
in
    #"Развернутый элемент Таблица"
Вот горшок пустой, он предмет простой...
 
Спасибо большое PooHkrd, очень сильно помог
 
Наверное, создавать новую тему на схожий вопрос не лучший вариант.

Помогите!
Я сделал индексацию внутри групп, как подсказали в данной теме. Но мне необходимо сделать следующий шаг. Внутри группы три максимальных значения индекса , и три минимальных значения заменить на null.
Три минимальных значения заменить не проблема, тем же, условным столбцом.
Три максимальных также хотел заменить на null с помощью условного столбца: Если "индекс" > "максимальный индекс - 4", тогда null.
Проблема в том, что не получается получить максимальный индекс внутри групп.

Файл загрузил в следующем сообщении.
Изменено: runeft - 13.03.2019 14:03:05
 
Цитата
runeft написал:
Файл загружается на 90% (((
 
runeft, это пожалуй уже другой вопрос. Лучше создать новую тему и прикрепить пример, в котором не удалена таблица, которая является источником запроса.
Вот горшок пустой, он предмет простой...
 
Возможно, PooHkrd прав, и лучше создать новую тему, но добавлю сюда, раз уж сделал. runeft, думаю, разберётесь.
Код
let
    Source = Excel.CurrentWorkbook(){[Name="Таблица1__3"]}[Content],
    group = Table.Group(Source, {"В2В"}, {"temp", each [a = List.MinN([#"Index.1"],3)&List.MaxN([#"Index.1"],3),
                                                        b = Table.TransformColumns(_, {"Index.1", each if List.Contains(a,_) then null else _})][b]}),
    expand = Table.ExpandTableColumn(group, "temp", {"Номенклатуры", "Основной менеджер", "Цена.1", "Index.1"})
in
    expand
 
Да, действительно, удалил источник не заметив. Создам новую тему.
 
Пользуюсь похожим методом для индексации в пределах групп.
Есть проблема при группировке слетает сортировка строк заданная в пред.шаге... а для меня критически важно чтобы сортировка оставалась и чтоб индекс приклеивался к строке с учетом сортировки. Сталкивались с таким? Скриншот смогу отправить позже....

на скрине видно, что после группировки пары стоят не по убыванию.
В предыдущей моей обработке такого не происходит....
 
Цитата
mikhailov написал:
на скрине видно, что после группировки пары стоят не по убыванию.
В предыдущей моей обработке такого не происходит....
Для сравнения отправьте скрин результата предыдущей обработки :)  
 
Михаил, вот скрин, где сортировка не нарушена. Там несколько клиентов и по всем сортировка по парам в порядке.  
Изменено: mikhailov - 20.04.2021 20:55:28
 
Цитата
mikhailov написал:
при группировке слетает сортировка
это известно и описано, что мешает сделать сортировку после группировки?
Соблюдение правил форума не освобождает от модераторского произвола
 
Индексы приклеиваются к неправильной сортировке. А после сортируй не сортируй а индекс все равно будет стоять напротив неправильного кол-ва пар...
Проблему удалось решить... Не знаю надолго ли... Просто добавил еще один шаг после сортировки... Поменял тип измерения (данных) в поле пары... и далее при группировке все ок (скрин во вложении).

Может есть какой-то способ принудительно задать сортировку внутри группировки?
 
Цитата
mikhailov написал:
Может есть какой-то способ принудительно задать сортировку внутри группировки?
Да в общем-то ничего не мешает
Код
Table.Group(Source, groupColumnNamesList, {"temp", each _
    Table.AddIndexColumn(Table.Sort(_, sortOrderDefinitionList), "Local Index", 1)
})
 
Большое спасибо! Буду пробовать!
 
Добрый день .Помогите пож-та разобраться как в сгруппированной таблице отфильтровать столбцы?


Пример в вложении. [Date_efir] и [hh] имеют несколько дат создания [Date created].
Нужно собрать из исходника группировку по [Date efir] & [hh] все строки, с фильтром на последнюю дату создания [Date created].


Вижу это примерно так (но не работает):

= Table.Group(Table, {"date_efir", "hh"}, {{"Количество", each Table.SelectRows(_, let latest = List.Max(Table[Date created]) in each [Date created] = latest), type table}})

и вообще не понимаю как установить фильтр в сгруппированных всех строках, кроме как добавить настраиваемый столбец  


т.е. у меня это заработало через старый добрый "добавление настраиваемого столбца" котор. дублирует исходный сгруппированный столбец со всеми строками.
Изменено: Padre_777 - 23.03.2023 11:10:40
 
Padre_777, так?
Код
let
  src = Excel.CurrentWorkbook(){[ Name = "Исх_данные" ]}[Content],
  typed = Table.TransformColumnTypes (
    src,
    { { "Date created", type date }, { "date_efir", type date }, { "hh", type number }, { "LOT_CODE", type number } }
  ),
  group = Table.Group (
    typed,
    { "date_efir", "hh" },
    {
      {
        "tbl",
        ( t ) => [ lastDate = List.Max ( t[Date created] ), filter = Table.SelectRows ( t, each [Date created] = lastDate ) ][filter],
        type table
      }
    }
  ),
  combine = Table.Combine ( group[tbl] )
in
  combine
Изменено: surkenny - 23.03.2023 11:23:34
 
surkenny, отлично, спасибо.

немного синтаксис не понимаю,
а так всё работает, оптимизированно🤤
 
как вот это
Цитата
Padre_777 написал:
оптимизированно
уживается вот с этим?
Цитата
Padre_777 написал:
немного синтаксис не понимаю
Тайна сие великая есть  :)
Пришелец-прораб.
Страницы: 1
Наверх