Поделиться через


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_Examp_DiagView

По умолчанию мы не можем получить количество продуктов, проданных по году:

CROSSFILTER_Examp_PivotTable1

Количество продуктов по годам можно получить двумя способами:

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

  • Используйте функцию CROSSFILTER, чтобы изменить способ работы связей только для этой меры.

При использовании DAX можно использовать функцию CROSSFILTER для изменения поведения направления перекрестной фильтрации между двумя столбцами, определенными связью. В этом случае выражение DAX выглядит следующим образом:

BiDi:= CALCULATE([Distinct Count of ProductKey], CROSSFILTER(FactInternetSales[ProductKey], DimProduct[ProductKey] , Both))

Используя функцию CROSSFILTER в выражении меры, мы получаем ожидаемые результаты:

CROSSFILTER_Examp_PivotTable2