DAX функция FILTER для Power BI и Power Pivot. Несколько параметров условий в FILTER

Поделиться
HTML-код
  • Опубликовано: 20 окт 2024
  • [Регистрируйтесь в бесплатном экспресс-курсе] Быстрый старт в языке функций и формул DAX для Power BI и Power Pivot: biprosto.ru/ku...
    [Скачивайте PDF] Справочник DAX функций для Power BI и Power Pivot на русском языке: biprosto.ru/ku...
    Подробная статья по DAX функции FILTER в Power BI и Power Pivot: biprosto.ru/da...
    Рубрика: #biprosto_DAX
    Наш главный сайт "BI - это просто": biprosto.ru
    -----
    В этом видео мы подробно разберем функцию, входящую в категорию фильтров языка запросов DAX в Power BI и Power Pivot от Microsoft, с одноименным названием FILTER. Рассмотрим ее параметры, свойства и примеры формул на практике. А также, разберем частый вопрос - как в DAX функции FILTER использовать сразу несколько параметров условий.
    DAX функция FILTER () - возвращает таблицу, фильтруя исходную таблицу по заданным в параметрах фильтрам. Фильтрация производится по строкам, то есть, возвращаются все столбцы исходной таблицы, а строки только те, которые удовлетворяют условию фильтра.
    Синтаксис: FILTER (‘Таблица’; Фильтр)
    Где:
    ‘Таблица’ - исходная таблица или табличное выражение, которую необходимо отфильтровать
    Фильтр - логическое выражение, которое сравнивается с каждой строчкой таблицы, указанной в первом параметре
    Обычно, данную функцию не используют в самостоятельной работе для простого создания отфильтрованной вычисляемой таблицы, хотя в Power BI это возможно.
    Так как эта функция в итоге возвращает таблицу, то в основном FILTER () используют внутри самих формул DAX в каких-то промежуточных решениях, например, в составе параметров других функций, которые требуют для своей работы таблицу.
    #powerbi #DAX #power_bi #power_pivot #FILTER #функции

