Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Сложная сортировка в PQ - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Сложная сортировка в PQ
elycioo Дата: Вторник, 28.02.2023, 11:41 | Сообщение № 1
Группа: Пользователи
Ранг: Новичок
Сообщений: 37
Репутация: 0 ±
Замечаний: 40% ±

Добрый день. Подскажите, пожалуйста, возможно ли сделать сортировку в pq, по определенным правилам, а именно: 1. Сортировка по колонке Атрибут (От большего к меньшему или на оборот, не важно). 2. Сортировка по колонке Столбец1, но так, чтобы первые 3 значения в этом столбце были с наибольшим показателем (числом), следующие 3 с наименьшим числом, а последующие в хаотичном порядке? Вводные данные на листе Таблица2 (2).
К сообщению приложен файл: 123.xlsx (260.8 Kb)


Сообщение отредактировал elycioo - Вторник, 28.02.2023, 11:43
 
Ответить
СообщениеДобрый день. Подскажите, пожалуйста, возможно ли сделать сортировку в pq, по определенным правилам, а именно: 1. Сортировка по колонке Атрибут (От большего к меньшему или на оборот, не важно). 2. Сортировка по колонке Столбец1, но так, чтобы первые 3 значения в этом столбце были с наибольшим показателем (числом), следующие 3 с наименьшим числом, а последующие в хаотичном порядке? Вводные данные на листе Таблица2 (2).

Автор - elycioo
Дата добавления - 28.02.2023 в 11:41
AlienSphinx Дата: Среда, 01.03.2023, 09:58 | Сообщение № 2
Группа: Пользователи
Ранг: Новичок
Сообщений: 28
Репутация: 8 ±
Замечаний: 0% ±

365
elycioo, можно. Сначала группируем по колонке "Атрибут". А потом сортируем полученные таблицы, вылепляем первые 3, последние 3 , оставшиеся. Все склеиваем обратно и "expand"
[vba]
Код
let
    Source = Excel.CurrentWorkbook(){[Name="Таблица2__2"]}[Content],
    grouped = Table.Group(Source, {"Атрибут"}, {{"all_rows", each Table.Sort(_, {"Столбец1", Order.Descending})}}),
    sorted_attribute = Table.Sort(grouped, {"Атрибут"}),
    fx_sorting = (tbl as table) as table =>
        let
            lst = List.Buffer(Table.ToRows(tbl)),
            max3 = List.FirstN(lst, 3),
            min3 = List.LastN(List.Difference(lst, max3), 3),
            between = List.Difference(lst, max3 & min3),
            result = Table.FromRows(List.Combine({max3, min3, between}), Table.ColumnNames(tbl))
        in result,
    sort_column1 = Table.TransformColumns(sorted_attribute, {"all_rows", each fx_sorting(_)}),
    expand = Table.ExpandTableColumn(sort_column1, "all_rows", {"Значение", "Столбец1"}, {"Значение", "Столбец1"})
in
    expand
[/vba]
К сообщению приложен файл: 1647880.xlsx (454.2 Kb)
 
Ответить
Сообщениеelycioo, можно. Сначала группируем по колонке "Атрибут". А потом сортируем полученные таблицы, вылепляем первые 3, последние 3 , оставшиеся. Все склеиваем обратно и "expand"
[vba]
Код
let
    Source = Excel.CurrentWorkbook(){[Name="Таблица2__2"]}[Content],
    grouped = Table.Group(Source, {"Атрибут"}, {{"all_rows", each Table.Sort(_, {"Столбец1", Order.Descending})}}),
    sorted_attribute = Table.Sort(grouped, {"Атрибут"}),
    fx_sorting = (tbl as table) as table =>
        let
            lst = List.Buffer(Table.ToRows(tbl)),
            max3 = List.FirstN(lst, 3),
            min3 = List.LastN(List.Difference(lst, max3), 3),
            between = List.Difference(lst, max3 & min3),
            result = Table.FromRows(List.Combine({max3, min3, between}), Table.ColumnNames(tbl))
        in result,
    sort_column1 = Table.TransformColumns(sorted_attribute, {"all_rows", each fx_sorting(_)}),
    expand = Table.ExpandTableColumn(sort_column1, "all_rows", {"Значение", "Столбец1"}, {"Значение", "Столбец1"})
