В этом разделе описано, как создавать фильтры в формулах выражений анализа данных (DAX). Вы можете создавать фильтры в формулах, чтобы ограничить значения из исходных данных, используемых в вычислениях. Для этого нужно указать таблицу в качестве входных данных для формулы, а затем задать выражение фильтра. Заявляемая вами выражение фильтра используется для запроса данных и возврата только подмножество исходных данных. Фильтр применяется динамически при каждом обновлении результатов формулы в зависимости от текущего контекста данных.

В этой статье

Создание фильтра для таблицы, используемой в формуле

Вы можете применять фильтры в формулах, которые принимают таблицу в качестве входных данных. Вместо того чтобы вводить имя таблицы, для определения подмножество строк из указанной таблицы используется функция ФИЛЬТР. Затем это подмножество передается другой функции для таких операций, как настраиваемые агрегаты.

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

=СУММКС(
     ФИЛЬТР ('ResellerSales_USD', 'ResellerSales_USD'[Количество] > 5 &&
     "ResellerSales_USD'[ProductStandardCost_USD] > 100)
     'ResellerSales_USD'[SalesAmt]
     )

  • Первая часть формулы определяет одну из Power Pivot агрегатных функций, которая принимает таблицу в качестве аргумента. SumX вычисляет сумму над таблицей.

  • Вторая часть формулы FILTER(table, expression),сообщает SUMX , какие данные использовать. SUMX требуется таблица или выражение, результатом работы с чем является таблица. Здесь вместо использования всех данных в таблице используется функция FILTER , которая указывает, какие строки из таблицы используются.

    Выражение фильтра имеет две части: первая часть именует таблицу, к которой применяется фильтр. Вторая часть определяет выражение, которое будет использовать в качестве условия фильтра. В этом случае нужно отфильтровать всех посредников, которые продали более 5 единиц товара, и товаров стоимостью более 1000 рублей. Оператор ( &&) — это логический оператор AND, который указывает на то, что обе части условия должны быть истинными, чтобы строка влась в отфильтрованное подмножество.

  • Третья часть формулы сообщает функции SUMX сумму значений. В этом случае используется только объем продаж.

    Обратите внимание, что такие функции, как ФИЛЬТР, возвращают таблицу, никогда не возвращают таблицу или строки напрямую, но всегда внедряются в другую функцию. Дополнительные сведения о фильтрах и других функциях, используемых для фильтрации, в том числе о других примерах, см. в этой теме.

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

Фильтры, удаляющиеся дубликаты

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

  • Функция DISTINCT проверяет один столбец, который указан в качестве аргумента функции, и возвращает новый столбец, содержащий только отдельные значения.

  • Функция ЗНАЧЕНИЯ также возвращает список уникальных значений, но также возвращает неизвестный член. Это полезно, если используются значения из двух таблиц, которые соединены отношением, а значение отсутствует в одной таблице и присутствует в другой. Дополнительные сведения о неизвестном члене см. в контексте формул DAX.

Обе эти функции возвращают целый столбец значений; Таким образом, эти функции используются для получения списка значений, которые затем передаются в другую функцию. Например, можно использовать следующую формулу, чтобы получить список уникальных продуктов, проданных определенным товаром, с помощью уникального ключа продукта, а затем подсчитать товары в этом списке с помощью функции COUNTROWS:

=COUNTROWS(DISTINCT('ResellerSales_USD'[ProductKey]))

К началу страницы

Влияние контекста на фильтры

При добавлении формулы DAX в сводная диаграмма или в сводная диаграмма контекст может повлиять на результаты формулы. Если вы работаете в Power Pivot, то контекстом будет текущая строка и ее значения. Если вы работаете в сводная диаграмма или сводная диаграмма, это означает набор или подмножество данных, определяемых такими операциями, как нарезка или фильтрация. Кроме того, в сводная диаграмма или сводная диаграмма имеется собственный контекст. Например, если вы создадите с помощью нее сгруппируете продажи по регионам и годам, в этой области будут отсветены только данные, применимые к этим регионам и годам. Поэтому любые меры, добавленные в сетную форму, вычисляются в контексте заголовков столбцов и строк, а также фильтров в формуле меры.

Дополнительные сведения см. в статье Контекст в формулах DAX.

К началу страницы

Удаление фильтров

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

Переопределение всех фильтров с помощью функции ALL

Функцию ALL можно использовать для переопределения ранее примененных фильтров и возврата всех строк таблицы функции, которая выполняет агрегатную или другую операцию. Если в качестве аргументов для ALLиспользуется один или несколько столбцов вместо таблицы, функция ALL возвращает все строки, игнорируя все контекстные фильтры.

Примечание: Если вы знакомы с терминологией реляционной базы данных, то можете ALL как создание естественного левого внешнего соединить всех таблиц.

Предположим, например, что у вас есть таблицы "Продажи" и "Товары" и вы хотите создать формулу, которая вычисляет сумму продаж по текущему продукту, разделенную на объем продаж по всем продуктам. Необходимо учесть тот факт, что при использовании формулы в меры пользователь срезов может использовать срез для фильтрации по определенному продукту с названием продукта в строках. Поэтому для получения истинного значения знаменателя независимо от фильтров или срезов необходимо добавить функцию ALL для переопределения любых фильтров. Следующая формула является одним из примеров использования all для переопределения результатов предыдущих фильтров:

=СУММ (Продажи[Объем])/СУММX(Продажи[Объем]; ФИЛЬТР(Продажи; ALL(Товары)))

  • Первая часть формулы SUM (Sales[Amount]) вычисляет числитель.

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

  • Вторая часть формулы вычисляет знаменатель. Функция ALL переопределяет все фильтры, которые могут быть применены к Products таблице.

Дополнительные сведения, включая подробные примеры, см. в описании функции ALL.

Переопределение определенных фильтров с помощью функции ALLEXCEPT

Функция ALLEXCEPT также переопределяет существующие фильтры, но вы можете указать, что некоторые из существующих фильтров следует сохранить. В столбцах, которые вы в качестве аргументов функции ALLEXCEPT указывает, какие столбцы будут по-прежнему фильтроваться. Если вы хотите переопрепрестить фильтры большинства столбцов, но не для всех столбцов, allEXCEPT удобнее, чем ALL. Функция ALLEXCEPT особенно полезна при создании стеблей, которые могут быть отфильтровыны по различным столбцам, и вы хотите управлять значениями, которые используются в формуле. Дополнительные сведения, в том числе подробный пример использования ФУНКЦИИ ALLEXCEPT в pivotTable, см. в описании функции ALLEXCEPT.

К началу страницы

Нужна дополнительная помощь?

Совершенствование навыков
Перейти к обучению
Первоочередный доступ к новым возможностям
Присоединение к программе предварительной оценки Майкрософт

Были ли сведения полезными?

Насколько вы удовлетворены качеством перевода?
Что повлияло на вашу оценку?

Спасибо за ваш отзыв!

×