Я провел много тестов, чтобы выяснить, как именно ведет себя Allexcept (), и вот мой вывод:
Allexcept () имеет 2 различных поведения, как и All ():
1. как «removefilter», таким образом он удаляет все фильтры из столбцов, которые не исключены из расширенной таблицы, но сам по себе ничего не возвращает;
2. возвращает «специальную» расширенную таблицу, которая содержит только те столбцы, которые не исключены из исходной расширенной таблицы. В этом случае таблица результатов по-прежнему действует как расширенная таблица, когда это возможно.
Поведение 1 слишком ясно, чтобы его можно было объяснить. Чтобы активировать это поведение, просто используйте allexcept () как верхнюю функцию в Calculate () или Calculatetble () в качестве аргумента фильтра.
Поведение 2 гораздо сложнее доказать и понять.
Эта формула доказывает, что Allexcept () может возвращать таблицу и таблица результатов является неполной (настоятельно рекомендуется использовать DAXStudio для проверки результата):
EVALUATE
GENERATE (
VALUES ( Data[Name] ),
CALCULATETABLE ( ALLEXCEPT ( Data, Data[Name] ) )
)
Это показывает, что Allexcept () может возвращать таблицу самостоятельно, когда это необходимо:
EVALUATE
GENERATE ( VALUES ( Data[Name] ), ALLEXCEPT ( Data, Data[Name] ) )
Это показывает, что таблица результатов, возвращаемая Allexcept (), является расширенной:
EVALUATE
CALCULATETABLE ( 'Date', CALCULATETABLE ( ALLEXCEPT ( Data, Data[Name],Data[Datetime],Data[Type] ) ) )
И последняя формула показывает, что при использовании в качестве возвращателя таблицы Allexcept () игнорирует любой аргумент фильтра в исходной расширенной таблице, включая как исключенные столбцы, так и не исключенные, что означает, что все фильтры в исходном расширенном столбце столы бесполезны:
CALCULATETABLE (
'Date',
CALCULATETABLE (
ALLEXCEPT ( Data, Data[Name] ),
Data[Name] = "Tom",
'Date'[YearMonth] ="2018-1-1"
)
)
Пожалуйста, прокомментируйте, если у вас есть какие-либо советы!