Страницы: 1
RSS
Фильтрация по последней дате в каждом месяце в power query
 
Уважаемые знатоки Power query, всем доброго времени суток!

Помогите плиз отфильтровать столбец с датами так, чтобы в каждом месяце оказалась последняя имеющаяся в выгрузке дата.
Вложил файл пример, надо чтобы фильтр отработал так чтобы получились только строки выделенные желтым цветом.
 
Вопрос снят, группировкой по макс дате почему-то в конце концов получилось справиться)
 
Артем_81, можно так (намеренно Table.Max, так как даты Вы вряд ли без других столбцов с данными используете :) ):
Код
let
  dates = Excel.CurrentWorkbook(){[ Name = "dates" ]}[Content],
  typed = Table.TransformColumnTypes ( dates, { { "date", type date } } ),
  sort = Table.Sort ( typed, { { "date", Order.Ascending } } ),
  group = Table.Group (
    sort,
    "date",
    { { "rec", ( t ) => Table.Max ( t, { "date" } ), type nullable date } },
    GroupKind.Local,
    ( s, c ) => Number.From ( Date.StartOfMonth ( s ) < Date.StartOfMonth ( c ) )
  ),
  combine = Table.FromRecords ( group[rec], Value.Type ( sort ) )
in
  combine

Но, наверное, добавление столбца начала месяца и группировка по нему будет шустрее.
Изменено: surkenny - 09.06.2022 22:20:19
 
В продолжение этой темы, подскажите пожалуйста, как можно к имеющемуся примеру добавить код который будет группировать по максимальной дате внутри каждого месяца.
Если можно, не меняя ничего в коде примера, следующим шагом добавить группировку?
 
Так?
Код
let
    Источник = Excel.CurrentWorkbook(){[Name="Таблица2"]}[Content],
    #"Измененный тип" = Table.TransformColumnTypes(Источник,{{"Месяц", type text}, {"Факт", Int64.Type}, {"Наименование_new", type text}, {"Дата_макс", type date}}),
    #"Переименованные столбцы" = Table.RenameColumns(#"Измененный тип",{{"Дата_макс", "Дата"}}),
    #"Grouped Rows" = Table.Group(#"Переименованные столбцы", {"Месяц", "Наименование_new"}, {{"дата", each List.Max([Дата]), type nullable date}, {"сумма", each List.Sum([Факт]), type nullable number}})
in
    #"Grouped Rows"
 
Нет, немного не так. Вы просуммировали значения по полю факт и сгруппировали их по и так оказывается последним датам месяца (это мой косяк, я в пример уже отфильтрованный по последним датам столбец приложил)
Сейчас поправил пример, добавил более ранние даты в каждом месяце
Задача сгруппировать по последней дате в разрезе месяца, при этом суммировать не нужно данные по полю факт, нужно вывести значение факта соответствующее последней дате по каждому продукту в каждом месяце, оставив все столбцы. Месяц, такие то продукты, по каждому свой факт, но только по последней дате внутри месяца.
За один день у одного продукта может быть только одна строка факт, это я здесь налепил неглядя, но думаю это не критично для решения  
Изменено: Артем_81 - 23.06.2022 14:45:55
 
У Вас за один день один товар поступает несколько раз, поэтому как получилось.
Код
let
    Источник = Excel.CurrentWorkbook(){[Name="Таблица2"]}[Content],
    #"Измененный тип" = Table.TransformColumnTypes(Источник,{{"Месяц", type text}, {"Факт", Int64.Type}, {"Наименование_new", type text}, {"Дата_макс", type date}}),
    #"Sorted Rows" = Table.Sort(#"Измененный тип",{{"Дата_макс", Order.Ascending}, {"Месяц", Order.Ascending}}),
    #"Grouped Rows" = Table.Group(#"Sorted Rows", {"Месяц", "Наименование_new"}, {{"макс. дата", each List.Max([Дата_макс]), type nullable date}}),
    #"Merged Queries" = Table.NestedJoin(#"Grouped Rows", {"Месяц", "Наименование_new", "макс. дата"}, Таблица2, {"Месяц", "Наименование_new", "Дата_макс"}, "Таблица2", JoinKind.LeftOuter),
    #"Expanded Таблица2" = Table.ExpandTableColumn(#"Merged Queries", "Таблица2", {"Факт"}, {"Таблица2.Факт"})
in
    #"Expanded Таблица2"
 
Здесь нельзя суммировать факт.
Поле факт нужно добавить в список полей для группирования, а не в блок для нового столбца: (Имя нового столбца - операция (сумм) - столбец)
Но если сделать группировку таким образом, PQ не хочется группировать по последней (макс.) дате...вообще не будет группировки, можете попробовать.
Выше в теме есть сообщение №3, в котором указан подобный код, но он не учитывает что есть дополнительные столбцы. А в реальной задаче несколько столбцов, как в текущем примере.
 
Артем_81,
Неверно группировать по месяцу. А если данные будут за несколько лет? Верно по ГодМесяц. Столбец месяца можете вообще убрать из данных, если он нужен только для группировки.
Так нужно?
Код
let
  data = Excel.CurrentWorkbook(){[ Name = "Таблица2" ]}[Content],
  typed = Table.TransformColumnTypes ( data, { { "Факт", type number }, { "Дата_макс", type date } } ),
  rename = Table.RenameColumns ( typed, { { "Дата_макс", "Дата" } } ),
  addYM = Table.AddColumn ( rename, "YM", each Number.From ( Date.ToText ( [Дата], "yyyyMM" ) ), Int64.Type ),
  group = Table.Group (
    addYM,
    { "Наименование_new", "YM" },
    { { "recs", ( t ) => Record.RemoveFields ( Table.Max ( t, { "Дата" } ), { "YM" } ), type record } }
  ),
  toTable = Table.FromRecords ( group[recs], Value.Type ( rename ) )
in
  toTable
Страницы: 1
Наверх