CROSSFILTER
Область применения: вычисление вычисляемого столбца вычисляемой таблицы Меры визуального элемента
Указывает направление перекрестной фильтрации, используемое в вычислении связи, которая существует между двумя столбцами.
CROSSFILTER(<columnName1>, <columnName2>, <direction>)
Термин | Определение |
---|---|
columnName1 | Имя существующего столбца с использованием стандартного синтаксиса DAX и полного определения, которое обычно представляет многие стороны используемой связи; Если аргументы задаются в обратном порядке, функция переключится перед их использованием. Этот аргумент не может быть выражением. |
columnName2 | Имя существующего столбца с использованием стандартного синтаксиса DAX и полного определения, которое обычно представляет одну сторону или сторону подстановки используемой связи; Если аргументы задаются в обратном порядке, функция переключится перед их использованием. Этот аргумент не может быть выражением. |
Направление | Направление перекрестной фильтрации, используемое. Должна быть одной из следующих: Нет . Перекрестная фильтрация не выполняется вместе с этой связью. Оба — фильтры на обеих сторонах фильтруют другую сторону. OneWay — фильтры на одной стороне или стороне подстановки фильтра связи с другой стороной. Этот параметр нельзя использовать с связью "один к одному". Не используйте этот параметр в отношениях "многие ко многим", потому что неясно, какая сторона является стороной подстановки; вместо этого используйте OneWay_LeftFiltersRight или OneWay_RightFiltersLeft. OneWay_LeftFiltersRight — фильтрация применяется со стороны <columnName1> к стороне <columnName2>. Этот параметр нельзя использовать с отношением "один к одному" или "ко многим". OneWay_RightFiltersLeft — фильтрация применяется со стороны <columnName2> к стороне <columnName1>. Этот параметр нельзя использовать с отношением "один к одному" или "ко многим". |
Функция не возвращает значения; Функция задает только направление перекрестной фильтрации для указанной связи в течение длительности запроса.
В случае отношения 1:1 нет разницы между одним и обоими направлениями.
CROSSFILTER можно использовать только в функциях, которые принимают фильтр в качестве аргумента, например CALCULATE, CALCULATETABLE, CLOSINGBALANCEMONTH, CLOSINGBALANCEQUARTER, CLOSINGBALANCEYEAR, OPENINGBALANCEMONTH, OPENINGBALANCEQUARTER, OPENINGBALANCEYEAR, TOTALMTD, TOTALQTD и TOTALYTD.
CROSSFILTER использует существующие связи в модели, определяя связи по их конечным столбцам точек.
В CROSSFILTER параметр перекрестной фильтрации связи не важен; То есть, настроена ли связь для фильтрации одной или обоих направлений в модели, не влияет на использование функции. CROSSFILTER переопределит любой существующий параметр перекрестной фильтрации.
Ошибка возвращается, если любой из столбцов, именованных как аргумент, не является частью связи или аргументы принадлежат разным связям.
Если выражения CALCULATE вложены, а несколько выражений CALCULATE содержат функцию CROSSFILTER, то самый внутренний CROSSFILTER — это тот, который преобладает в случае конфликта или неоднозначности.
Эта функция не поддерживается для использования в режиме DirectQuery при использовании в вычисляемых столбцах или правилах безопасности на уровне строк (RLS).
На следующей схеме модели как DimProduct, так и DimDate имеют одно направление связи с FactInternetSales.
По умолчанию мы не можем получить количество продуктов, проданных по году:
Количество продуктов по годам можно получить двумя способами:
Включите двунаправленную перекрестную фильтрацию для связи. Это изменит способ работы фильтров для всех данных между этими двумя таблицами.
Используйте функцию CROSSFILTER, чтобы изменить способ работы связей только для этой меры.
При использовании DAX можно использовать функцию CROSSFILTER для изменения поведения направления перекрестной фильтрации между двумя столбцами, определенными связью. В этом случае выражение DAX выглядит следующим образом:
BiDi:= CALCULATE([Distinct Count of ProductKey], CROSSFILTER(FactInternetSales[ProductKey], DimProduct[ProductKey] , Both))
Используя функцию CROSSFILTER в выражении меры, мы получаем ожидаемые результаты: