Я думаю, что самым простым подходом было бы создать пару рассчитанных столбцов для использования вместо них.
Давайте создадим уникальный возраст для каждого донора, выбрав его возраст для последнего пожертвования.
MaxAge =
CALCULATE(
MAX(data_table[ageattimeofgift]),
ALLEXCEPT(data_table, data_table[Donor_ID])
)
А затем найдите диапазон, связанный с этим возрастом.
MaxRange =
LOOKUPVALUE(
data_table[summary_range],
data_table[ageattimeofgift],
data_table[MaxAge]
)
Используйте это значение вместо summary_range
в сводной таблице.
(Примечание: вы можете разбить MaxAge
по финансовому году, если хотите, чтобы донор мог перемещаться между группами при отдельном просмотре лет.)
Более динамичным подходом было бы использование показателя, который может считываться в контексте фильтра.
Distinct Donors =
VAR CurrentRange =
VALUES ( data_table[summary_range] )
VAR Summary =
SUMMARIZE (
ALLSELECTED ( data_table ),
data_table[Donor_ID],
"MaxAge", MAX ( data_table[ageattimeofgift] ),
"Amount", SUM ( data_table[Amount] )
)
VAR MaxRange =
ADDCOLUMNS (
Summary,
"MaxRange",
LOOKUPVALUE (
data_table[summary_range],
data_table[ageattimeofgift], [MaxAge]
)
)
RETURN
COUNTROWS(
FILTER(
MaxRange,
CONTAINS(
CurrentRange,
[summary_range],
[MaxRange]
)
)
)
Обратите внимание, что я использовал SUMMARIZE
вместо SUMMARIZECOLUMNS
.Пожалуйста, обратитесь к этой статье для получения дополнительной информации о различиях и ограничениях этих функций в различных средах.
Вы можете использовать следующее после RETURN
вместо того, чтобы получить соответствующую сумму.
SUMX ( FILTER ( MaxRange, [MaxRange] IN CurrentRange ), [Amount] )
Примечание. Этот синтаксис IN
, представленный выше, является более новой функцией.Используйте функцию CONTAINS
для обратной совместимости.