Страницы: 1
RSS
PQ. Отбор по двум и более колонкам значений по списку
 
Добрый день!
Подскажите, пожалуйста, каким образом в PQ можно отобрать из таблицы данных только те строки по которым в одной или более колонках указаны значения, входящие в список.
Пример во вложении.
Заранее благодарю.
Изменено: Solomama - 08.09.2020 14:45:05
 
таблицу отбора предварительно в буферризированный список, а условие отбора:
Код
List.ContainsAny(#"ТаблицаДляОтбора",{[Субконто Дт],[Субконто Кт]})

подробнее в файле
F1 творит чудеса
 
Максим Зеленский,
Благодарю Вас за ответ, все получилось.
Один вопрос только, если можно:
Насколько обязательно применение List.Buffer или его плюсы? Вроде без него тоже работает)
Спасибо.
 
Цитата
Solomama написал:
применение List.Buffer или его плюсы?
Вы выполняете проверку для каждой строки таблицы на попадание значений в некий список. Списки (как и таблицы), в отличие от обычных скалярных значений, обладают свойством мутабельности (изменчивости) - то есть, PQ может решить, что между проверкой первой и второй строки список мог измениться, поэтому его надо прочитать снова. И так он будет пытаться читать его из источника снова и снова, для каждой строки второй таблицы. Если вторая таблица большая, то можно удивиться. В общем, нужно как-то запретить ему это делать.
Есть несколько вариантов:
- перед фильтрацией положить список в буфер (т.е. в память). Фактически, можно было в основном запросе сделать шаг типа
Код
MyList = List.Buffer(#"ТаблицаДляОтбора"[Группа])

и ссылаться на него
- рассчитать список как часть определения функции (это уже более тонкие материи, долго описывать), тогда шаг с фильтрацией выглядел бы так:
Код
= Table.SelectRows(Source, let MyList = #"ТаблицаДляОтбора"[Группа] in each List.ContainsAny(MyList, {[Субконто Дт],[Субконто Кт]}))

ну и прочие другие способы
F1 творит чудеса
 
Максим Зеленский,
Благодарю Вас за развернутый ответ!) Все поняла.
Хорошего дня)
Страницы: 1
Наверх