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 #функции
Спасибо. Очень доступно, и без лишней "воды".
Самое понятное и необходимое видео, на данный момент, которое я нашел из всего простора интернета, чтобы начать понимать логику программы. Большое спасибо!!!
Автор хорошо объясняет. Справочник - суппер
Спасибо тебе за такое доступное объяснение!
Пожалуйста, Фарит
Спасибо большое, очень подробно.
У меня есть один график с план/факт значениями. План до конца года, а факт хотелось бы привязать к селектору периода и выбирать значение факта с начала года до выбранного в селекторе периоде. Как это лучше сделать, можно как-то фильтрами BI или нужно фильтровать на уровне созданной внутри bi таблицы из источников?
Спасибо за видео. Привет!
Как отфильтровать нужные строки по наличию в них определённого набора символов?
Это для каждого менеджера отдельно функцию писать? А если у меня их 100?
Добрый вечер Антон, я программный код писать не умею, но хочу научиться в будущем.А сейчас освоить повер би на уровне аналитика. Чтобы понять то о чём говориться, нужно не просто перенастроиться с эксель но еще немного изучить азы питон и ява скрипт, и то не всё понял, очень быстро пишешь формулы для новичка.Пытаюсь понять уроки повер би без практики и без установленного ПО. Всё равно спасибо, очень интересно.
Добрый день.
Подскажите пожалуйста, как сделать функцию фильтр на итоговое суммарное значение?
например есть 3 менеджера и у всех от 10 продаж на сумму от 10 до 30 руб за каждую продажу. Итого менеджер 1 продал суммарно на 100р, менеджер 2 на 200р, менеджер 3 на 220р. Я хочу поставить фильтр на итоговую сумму продаж, например 150р и вывести тех менеджеров, которые суммарно напродавали больше, чем на 150. А сейчас у меня получается поставить фильтр только на каждую отдельную продажу.
А регулярные выражения в DAX поддерживаются каким-либо образом?
Например у меня есть менеджеры Петров
, Петрищев и Петренко и я хочу выбрать строки, соответствующие паттерну ^Пе([а-я]*)в$, т.е. начинающиеся на "Пе", потом любое количество строчных русских букв и в конце "в". Как бы вы реализовали это в DAX?
нет
у меня есть таблица сотрудников и время их прихода на работу, как отфильтровать тех кто пришел после 09:00?
Спасибо, все очень доступно. Остался один вопрос, а если мне в таблице из вашего примера, необходимо просчитать не одного Петрова, а наоборот, просчитать всех за исключением Петрова? Как быть?
Пожалуйста, Светлана!
На счет Вашего вопроса - тут все просто, Вам в условии нужно прописать "Неравно Петрову", то есть, [Менеджер] "Петров"
Как просто ))) очень вам спасибо, с нетерпением жду начала курса.
Можно, конечно, использовать вложенные AND или OR, но && и || не имеют ограничений на повторы. А ещё можно использовать условие1 * условие2 вместо AND и условие1+условие2 вместо OR.
Но это мелочи. Самое главное, что в FILTER могут использоваться меры в условии (иначе просто CALCULATETABLE достаточно). Впрочем, это уже не для первого знакомства, я думаю :)
Максим, спасибо за дополнение. А про отличие, сходство и прочее с CALCULATETABLE и др. функциями... это уже не здесь... все в одном ролике не рассмотришь, это будет дальше. Да и для первого знакомства, как правильно Вы заметили, это будет переизбыток
@@bi-powerbipivotdax7623 Дополню, что можно было просто Sum использовать
Добрый день!
Пытаюсь решить задачу:
С одним товаром получается
Цель = CALCULATE([Кол-во ТТ];
FILTER('Шоколад';'Шоколад'[Номер товара ]="302206003" && [Кол-во]>=3 ))
А вот, когда добавляю второй товар, не считает((
Цель = CALCULATE([Кол-во ТТ];
FILTER('Шоколад';'Шоколад'[Номер товара ]="302206003" && [Кол-во]>=3 && 'Шоколад'[Номер товара ]="302206002" ))
Вы говорили о вложенных "И" в "И"... Как правильно формулу в таком случае прописать, чтобы считала общее кол-во ТТ, в которые был отгружен "товар 1" "И" "товар 2"
"И" в количестве минимум 3 единицы каждого.
Заранее спасибо!
Денис, здравствуйте.
У Вас формула не считает условие с 2-ми товарами в режиме "И", потому что в таком режиме DAX пытается в столбце 'Шоколад'[Номер товара ] найти сразу оба значения и "302206003" и "302206002". А такого быть не может, так как этот столбец содержит априори только одно значение.
Чтобы правильно отфильтровать таблицу 'Шоколад' нужно товары рассмотреть не в режиме "И", а в режиме "ИЛИ". И к каждому товару прибавить условие [Кол-во]>=3 уже в режиме "И", то есть, формула должна быть такой:
Цель =
CALCULATE(
[Кол-во ТТ];
FILTER(
'Шоколад';
OR(
'Шоколад'[Номер товара ]="302206003" && [Кол-во]>=3 ;
'Шоколад'[Номер товара ]="302206002" && [Кол-во]>=3
)
)
)
Тогда таблица отфильтруется и в ней останется только строки, где товар "302206003" в количестве >=3 и товар "302206002" также в количестве >=3
Здравствуйте!
Антон,
Спасибо, попробовал, но выдает не те цифры, которые нужны.
На выходе получаю общее кол-во ТТ, соответствующих одному или обоим из условий(срабатывает "ИЛИ") а именно:
точка считается, даже если в неё отгружался один из продуктов в кол-ве более 3 ед., а необходимо, чтобы считались те точки, в которые отгружались оба продукта в кол-ве мин 3 ед. каждого.
Подскажите пожалуйста, как записывать такие условия, если необходимо посчитать не 2, а более продуктов.
Спасибо!
Денис, да, теперь я понял что именно Вам нужно было. К сожалению, код такого условия очень сложный.. Здесь в комментариях я Вам его объяснить не смогу. В дельнейшем в одном из своих курсов или видео подробно разберу подобный пример.
А пока, просто Вам высылаю код вычисляемой таблицы на основе 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('Шоколад'[ТорговаяТочка])
);
'Шоколад'[НомерТовара]
)
) )
Спасибо Вам большое! Буду пробовать....
Здравствуйте! Все получилось. Еще раз спасибо и за рабочий код и за комменты, объясняющие его логику!!!
Справочник перестал скачиваться
спасибо, ошибку исправили
Очень мелкий шрифт на представляемых слайдах и примерах. Я смотрю вас с iPad в развёртке полного экрана, и почти ничего не могу различить, остаётся только догадываться. Пожалуйста, исправьте эту проблему в будущих роликах. А то польза от них резко снижается.
Это моё пожелание касается прежде всего примеров, которые вы набиваете по ходу изложения.
Наталья, благодарю за обратную связь! Постараюсь учесть размер шрифта в будущих видео
А как проще всего в Экселе отфильтровать значения запросов по списку?
есть список минус-слов (например ,порно-запросы из СЯ для SEO)
как их отфильтровать (объем более 1 миллиона запросов)