Формула DAX для вычисления суммы между двумя датами

У меня в PowerPivot есть пара таблиц:

  1. # P2 #
    # P3 #
  2. Таблица календаря - Cal с полем даты.

Между таблицами существует связь "многие к одному".

Я пытаюсь агрегировать RS + -против каждой строки для дат от 3 месяцев назад до даты для этой строки, то есть суммы за 3 месяца до даты. Я испробовал множество вычислений, но лучшее, что я могу вернуть, - это ошибка циклической ссылки. Вот моя формула:

=calculate(sum([RS+-]),DATESINPERIOD(Cal[Date],LASTDATE(Cal[Date]),-3,Month))

Вот файл xlsx.


person nightwatchman    schedule 29.04.2014    source источник
comment
в основном, ваша цель - вычислить промежуточную сумму?   -  person Petr Havlik    schedule 30.04.2014
comment
Не совсем .... Я пытаюсь вычислить общее количество элементов между датой текущей записи и датой 3 месяца назад   -  person nightwatchman    schedule 01.05.2014
comment
не могли бы вы повторно загрузить файл - сейчас не могу его скачать, я хочу что-то протестировать ... :)   -  person Petr Havlik    schedule 02.05.2014


Ответы (2)


Я не смог скачать файл, но то, что вам нужно, - это то, что Роб Колли называет «величайшей формулой в мире» (GFITW). Это не проверено, но попробуйте:

= CALCULATE (
SUM ( WKRelStrength[RS+-] ),
FILTER (
    ALL ( Cal ),
    Cal[Date] <= MAX ( Cal[Date] )
        && Cal[Date]
            >= MAX ( Cal[Date] ) - 90
) )

Обратите внимание, это даст вам предыдущие 90 дней, что составляет примерно 3 месяца, получение точно за предыдущие 3 календарных месяца может быть возможным, но, возможно, менее оптимально, поскольку вы собираетесь сравнивать несколько разные отрезки времени (я думаю, личный выбор).

Кроме того, это будет вести себя «странно», если у вас есть итоговая сумма, в которой будет использоваться последняя дата в вашем выборе.

person Jacob    schedule 05.05.2014

Прежде всего, формула, которую вы используете, предназначена для работы в качестве меры. Это может не работать для вычисляемого столбца. Во-вторых, такие агрегаты лучше делать на уровне измерения, чем на отдельных записях.

Опять же, я не полностью понимаю вашу ситуацию, но если для вас абсолютно важно сделать это на уровне записи, вы можете использовать функцию «Ранее».

Если вы хотите отфильтровать функцию на основе значения в соответствующей строке, вам просто нужно обернуть имя столбца с помощью более ранней функции. Попробуйте изменить LastDate на «Ранее» в формуле.

person Ejaz Ahmed    schedule 14.11.2014