Коллеги, привет, нужна помощь. необходимо по каждой позиции товарной матрицы считать сумму/среднее за последние N дней. По идее должно быть что-то вроде такого:
Блин, чойта слепочусь слегка. Показалось что вопрос про PQ. Все равно оставлю ответ под спойлером на всяк случай.
Скрытый текст
PavelZakharov, я правильно понял, что вам требуется считать сумму в скользящем окне (Сегодня() - 2; Сегодня() ) включая граничные даты? Если так то задача элементарно решается при помощи List.Generate. Чуть позже сделаю. Вот, как-то так:
let FnRunSum=(subastable,colastext)=> let subbuf=Table.Buffer(sub), itemCount=Table.RowCount(subbuf), sumList=List.Buffer(Table.ToColumns(Table.SelectColumns(subbuf,{col})){0}), calcRunningTotal=List.Generate( ()=>[id=0,runningSum={sumList{id}}], each[id]<itemCount, each[id=[id]+1,runningSum=[runningSum]&{sumList{id}}], eachList.Sum(List.LastN([runningSum],3)) ) in Table.FromColumns(Table.ToColumns(subbuf)&{calcRunningTotal},Table.ColumnNames(subbuf)&{"Скользящая сумма"}), Source=Excel.CurrentWorkbook(){[Name="Таблица1"]}[Content], Grouped=Table.Group( Source, {"Точка","Товар"}, {{"tab",eachFnRunSum(_,"Продажи"),typetable[Точка=text,Товар=text,Дата=date,Продажи=number,должно быть так=number,Скользящая сумма=number]}} ), Combined=Table.Combine(Grouped[tab]) in Combined
Михаил Л написал: только у меня вот это никогда не работает?
Из текста не очень понятно, что именно не работает? Прописывание типов полей в группировке? Такое возможно, ибо на сколько я помню у вас 2013 эксель и надстройка, хотя странно, вроде бы типизация полей таблицы это базовый элемент языка, в него вроде изменения особо не вносят. А даты по умолчанию и у меня показываются как datetime. Достаточно посмотреть на отображение этого столбца в шаге Source. Сама по себе такая запись с типами полей при группировке прописывается в PQ автоматически в O365 где-то с год уже. И даже там по умолчанию для полей с содержимым похожим на даты автоматом прописывается тип datetime, это я уже руками правил. У вас, кстати, и для DAX моя нижняя формула не сработает, только формула Андрея или моя верхняя.
Михаил Л написал: когда запрос готов, стираю все эти штуки(, type table , type record , type list)
ну и зря. Прописывание типов при группировке помогает разворачивать сгруппированные таблицы сразу с правильными типами данных. Иначе информация о типах столбцов теряется, они становятся any и их надо опять задавать
В первом случае вам не нужно потом типизировать столбцы заново перед загрузкой в модель:
И, кстати, любопытные результаты получаются, если поиграться с описанием типа при группировке. Заодно, если группируем не в таблицу, а, например, один столбец, тоже можно сохранять тип данных при группировке для разворота, например, так:
Максим Зеленский, я всего то хочу сказать что такое прописывание типа не дает такой же эффект как у функции Table.TransformColumnTypes Ну что это такое:
Михаил Л написал: не дает такой же эффект как у функции Table.TransformColumnTypes
а почему оно должно делать то же самое?.. Есть тип значения, есть тип столбца, есть тип таблицы. Table.TransformColumnTypes делает приведение значений к указанному типу столбца. А то, что я привел в примере, делает указание типа столбца без приведения значений к типу и проверки данных на соответствие. Равно как и указание типа при добавлении столбца. Я даже больше могу показать:
Максим Зеленский написал: а почему оно должно делать то же самое?.. Есть тип значения, есть тип столбца, есть тип таблицы. Table.TransformColumnTypes делает приведение значений к указанному типу столбца
Вот с типом столбца и типом таблицы частенько сталкиваюсь А вот тип значения пока не вижу для чего можно применить, поэтому и начал этот разговор. Теперь мне стало ясно различие всех этих типов
Обращаюсь к вам за помощью Только познаю азы PP и PQ.
Вопрос чем-то схож с текущей темой.
Стоит задача найти продажи по максимально поздней дате продаж в 1 точке и по 1 продукту. Поиск ограничить последними 12 месяцами (MAT - 12 месяцев назад от текущего месяца), т.е. период смещенный. В экселе расчет могу сделать, а как его перевести в меру PP.
Что необходимо от меры: 1. Найти продажу максимальной даты в рамках скользящих 12 месяцев по конкретной точке в рамках продукта 2. Найдя эту продажу автоматически скопировать на все 12 месяцев этой точки, т.е. нашла, что максимальная дата среди: Дата Продажи июл.22 - 3уп сент.22 - 2уп янв.23 - 4уп Определила янв.23 как максимальную дату и результат этой меры дублируется для каждой строчки с этим адресом и продуктом: Дата Продажи Мера июл.22 - 3уп 4уп сент.22 - 2уп 4уп янв.23 - 4уп 4уп
Если правильно понимаю, то часть кода по выборке могу использовать из предложенных выше вариантов, однако как прописать код по анализу скользящего периода и лоцирования на предыдущие даты?