Страницы: 1
RSS
Power Query. Вложенная группировка
 
Добрый день!

Как можно сделать группировку по какому-то критерию, но при этом добавить дополнительную группировку по общей сумме - средствами PowerQuery?
Выглядит следующим образом. Исходная таблица:
Категория 1Категория 2Категория 3Сумма
Инф1Флт1Дрмб150
Инф1Флт1Дрмб2100
Инф1Флт1Дрмб320
Инф1Флт2Дрмб170
Инф1Флт2Дрмб2120
Инф1Флт2Дрмб340
Инф2Флт1Дрмб190
Инф2Флт1Дрмб2140
Инф2Флт1Дрмб360
Инф2Флт2Дрмб1110
Инф2Флт2Дрмб2160
Инф2Флт2Дрмб380
Группируем по Категории1, категории2, оставляем Категорию3="дрмб3" и сумму по ней, добавляем столбец общей суммы:
Категория 1Категория 2Сумма по критерию "Дрмб3"Общая сумма
Инф1Флт120170
Инф1Флт240230
Инф2Флт160290
Инф2Флт280350
Пример приложил.
 
Код
let
    Источник = Excel.CurrentWorkbook(){[Name="Таблица1"]}[Content],
    #"Измененный тип" = Table.TransformColumnTypes(Источник,{{"Категория 1", type text}, {"Категория 2", type text}, {"Категория 3", type text}, {"Сумма", Int64.Type}}),
    #"Сгруппированные строки" = Table.Group(#"Измененный тип", {"Категория 1", "Категория 2"}, {{"Сумма по критерию Дрмб3", each List.Sum(Table.SelectRows(_, each [Категория 3] = "Дрмб3")[Сумма])},{"Общая сумма", each List.Sum([Сумма]), type number}})
in
    #"Сгруппированные строки"
 
deffocus, PQ не для этого создан :) Это легко делается в PP. Зачем в PQ  это вычислять?
Но, раз уж надо:
Код
let
  src = Excel.CurrentWorkbook(){[ Name = "Таблица1" ]}[Content],
  typed = Table.TransformColumnTypes (
    src,
    { { "Категория 1", type text }, { "Категория 2", type text }, { "Категория 3", type text }, { "Сумма", type number } }
  ),
  group = Table.Group (
    typed,
    { "Категория 1", "Категория 2" },
    {
      { "Дрмб3", ( t ) => List.Sum ( Table.SelectRows ( t, ( r ) => r[Категория 3] = "Дрмб3" )[Сумма] ), type number },
      { "Общая  сумма", each List.Sum ( [Сумма] ), type number }
    }
  )
in
  group
Изменено: surkenny - 09.06.2022 20:59:23
 
Цитата
написал:
Код
    [URL=#]?[/URL]       1  2  3  4  5  6      let          Источник = Excel.CurrentWorkbook(){[Name=  "Таблица1"  ]}[Content],          #  "Измененный тип"   = Table.TransformColumnTypes(Источник,{{  "Категория 1"  , type text}, {  "Категория 2"  , type text}, {  "Категория 3"  , type text}, {  "Сумма"  , Int64.Type}}),          #  "Сгруппированные строки"   = Table.Group(#  "Измененный тип"  , {  "Категория 1"  ,   "Категория 2"  }, {{  "Сумма по критерию Дрмб3"  , each List.Sum(Table.SelectRows(_, each [Категория 3] =   "Дрмб3"  )[Сумма])},{  "Общая сумма"  , each List.Sum([Сумма]), type number}})    in          #  "Сгруппированные строки"   
 
Большое спасибо! Просто огромное!
Если требуется дописать условие в категории, то это будет выглядеть так? Вроде не работает в таком виде:
#"Сгруппированные строки" = Table.Group(#"Измененный тип", {"Категория 1", "Категория 2"}, {{"Сумма по критерию Дрмб3", each List.Sum(Table.SelectRows(_, each [Категория 3] = "Дрмб3" or [Категория 3] = "Дрмб1")[Сумма])},{"Общая сумма", each List.Sum([Сумма]), type number}})
 
Цитата
написал:
deffocus, PQ не для этого создан  Это легко делается в PP. Зачем в PQ  это вычислять?
Но, раз уж надо:
Код
    [URL=#]?[/URL]       1  2  3  4  5  6  7  8  9  10  11  12  13  14  15  16      let        src = Excel.CurrentWorkbook(){[ Name =   "Таблица1"   ]}[Content],        typed = Table.TransformColumnTypes (          src,          { {   "Категория 1"  , type text }, {   "Категория 2"  , type text }, {   "Категория 3"  , type text }, {   "Сумма"  , type number } }        ),        group = Table.Group (          typed,          {   "Категория 1"  ,   "Категория 2"   },          {            {   "Дрмб3"  , ( t ) => List.Sum ( Table.SelectRows ( t, ( r ) => r[Категория 3] =   "Дрмб3"   )[Сумма] ), type number },            {   "Общая  сумма"  , each List.Sum ( [Сумма] ), type number }          }        )    in        group   

 
PP - это не Power Bi? Пока огромное удовольствие изучать и делать работу на PQ :)
 
Цитата
deffocus написал:
Если требуется дописать условие в категории, то это будет выглядеть так?

так и все работает
 
Супер! Действительно работает.
Можно ли попросить еще одну "нестандартную" группировку сделать?
Нужно переместить некоторые столбцы в строки.
Исходная таблица:
Категория 1Категория 2Категория 3Сумма1Сумма2
Инф1Флт2Дрмб15090
Инф2Флт2Дрмб2100180
Инф3Флт3Дрмб32036
Получить нужно вот такую:
Категория 1Категория 2Дрмб3ВидСуммыСумма
Инф1Флт2Дрмб1Сумма150
Инф2Флт2Дрмб2Сумма1100
Инф3Флт3Дрмб3Сумма120
Инф1Флт2Дрмб1Сумма290
Инф2Флт2Дрмб2Сумма2180
Инф3Флт3Дрмб3Сумма236
Как такой трюк можно осуществить? Пример в приложении. Заранее спасибо!
Изменено: deffocus - 10.06.2022 20:13:43
 
deffocus, как бы одна тема - один вопрос.
Но даже это неважно :)
Это не "нестандартная" группировка. Это простой unpivot.
В данном случае решение двумя шагами и только кнопками без написания кода: unpivot + сортировка в нужном Вам порядке.
Вы вообще не изучаете инструмент, который используете? :)
Возможно, покажется, что я злой, но настоятельно рекомендую решить вопрос самому. А помогающим "помочь" ТС хоть немного изучить PQ и воздержаться от предложения тривиального решения :)
 
deffocus,  зачем Вы цитируете код? Какой в этом смысл?
Страницы: 1
Наверх