in
    expand
[/vba]

Автор - AlienSphinx
Дата добавления - 01.03.2023 в 09:58
elycioo Дата: Среда, 01.03.2023, 16:56 | Сообщение № 3
Группа: Пользователи
Ранг: Новичок
Сообщений: 37
Репутация: 0 ±
Замечаний: 40% ±

AlienSphinx, Подскажите, вижу, что первые 3 значения идут с максимальным числом, следующие 3 с минимальным, а вот остальные по убыванию. Как сделать так, чтобы остальные были в хаотичном порядке, без каких либо закономерностей?
 
Ответить
СообщениеAlienSphinx, Подскажите, вижу, что первые 3 значения идут с максимальным числом, следующие 3 с минимальным, а вот остальные по убыванию. Как сделать так, чтобы остальные были в хаотичном порядке, без каких либо закономерностей?

Автор - elycioo
Дата добавления - 01.03.2023 в 16:56
AlienSphinx Дата: Среда, 01.03.2023, 18:11 | Сообщение № 4
Группа: Пользователи
Ранг: Новичок
Сообщений: 28
Репутация: 8 ±
Замечаний: 0% ±

365
Ну как, как... Перемешать все надо. Попробуйте вот это.
[vba]
Код
let
    Source = Excel.CurrentWorkbook(){[Name="Таблица2__2"]}[Content],
    grouped = Table.Group(Source, {"Атрибут"}, {{"all_rows", each Table.Sort(_, {"Столбец1", Order.Descending})}}),
    sorted_attribute = Table.Sort(grouped, {"Атрибут"}),
    fx_sorting = (tbl as table) as table =>
        let
            lst = List.Buffer(Table.ToRows(tbl)),
            max3 = List.FirstN(lst, 3),
            min3 = List.LastN(List.Difference(lst, max3), 3),
            between = List.Sort(List.Difference(lst, max3 & min3), {each List.First(List.Random(1)), Order.Descending}),
            result = Table.FromRows(List.Combine({max3, min3, between}), Table.ColumnNames(tbl))
        in result,
    sort_column1 = Table.TransformColumns(sorted_attribute, {"all_rows", each fx_sorting(_)}),
    expand = Table.ExpandTableColumn(sort_column1, "all_rows", {"Значение", "Столбец1"}, {"Значение", "Столбец1"})
in
    expand
[/vba]
 
Ответить
СообщениеНу как, как... Перемешать все надо. Попробуйте вот это.
[vba]
Код
let
    Source = Excel.CurrentWorkbook(){[Name="Таблица2__2"]}[Content],
    grouped = Table.Group(Source, {"Атрибут"}, {{"all_rows", each Table.Sort(_, {"Столбец1", Order.Descending})}}),
    sorted_attribute = Table.Sort(grouped, {"Атрибут"}),
    fx_sorting = (tbl as table) as table =>
        let
            lst = List.Buffer(Table.ToRows(tbl)),
            max3 = List.FirstN(lst, 3),
            min3 = List.LastN(List.Difference(lst, max3), 3),
            between = List.Sort(List.Difference(lst, max3 & min3), {each List.First(List.Random(1)), Order.Descending}),
            result = Table.FromRows(List.Combine({max3, min3, between}), Table.ColumnNames(tbl))
        in result,
    sort_column1 = Table.TransformColumns(sorted_attribute, {"all_rows", each fx_sorting(_)}),
    expand = Table.ExpandTableColumn(sort_column1, "all_rows", {"Значение", "Столбец1"}, {"Значение", "Столбец1"})
in
    expand
[/vba]

Автор - AlienSphinx
Дата добавления - 01.03.2023 в 18:11
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!