Страницы: 1
RSS
Power Query: задать при группировке динамический столбец суммирования
 
Здравствуйте, прошу помощи по такому вопросу. В PQ не особо...
Собственно вопрос в заголовке, Не получается задать заголовок столбца по которому надо суммировать данные.
В прилагаемом файле есть вариант решения мышкоклацательный (Запрос 2), но хотелось бы попроще.
Запрос 1 в файле - дошел до этой стадии:
Код
#"Сгруппированные строки" = Table.Group(#"Удаленные столбцы", {"помещение", "вместимость"}, {{"проживает", each List.Count(List.RemoveNulls([10]) ) }})
Вот на этом этапе вместо [10] пытался вставить (что только не пытался...) Table.SelectColumns в частности. Создал шаг "сегодня", который пытался подставлять в формулы. Либо в синтаксисе не то что-то, либо в голове...
В общем прошу показать как задать заголовок столбца, чтобы он менялся автоматически (в данном примере - каждый день) и можно ли это вписать на этапе группировки, чтобы не плодить шаги.
 
Изменил в вашем файле Запрос1 на вот такое:
Код
let
    Источник = Excel.CurrentWorkbook(){[Name="Таблица1"]}[Content],
    сегодня = Date.ToText(DateTime.Date(DateTime.LocalNow() - #duration(1,0,0,0)),"dd"),
    #"Заполнение вниз" = Table.FillDown(Источник,{"помещение", "вместимость"}),
    #"Удаленные столбцы" = Table.RemoveColumns(#"Заполнение вниз",{"проживает"}),
    #"Другие столбцы с отмененным свертыванием" = Table.UnpivotOtherColumns(#"Удаленные столбцы", {"помещение", "вместимость"}, "Атрибут", "Значение"),
    #"Строки с примененным фильтром" = Table.SelectRows(#"Другие столбцы с отмененным свертыванием", each ([Атрибут] = сегодня)),
    #"Сгруппированные строки" = Table.Group(#"Строки с примененным фильтром", {"помещение", "вместимость"}, {{"Количество", each Table.RowCount(_), type number}})
in
    #"Сгруппированные строки"

Это подразумевалось?
Если что, то идея здесь простая, т.к. столбцы с нужным названием вы выбирать не умеете (вообще говоря это возможно сделать), то не надо пытаться это делать, лучше применить то - что умеете: превращаем столбцы в строки, которые фильтровать можно уже кнопкой, а дальше чуть подправляем формулу и вместо конкретного значения фильтра, вписываем значение шага, в котором вычисляется динамическое значение фильтра. А дальше уже дело техники.
З.Ы. не очень понял вашу логику, почему сегодня это на самом деле вчерашний день. Но тут хозяин-барин, хоть горшком назовите.
Изменено: PooHkrd - 11.12.2018 13:26:09
Вот горшок пустой, он предмет простой...
 
PooHkrd, спасибо!
Действительно это да, проще в плане реализации, все работает. спасибо еще раз.
Но всё таки (теперь уже из чисто академического интереса) - вы говорите можно выбирать столбцы с нужным названием.
Это существенно сократило бы количество шагов, Не подскажете конструкцию, которая позволяла бы это делать?
Меня зациклило на варианте типа:
Код
группировка = Table.Group(пред шаг, {что объедин}, {{"нов столбец", each List.Sum(Table.SelectColumns(шаг где определено назв столбца)) }})
но у меня не получается.
Спасибо заранее.
 
Доброе время суток.
Где-то как-то так
Код
let
    Источник = Excel.CurrentWorkbook(){[Name="Таблица1"]}[Content],
    #"Заполнение вниз" = Table.FillDown(Источник,{"помещение", "вместимость"}),
    сегодня = Date.ToText(DateTime.Date(DateTime.LocalNow() - #duration(1,0,0,0)),"dd"),
    #"Сгруппированные строки" = Table.Group(#"Заполнение вниз", {"помещение", "вместимость"}, {{"проживает", each List.Count(List.RemoveNulls(Table.Column(_, сегодня)) ) }})
in
    #"Сгруппированные строки"
 
Андрей VG, спасибо.
парадокс ) - обычно ваши решения, как бы сказать - зубодробительные, а сейчас наоборот - так просто.
 
Цитата
игорь сергеев написал:
так просто.
Можно и проще ;)
Вместо
Код
    #"Сгруппированные строки" = Table.Group(#"Заполнение вниз", {"помещение", "вместимость"}, {{"проживает", each List.Count(List.RemoveNulls(Table.Column(_, сегодня)) ) }})

Использовать
Код
    #"Сгруппированные строки" = Table.Group(#"Заполнение вниз", {"помещение", "вместимость"}, {{"проживает", each List.NonNullCount( Table.Column(_, сегодня) ) }})

Чтите справочник функций :)
Изменено: Андрей VG - 13.12.2018 14:43:23
 
спасибо Андрей VG!
Так как его (справочник функций) читать - вот эта задача казалось бы ясна: выбрать колонку удовлетворяющую условию.
Смотришь в сторону SelectColumn (ну а как еще?), а можно просто Table.Column оказывается.
Просто непонятно еще с _ - это получается он заголовки столбцов перебирает, пока не найдет указанный?
Код
Table.Column(_, сегодня)
В справочнике функций написано, что эта функция выбирает столбец (то есть содержимое столбца), а не его название.
так и написано: Returns the values from the [Name] column in the table.
А в вашем решении она ищет именно что заголовок столбца. Тут хоть зачитайся справочником... )
Спасибо еще раз. Главное что работает.
 
Цитата
игорь сергеев написал:
она ищет именно что заголовок столбца
Не правильное утверждение.
Table.Column(table as table, column as text) as list  
Аргументы функции table - таблица, column - имя столбца таблицы. Возвращает список значений указанного по имени столбца из указанной таблицы.
Страницы: 1
Наверх