Комментарии • 37

  • @МихаилРусинский-р9я
    @МихаилРусинский-р9я 10 дней назад

    Спасибо. Очень доступно, и без лишней "воды".

  • @navalivalive7086
    @navalivalive7086 Год назад

    Самое понятное и необходимое видео, на данный момент, которое я нашел из всего простора интернета, чтобы начать понимать логику программы. Большое спасибо!!!

  • @pavel5362
    @pavel5362 4 года назад

    Автор хорошо объясняет. Справочник - суппер

  • @faritr9988
    @faritr9988 4 года назад

    Спасибо тебе за такое доступное объяснение!

  • @samarkand1795
    @samarkand1795 4 года назад

    Спасибо большое, очень подробно.

  • @Dimoven
    @Dimoven 5 лет назад +1

    У меня есть один график с план/факт значениями. План до конца года, а факт хотелось бы привязать к селектору периода и выбирать значение факта с начала года до выбранного в селекторе периоде. Как это лучше сделать, можно как-то фильтрами BI или нужно фильтровать на уровне созданной внутри bi таблицы из источников?

  • @Mumrik1
    @Mumrik1 2 года назад

    Спасибо за видео. Привет!
    Как отфильтровать нужные строки по наличию в них определённого набора символов?

  • @kuzmichok8980
    @kuzmichok8980 Год назад

    Это для каждого менеджера отдельно функцию писать? А если у меня их 100?

  • @ЛюбовьПетренко-к6м
    @ЛюбовьПетренко-к6м 4 года назад +1

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

  • @ЭдуардХайдаршин
    @ЭдуардХайдаршин 4 года назад

    Добрый день.
    Подскажите пожалуйста, как сделать функцию фильтр на итоговое суммарное значение?
    например есть 3 менеджера и у всех от 10 продаж на сумму от 10 до 30 руб за каждую продажу. Итого менеджер 1 продал суммарно на 100р, менеджер 2 на 200р, менеджер 3 на 220р. Я хочу поставить фильтр на итоговую сумму продаж, например 150р и вывести тех менеджеров, которые суммарно напродавали больше, чем на 150. А сейчас у меня получается поставить фильтр только на каждую отдельную продажу.

  • @setrus52
    @setrus52 3 года назад

    А регулярные выражения в DAX поддерживаются каким-либо образом?
    Например у меня есть менеджеры Петров
    , Петрищев и Петренко и я хочу выбрать строки, соответствующие паттерну ^Пе([а-я]*)в$, т.е. начинающиеся на "Пе", потом любое количество строчных русских букв и в конце "в". Как бы вы реализовали это в DAX?

  • @1ngl0rious
    @1ngl0rious Год назад

    у меня есть таблица сотрудников и время их прихода на работу, как отфильтровать тех кто пришел после 09:00?

  • @svetag78
    @svetag78 6 лет назад

    Спасибо, все очень доступно. Остался один вопрос, а если мне в таблице из вашего примера, необходимо просчитать не одного Петрова, а наоборот, просчитать всех за исключением Петрова? Как быть?

    • @bi-powerbipivotdax7623
      @bi-powerbipivotdax7623  6 лет назад +1

      Пожалуйста, Светлана!
      На счет Вашего вопроса - тут все просто, Вам в условии нужно прописать "Неравно Петрову", то есть, [Менеджер] "Петров"

    • @svetag78
      @svetag78 6 лет назад

      Как просто ))) очень вам спасибо, с нетерпением жду начала курса.

  • @hhhohlick
    @hhhohlick 6 лет назад

    Можно, конечно, использовать вложенные AND или OR, но && и || не имеют ограничений на повторы. А ещё можно использовать условие1 * условие2 вместо AND и условие1+условие2 вместо OR.
    Но это мелочи. Самое главное, что в FILTER могут использоваться меры в условии (иначе просто CALCULATETABLE достаточно). Впрочем, это уже не для первого знакомства, я думаю :)

    • @bi-powerbipivotdax7623
      @bi-powerbipivotdax7623  6 лет назад

      Максим, спасибо за дополнение. А про отличие, сходство и прочее с CALCULATETABLE и др. функциями... это уже не здесь... все в одном ролике не рассмотришь, это будет дальше. Да и для первого знакомства, как правильно Вы заметили, это будет переизбыток

    • @ilikovil3972
      @ilikovil3972 2 года назад

      @@bi-powerbipivotdax7623 Дополню, что можно было просто Sum использовать

  • @daniapro657
    @daniapro657 6 лет назад

    Добрый день!
    Пытаюсь решить задачу:
    С одним товаром получается
    Цель = CALCULATE([Кол-во ТТ];
    FILTER('Шоколад';'Шоколад'[Номер товара ]="302206003" && [Кол-во]>=3 ))
    А вот, когда добавляю второй товар, не считает((
    Цель = CALCULATE([Кол-во ТТ];
    FILTER('Шоколад';'Шоколад'[Номер товара ]="302206003" && [Кол-во]>=3 && 'Шоколад'[Номер товара ]="302206002" ))
    Вы говорили о вложенных "И" в "И"... Как правильно формулу в таком случае прописать, чтобы считала общее кол-во ТТ, в которые был отгружен "товар 1" "И" "товар 2"
    "И" в количестве минимум 3 единицы каждого.
    Заранее спасибо!

    • @bi-powerbipivotdax7623
      @bi-powerbipivotdax7623  6 лет назад

      Денис, здравствуйте.
      У Вас формула не считает условие с 2-ми товарами в режиме "И", потому что в таком режиме DAX пытается в столбце 'Шоколад'[Номер товара ] найти сразу оба значения и "302206003" и "302206002". А такого быть не может, так как этот столбец содержит априори только одно значение.
      Чтобы правильно отфильтровать таблицу 'Шоколад' нужно товары рассмотреть не в режиме "И", а в режиме "ИЛИ". И к каждому товару прибавить условие [Кол-во]>=3 уже в режиме "И", то есть, формула должна быть такой:
      Цель =
      CALCULATE(
      [Кол-во ТТ];
      FILTER(
      'Шоколад';
      OR(
      'Шоколад'[Номер товара ]="302206003" && [Кол-во]>=3 ;
      'Шоколад'[Номер товара ]="302206002" && [Кол-во]>=3
      )
      )
      )
      Тогда таблица отфильтруется и в ней останется только строки, где товар "302206003" в количестве >=3 и товар "302206002" также в количестве >=3

    • @daniapro657
      @daniapro657 6 лет назад

      Здравствуйте!
      Антон,
      Спасибо, попробовал, но выдает не те цифры, которые нужны.
      На выходе получаю общее кол-во ТТ, соответствующих одному или обоим из условий(срабатывает "ИЛИ") а именно:
      точка считается, даже если в неё отгружался один из продуктов в кол-ве более 3 ед., а необходимо, чтобы считались те точки, в которые отгружались оба продукта в кол-ве мин 3 ед. каждого.
      Подскажите пожалуйста, как записывать такие условия, если необходимо посчитать не 2, а более продуктов.
      Спасибо!

    • @bi-powerbipivotdax7623
      @bi-powerbipivotdax7623  6 лет назад

      Денис, да, теперь я понял что именно Вам нужно было. К сожалению, код такого условия очень сложный.. Здесь в комментариях я Вам его объяснить не смогу. В дельнейшем в одном из своих курсов или видео подробно разберу подобный пример.
      А пока, просто Вам высылаю код вычисляемой таблицы на основе FILTER. Сразу оговорюсь, код я написал на скорую руку, поэтому, возможно, его можно как-то оптимизировать....
      Итак, если исходить из данной исходной таблицы yadi.sk/i/5WFAX6CvQlGBCQ , то код вычисляемой таблицы на основе FILTER будет таким (возвращается таблица из всех ТТ, где были продажи по всем номерам товаров, причем по каждому товару более 3 продаж... Количество 3 продажи задается в переменной VAR kol_prodag = 3 ):
      Таблица 2 =
      /*Задаем количество продаж для каждого номера товара у каждой ТТ*/
      VAR kol_prodag = 3
      RETURN
      FILTER(
      /*подаем на вход исходную таблицу*/
      'Шоколад';
      /*первое условие фильтра - у каждой ТТ должны быть в продаже все номера товаров*/
      COUNTROWS(
      GROUPBY(
      FILTER(
      'Шоколад';
      'Шоколад'[ТорговаяТочка]=EARLIER('Шоколад'[ТорговаяТочка])
      );
      'Шоколад'[НомерТовара]
      )
      )
      = DISTINCTCOUNT('Шоколад'[НомерТовара])
      /* первое условие фильтра сочетается со вторым условием в режиме "И" */
      &&
      /*второе условие фильтра - у каждой ТТ по каждому номеру товара должно быть 3 и более продаж (в данном случае, количество продаж задано переменной kol_prodag) */
      SUMX(
      SUMMARIZE(
      FILTER(
      'Шоколад';
      'Шоколад'[ТорговаяТочка]=EARLIER('Шоколад'[ТорговаяТочка])
      );
      'Шоколад'[НомерТовара];
      "условие"; IF (SUM('Шоколад'[Количество])>=kol_prodag;1;0)
      );
      [условие]
      )
      =
      COUNTROWS(
      SUMMARIZE(
      FILTER(
      'Шоколад';
      'Шоколад'[ТорговаяТочка]=EARLIER('Шоколад'[ТорговаяТочка])
      );
      'Шоколад'[НомерТовара]
      )
      ) )

    • @daniapro657
      @daniapro657 6 лет назад

      Спасибо Вам большое! Буду пробовать....

    • @daniapro657
      @daniapro657 6 лет назад +1

      Здравствуйте! Все получилось. Еще раз спасибо и за рабочий код и за комменты, объясняющие его логику!!!

  • @1000zubr
    @1000zubr 5 лет назад

    Справочник перестал скачиваться

  • @nataliaschegoleva6286
    @nataliaschegoleva6286 6 лет назад

    Очень мелкий шрифт на представляемых слайдах и примерах. Я смотрю вас с iPad в развёртке полного экрана, и почти ничего не могу различить, остаётся только догадываться. Пожалуйста, исправьте эту проблему в будущих роликах. А то польза от них резко снижается.

    • @nataliaschegoleva6286
      @nataliaschegoleva6286 6 лет назад

      Это моё пожелание касается прежде всего примеров, которые вы набиваете по ходу изложения.

    • @bi-powerbipivotdax7623
      @bi-powerbipivotdax7623  6 лет назад

      Наталья, благодарю за обратную связь! Постараюсь учесть размер шрифта в будущих видео

  • @pavel-gorbunov.ru-nsk
    @pavel-gorbunov.ru-nsk 6 месяцев назад

    А как проще всего в Экселе отфильтровать значения запросов по списку?
    есть список минус-слов (например ,порно-запросы из СЯ для SEO)
    как их отфильтровать (объем более 1 миллиона запросов)