Страницы: 1
RSS
Создание расчетного столбца с расчетом изменения показателя относительно предыдущей записи регистра
 
Добрый день.
Подскажите как в powerpivot создать расчетный столбец который будет считать изменение показателя относительно предыдущих записей в соответствии с отбором по критериям. При это расчет должен учитывать временной фактор, т.е. рассчитывать значения по предыдущим во времени записям регистра.
В качестве примера прилагаю изменение задолженности по клиентам
 
В примере отсутствуют данные в столбце изменение задолженности.

Вот вам пример решения задачи, как я её понял.
Для решения перед загрузкой таблицы в модель данных я её при помощи PQ отсортировал по датам и клиентам, после чего добавил столбец индекса.
Вот формула для расчетного столбца:
Код
=[Сумма просроченного долга]-
CALCULATE(
   SUM([Сумма просроченного долга]);
   FILTER(
      ALLEXCEPT('Таблица1';'Таблица1'[Клиент]);
      [Индекс]=EARLIER([Индекс])-1)
)
Есть подозрение, что задача решается и без сортировки с индексированием как, например, здесь Но данное решение мне не нравится, т.к. даст не корректный результат, если в таблице будут записи по одному клиенту с одинаковыми датой/временем. Так что с индексом надежнее.

З.Ы. Обновил пример, вставил еще два расчетных столбца
в столбце Попытка3 сделал формулу, которая работает без предварительной сортировки данных и без столбца с индексом
Код
=[Сумма просроченного долга]-
CALCULATE(
   SUM([Сумма просроченного долга]);
   FILTER(
      ALLEXCEPT('Таблица1';'Таблица1'[Клиент]);
      [Дата операции]=EARLIER([Предыдущая_Дата])
   )
)
, но для его расчета используется еще один расчетный столбец Предыдущая_Дата
Код
=CALCULATE(
   MAX([Дата операции]);
   FILTER(
      ALLEXCEPT('Таблица1';'Таблица1'[Клиент]);
      [Дата операции]<EARLIER([Дата операции]))
)
в столбце Попытка2 попробовал объединить вычисления в одну формулу, но ничего не получилось.
Что я делаю не так - пока не могу понять.
Код
=[Сумма просроченного долга]-
CALCULATE(
   SUM([Сумма просроченного долга]);
   FILTER(
      ALLEXCEPT('Таблица1';'Таблица1'[Клиент]);
      [Дата операции]=CALCULATE(
                        MAX([Дата операции]);
                        FILTER(
                           ALLEXCEPT('Таблица1';'Таблица1'[Клиент]);
                           [Дата операции]<EARLIER([Дата операции])
                        )
                     )
   )
)
Оба этих столбца делал по мотивам ссылки приведенной выше, но повторюсь, если в таблице будут строки с одинаковым датой/временем по одному клиенту, то Изменение задолженности посчитается не корректно! Так что вариант с индексом лично мне нравится больше.
Изменено: PooHkrd - 25.10.2017 15:05:51
Вот горшок пустой, он предмет простой...
 
Большое спасибо. Воспользовался попыткой 3
Страницы: 1
Наверх