Можете ли вы попробовать это и посмотреть, работает ли он?
Rank =
RANKX(
CALCULATETABLE(
VALUES( 'Score Table'[Person] ),
ALLSELECTED( 'Score Table'[Person] )
),
CALCULATE( AVERAGE( 'Score Table'[Score] ) ),
,
ASC,
Dense
)
Давайте подумаем об оригинальном коде шаг за шагом.
- Он перебирает от «Человек 1» до «Человек 20» и вычисляет средний балл этого человека.
- Оценивает средний балл человека текущего контекста фильтра (скажем, «Персона 1 ").
- Найти ранжирование" Персона 1 "в 20 лицах.
На шаге (1) он включает всех Лиц от 1 до 20, посколькув визуале отсутствует личный фильтр. Здесь, похоже, что в выбранном периоде нет очков лиц 15 и 18, поэтому он оценивается как БЛАНК.
Теперь в документе RANKX сказано:
Если выражение или значение равно BLANK, оно обрабатывается как 0 (ноль) для всех выражений, которые приводят к числу, или как пустой текст для всех текстовых выражений.
Средние оценкичеловек 8 и 15 - ПУСТО, поэтому RANKX рассматривает его как 0. Теперь возвращаясь к человеку 1, ее средний балл был 62,43, и было два человека со средним баллом 0. Следовательно, ранг человека 1 будет 2.
Оборачивая «Таблица результатов» [Person] со значениями в CALCULATETABLE, вы можете опустить людей, у которых нет оценок в выбранный период.