Страницы: 1
RSS
Power Query: Группировка по ПОРЯДКУ и по АТРИБУТУ
 
Добрый день, уважаемые спецы!
Ломаю голову как сгруппировать данные по НАЗВАНИЮ и по ПОРЯДКУ.. то есть если данные в строках с названием прервались, то следующие данные с таким же названием попадают в следующую группу.
В примере будет более понятно как работает классическая группировка и как мне мечталось бы.
Заранее спасибо за советы и участие!
 
Так:
Код
let
    // Функция, которая добавляет в таблицу (указанную как первый аргумент) копию столбца (указанного во втором аргументе) со смещением элементов на 1 строку вверх или вниз (в третьем аргументе 0 - вниз / 1 - вверх). 
    // Вместо выбывающего элемента добавляется null.

    fnTableAddOffsetColumn = ( tbl as table, clmn as text, dir as number ) => 
        if dir = 0 
            then Table.FromColumns( 
                Table.ToColumns( tbl ) & Table.ToColumns( #table( {clmn}, {{null}} ) & Table.RemoveLastN( Table.SelectColumns( tbl, {clmn}), 1 ) ), 
                Table.ColumnNames( tbl ) & {"Пред."&clmn} )
            else Table.FromColumns( 
                Table.ToColumns( tbl ) & Table.ToColumns( Table.RemoveFirstN( Table.SelectColumns( tbl, {clmn}), 1 ) & #table( {clmn}, {{null}} ) ), 
                Table.ColumnNames( tbl ) & {"След."&clmn} ),

    Source = Excel.CurrentWorkbook(){[Name="Ссылка_2"]}[Content],
    #"Added Index" = Table.AddIndexColumn(Source, "Индекс", 0, 1),
    Custom1 = fnTableAddOffsetColumn( #"Added Index", "Страна", 0 ),
    #"Added Custom" = Table.AddColumn(Custom1, "Пользовательская", each if [Пред.Страна] = null or [Пред.Страна] <> [Страна] then [Индекс] else null),
    #"Filled Down" = Table.FillDown(#"Added Custom",{"Пользовательская"}),
    #"Grouped Rows" = Table.Group(#"Filled Down", {"Страна", "Пользовательская"}, {{"Сумма", each List.Sum([#"Расстояние, м"]), type number}}),
    #"Removed Columns" = Table.RemoveColumns(#"Grouped Rows",{"Пользовательская"})
in
    #"Removed Columns"
Вот горшок пустой, он предмет простой...
 
PooHkrd,о спасибо :D !! попробую в деле
 
еще вариант
Код
let
    Источник = Excel.CurrentWorkbook(){[Name="Ссылка_2"]}[Content],
    #"Добавлен индекс" = Table.AddIndexColumn(Источник , "Индекс", 1, 1),
    #"Добавлен индекс1" = Table.AddIndexColumn(#"Добавлен индекс", "Индекс.1", 0, 1),
    #"Объединенные запросы" = Table.NestedJoin(#"Добавлен индекс1",{"Индекс"},#"Добавлен индекс1",{"Индекс.1"},"Предыдущая",JoinKind.LeftOuter),
    #"Expanded {0}" = Table.ExpandTableColumn(#"Объединенные запросы", "Предыдущая", {"Страна"}, {"Страна.1"}),
    #"Added Conditional Column" = Table.AddColumn(#"Expanded {0}", "Пользовательская", each if [Страна] = [Страна.1] then null else [Индекс]),
    #"Filled Up" = Table.FillUp(#"Added Conditional Column",{"Пользовательская"}),
    #"Grouped Rows" = Table.Group(#"Filled Up", {"Страна", "Пользовательская"}, {{"сумма", each List.Sum([#"Расстояние, м"]), type number}}),
    #"Removed Columns" = Table.RemoveColumns(#"Grouped Rows",{"Пользовательская"})
in
    #"Removed Columns"

 
artyrH,Огроменный Дзякуй!
 
дел
Изменено: PooHkrd - 27.05.2019 14:00:28
Вот горшок пустой, он предмет простой...
 
Доброе время суток.
Коллеги, ну вы и извращенцы :)
Код
let
    Source = Excel.CurrentWorkbook(){[Name="Ссылка_2"]}[Content],
    #"Changed Type" = Table.TransformColumnTypes(Source,{{"Страна", type text}, {"Расстояние, м", Int64.Type}}),
    #"Grouped Rows" = Table.Group(#"Changed Type", {"Страна"}, {{"Сумма", each List.Sum([#"Расстояние, м"]), type number}}, GroupKind.Local)
in
    #"Grouped Rows"
 
Андрей VG, Четвертый аргумент!. Все время про него забываю, блин.
Вот горшок пустой, он предмет простой...
 
Цитата
Андрей VG написал:
ну вы и извращенцы
чорт, опоздал, хотел аналогичное написать  :):)
F1 творит чудеса
Страницы: 1
Наверх