Страницы: 1
RSS
Расчет по датам при наличии динамических данных
 
Добрый день. Помогите пожалуйста. Есть таблица

ДатаМенеджерСуммаto.Колвоto.Сумма
01.01.2020Вася10000110000
01.01.2020Петя200003170000
03.01.2020Петя600003170000
02.01.2020Петя 30000130000
02.01.2020Юля400003170000
03.01.2020Юля500003170000
03.01.2020Коля50000270000
04.01.2020Коля20000270000
04.01.2020Петя900003170000
04.01.2020Юля800003170000
04.01.2020Ваня50000150000
04.01.2020Слава60000160000
Данные в столбце "to.Колво" и  "to.Сумма"расчитываются при запросе Power Query (динамические). Нужны актуальные данные суммы именно на дату анализа (В столбце дата)
Это можно сделать при помощи Power Query?
Или как я вижу при помощи VBA Перенести данные с последней даты на другой лист, обновить данные и так по кругу.
Буду рад любому варианту. Так как сам к сожалению не соображу ((
 
kolyaya, вам нужно обновить данные и перенести их на другйо лист? или нужно перенести и потом обновить?!
Не бойтесь совершенства. Вам его не достичь.
 
Перенести данные с последней даты на другой лист, обновить данные и так по кругу.
Т.Е. Я сформировал таблицу на 04.01.20 --> Данные за 04.01 нужно перенсти на  другй лист и удалить из основной таблицы --> Обновить данные  --> Данные за 03.01 нужно перенсти на  другй лист и удалить из основной таблицы --> Обновить данные
И так по кругу.
 
Сейчас подумал. Не совсем корректно задачу поставил. В столбце "to.Колво" и  "to.Сумма" нужны данные за предыдущий период т.е не включающие в себя данные на последнее число.
Полуается нужно наверное от обратного идти.
Берем даные например за 1 число группируем их через PQ
ДатаМенеджерСумма
01.01.2020Вася10000
01.01.2020Петя20000
Добавляем данные за 2-е число и обеденяем таблицы
01.01.2020Вася10000
01.01.2020Петя20000
02.01.2020Петя30000120000
02.01.2020Юля40000
Получаеться нужно запросы по очереди выполнять а потом данные переносить в третью таблицу что бы они не обновлялись.
01.01.2020Вася10000
01.01.2020Петя20000
02.01.2020Петя30000120000
02.01.2020Юля40000
03.01.2020Коля50000
03.01.2020Петя60000250000
Если это важно даты могу иметь пропуски, например 4 потом 7 число.
Понимаю что задача спицефическая, надеюсь более менее понятно изложил. На яндекс кошельке есть 300 рублей, понимаю что не много, но все же, готов заплатить за помощь.
Изменено: kolyaya - 26.02.2020 22:19:28
 
Доброе время суток
Цитата
kolyaya написал:
Сейчас подумал
Нет, не подумали :(  Неужели это такая жизненная позиция у вас? Написать кучу текста, составить текстовый же пример алгоритма, который весьма невнятен, вместо того чтобы составить пример того, что должно получиться и убрать пробелы справа у менеджера Пети. Это так принципиально сложно?
Вариант насколько понял.
 
К сожалению не то.
Добавил в файл примера лист нужно. Так наверное понятней будет.  
Изменено: kolyaya - 27.02.2020 18:24:48
 
Цитата
kolyaya написал:
Так наверное понятней
Уы, нет. Почему у Пети как-бы нарастающий итог, а у других вообще непонятно что? Или как водится пример - от балды? Чего себя любимого-то утруждать. Пусть другие догадываются, я же за помощью пришёл! :)
Следующее приближение.
Код
let
    Source = Table.AddIndexColumn(Excel.CurrentWorkbook(){[Name="Таблица13_2"]}[Content], "id"),
    itemCols = Table.ColumnNames(Source),
    calc = Table.Group(Source, {"Менеджер"}, {"temp", (sub) =>
    let
        ordered = Table.Sort(sub, {"Дата"}),
        needed = Table.SelectColumns(ordered, itemCols)
    in
        Table.FromColumns(Table.ToColumns(needed) & {{null} & List.Range(needed[Сумма], 0, Table.RowCount(needed) - 1)}, itemCols & {"Пред. Сумма"})
    })[temp],
    result = Table.Combine(calc),
    #"Sorted Rows" = Table.Sort(result,{{"id", Order.Ascending}}),
    #"Removed Columns" = Table.RemoveColumns(#"Sorted Rows",{"id"})
in
    #"Removed Columns"
 
Перепроверил пример не от балды :) - добавил коментарии.
Нужна не предыдущая сумма, а предыдущие "to.Колво" и  "to.Сумма".
И нужно группировать последние 10 значений как в начально примере. там это реализовалось через
Цитата
   group = Table.Group(Источник, {"Менеджер"}, {"tmp", each                                                      
[a=Table.LastN(_,10),                                                    
Колво = List.Count(a[Менеджер]),                                                
Сумма = List.Sum(a[Сумма])]                                          
}),  
Изменено: kolyaya - 27.02.2020 20:31:02
 
Цитата
kolyaya написал:
пример не от балды
ну тогда не знаю - не сходится пара позиций:
Скрытый текст
Изменено: buchlotnik - 27.02.2020 21:02:02
Соблюдение правил форума не освобождает от модераторского произвола
 
buchlotnik, Спасибо большое. Вроде то что нужно, сейчас к оргиналу буду подгонять.
Цитата
buchlotnik написал:
ну тогда не знаю - не сходится пара позиций:
Прошу у всех прощения. там где писал коментарии перепроверил, а на последние 3 строчки терпения не хватило ((
 
Изменено: kolyaya - 27.02.2020 21:31:42
 
Цитата
kolyaya написал:
последние 10 значений
А вот туда-то я и не глядел. Приношу свои извинения за возможный наезд. Но! писать оконные функции не буду. Если данных мало, то код Михаила отлично справиться. Ну, а если много... Надеюсь тёзка подсобит :)
 
Ого, и в правду где-то 200-300 строк в минуту считает. Но с учетом того что я и к VBA был готов, думаю что быстрее бы не получилось.
Оставлю на ночь пусть считает )). Еще раз спасибо.
 
Ну вот так шустрее будет:
Скрытый текст
Соблюдение правил форума не освобождает от модераторского произвола
 
Цитата
kolyaya написал:
VBA был готов, думаю что быстрее бы не получилось.
На VBA для миллиона строк и 100 подгрупп это посчиталось бы максимум за минуту. Зря вы так о VBA - это формулами бы вы получили точно такой же временной результат.
Страницы: 1
Наверх