Страницы: 1
RSS
PQ: Создать параметр со множественным условием
 
Всем доброго дня!
Не получается реализовать изменения запроса 1 (с учетом данных в запросе 2)
т.е. в Запросе 2 (список в 1 столбец) указываются наименование столбцов из Запроса 1, которые нужно оставить не выходе
При ед. значение, все получается    
Код
 #"Другие удаленные столбцы" = Table.SelectColumns(#"Измененный тип",{As[Столбец1]{0}})
Но как только хочу добавить 2 и более, не выходит.
При удаление параметра {0} или его изменения (номер строки) - ругается на тип list, т.е. нужно преобразовать список (как я понял), пробывал подобрать функцию, не получилось.
Буду благодарен за подсказку.  
В жизни нет ничего невозможного! Есть только недостаток знаний и умений.
 
Ну так просто же всё, запрос 2 у вас таблица с одним столбцом, преобразуете её в список, есть такая кнопка на вкладке преобразования, просто подставляете название в функцию выбора столбцов
Изменено: StepanWolkoff - 19.12.2018 13:03:20
 
StepanWolkoff, А на примере можете показать, у меня не получается.  
В жизни нет ничего невозможного! Есть только недостаток знаний и умений.
 
Александр, вот так попробуйте:
Код
#"Другие удаленные столбцы" = Table.SelectColumns(#"Измененный тип",As[Столбец1])
Изменено: PooHkrd - 19.12.2018 13:12:33
Вот горшок пустой, он предмет простой...
 
Доброе время суток.
Цитата
PooHkrd написал:
вот так попробуйте:
PooHkrd привет.
Александр никак не удосужится спецификацию прочитать - всё больше метод "научного" тыка предпочитает :)
 
PooHkrd, Спасибо, получилось!
Не понимаю, почему когда обращаемся к 1 значению в запросе надо оборачивать "{}"
В жизни нет ничего невозможного! Есть только недостаток знаний и умений.
 
Андрей VG, и вам доборого!
Да я и сам грешен, таким же макаром познаю, но все же спеку пришлось осилить, там всего то экранов 6-7 не сильно убористого текста.
Вот горшок пустой, он предмет простой...
 
Метод научного пальца - не самый плохой :) Но применять надо его с использованием RTFM.
Хотя честно скажу сам - изучение спецификации языка мне далось с большим трудом - отсутствие привычки чтения подобной документации. Большую часть изучил за счет анализа автоматически генерированных мышкой формул и справочника встроенных функций: "А если тут ткнуть, оно вон как пишет. А тут - вот так. Ага... Ух ты. А вот так - не работает..."
Хотя, конечно, без RTFM далеко не уедешь, факт.
F1 творит чудеса
 
Цитата
Александр написал:
Не понимаю, почему когда обращаемся к 1 значению в запросе надо оборачивать "{}"
потому что значение списка это отдельный его элемент, в вашем случае он имеет тип текст. А обращение к столбцу как к списку, это и есть гтовый список таких элементов, который можно вставлять в функцию в качестве аргумента.
Вы спеку то все таки осильте. Там не сложно.
Вот горшок пустой, он предмет простой...
 
Благодарю всех вас за поддержку, т.к. информации очень мало про PQ (в рус языке) и получается что по ниточкам и "самотыком" изучаю))  
В жизни нет ничего невозможного! Есть только недостаток знаний и умений.
 
Цитата
Александр написал:
Не понимаю, почему когда обращаемся к 1 значению в запросе надо оборачивать "{}"
Функция выбора столбцов вторым аргументом что требует? Список.
Список в языке оформляется как {элемент1, ..., элементN}
Столбец таблицы Таблица[Столбец] = уже готовый список, его оборачивать не надо.
Один элемент списка Таблица[Столбец]{N} - обычно не список, а просто значение (в вашем случае точно так). Его надо обернуть в {}, чтобы стал список.
(Хотя бывают, конечно, столбцы, содержащие списки в ячейках, то есть список списков. Но это не ваш случай)
F1 творит чудеса
 
Цитата
Максим Зеленский написал:
с использованием RTFM
Хы https://grammota.com/interests/hardsoft/chto-takoe-rtfm
Не в обиду PooHkrd, разъяснение от Максим Зеленский,  более понятное))) теперь то я точно понял
В жизни нет ничего невозможного! Есть только недостаток знаний и умений.
 
Цитата
Александр написал:
Не в обиду  PooHkrd
Именно поэтому он MVP, а я, так, мимо проходил.  :D
Вот горшок пустой, он предмет простой...
 
PooHkrd,  :D
В вашем случае скромность - порок!
F1 творит чудеса
 
Цитата
Максим Зеленский написал:
изучение спецификации языка мне далось с большим трудом
Максим, а в чём был труд? Там вроде всё понятным Microsoft-овским английским написано. Опускаешь литеральные определения и читаешь примеры.
 
А как тогда оформить список на строчки? т.е. фильтрация строк из значении запроса 2
В жизни нет ничего невозможного! Есть только недостаток знаний и умений.
 
Александр, не, никакой сертификации у меня нет :) Просто статус MVP

Андрей VG, проблема была именно в отсутствии привычки чтения подобных документов не-программистом. Условно говоря, тот же VBA изучал не по спецификации, а по постам, примерам и книгам того же Уокенбаха. А тут специфическая незнакомая терминология и концепты, особенно если не знаком с функциональным программированием. Например, начинаешь читать, и вскоре видишь фразу типа
Цитата
In M, a function is a mapping from a set of input values to a single output value. A function is written by first naming the required set of input values (the parameters to the function) and then providing an expression that will compute the result of the function using those input values (the body of the function) following the goes-to (=>) symbol.
...
A function is a value just like a number or a text value
8-0
Неподготовленному трудно разобраться, функция - это выражение (expression) или все же значение (value)? А значение - это то, что она посчитала? Но нет, это три разных понятия. Чем дальше в лес - тем толще партизаны.
Цитата
A function value is a value that maps a set of arguments to a single value.
Потом оказывается, есть еще тип function. Типы - вообще отдельная тема...
Добравшись до раздела 3 можно начинать вешаться - сначала там объясняется то, что говорили в п.2 (это круто, но лучше наоборот), затем глушат по голове при помощи enviroinment и immutability (которая по факту существует только в очень узком применении, можно сказать, отсутствует).
Даже если пытаться только с функциями разобраться, вот это сразу выбивает неподготовленного читателя:
Цитата
The result of evaluating a function-expression is to produce a function value (not to evaluate the function-body).
В общем, если кто сразу понял, что функция - это такое expression, которое при evaluation дает специфическое value, которое не является результатом evaluation того expression, которое находится в function body, то это точно не я.

Цитата
Андрей VG написал:
всё понятным Microsoft-овским английским написано
Цитата
The expression is evaluated in an environment like the parent environment only with variables merged in that correspond to the value of every field of the record, except the one being initialized.
8-0 8-0 8-0 8-0
F1 творит чудеса
 
Ага,
Цитата
Максим Зеленский написал:
The expression is evaluated in an environment like the parent environment only with variables merged in that correspond to the value of every field of the record, except the one being initialized.
вот где-то тут я заплакал  :D  и перешел к
Цитата
Андрей VG написал:
Опускаешь литеральные определения и читаешь примеры.
Вроде бы неплохо получилось. По крайней мере для решения моих задач, пока хватает.
Вот горшок пустой, он предмет простой...
 
Александр, начинаю зарабатывать себе карму на MVP.  8)
Вам вот это нужно?
Код
= Table.SelectRows(#"Измененный тип1", each List.Contains( Record.ToList( As{1} ), Text.From( [8] ) ) )

То что вы указали в своем коде As{0} это ссылка на первую строку таблицы, но обращение в такой форме к строке таблицы возвращает на выходе данные типа Record, а не List. Поэтому обертываем это дело в Record.ToList( As{0} ). Далее как я понял вам требуется столбец [8] отфильтровать по списку из запроса As, вот только значения для этого столбца у вас не в первой строке, а во второй, поэтому наше выражение превращается в Record.ToList( As{1} ). Далее для фильтрации требуется каждый элемент столбца сравнить со списком, цикл по элементам столбца нам организует функция Table.SelectRows, а сравнение будем делать при помощи List.Contains.
И еще один момент данные в запросе As вы типизировали как текст, а в запросе Таблица1 как число, в результате List.Contains соответствий не найдет, поэтому пишем Text.From( [8] )
З.Ы. Ах, да, совсем забыл, первый столбец в записи As{1} надо бы исключить из списка, ибо это название столбца, ак как это сделать, это вам Александр домашнее задание. На вскидку, в голову приходят 3 разных способа, но их больше :D
И последнее, если вам нужно отфильтровать список по нескольким столбцам сразу, то проще и быстрее всего это делать через Table.Join. Просто вы популярно объяснили бы общую задачу что у вас на входе, и что на выходе, и вам бы предложили оптимальное решение чем извращаться со сравнением списков.
Изменено: PooHkrd - 20.12.2018 13:52:20
Вот горшок пустой, он предмет простой...
 
PooHkrd, как всегда, пример рабочий :) Спасибо большое!!
Меня этот ответ устраивает, но так как Вы задались вопросом зачем, поясню:
Есть БД с 261 столбцом (активно используются в разное время и разными людьми около 100)
т.е. создать универсальную форму выгрузки данных
Таблица As
Столбец 1 - перечисление всех наименований столбцов из основной выгрузки
Столбец 2 - порядковый номер их выгрузки
Столбцы 3...n - для фильтрации данных из соответствующих столбцов
И конечно, мне не сложно следующими шагами прописать фильтрацию строк "жестко" по соответствующим столбцам (их будет около 5), но меня заинтересовало
Цитата
PooHkrd написал:
проще и быстрее всего это делать через Table.Join
З.Ы. вот что делать когда "пусто" - в БД ведь, такие строки будут присутствовать, но они не нужны на выгрузку. Хотя по умолчанию на Столбцы 3...n можно выставить "-"
пример видоизменил
Изменено: Александр - 20.12.2018 14:55:17
В жизни нет ничего невозможного! Есть только недостаток знаний и умений.
 
Тут я уже не понял... фильтрация соответствующих столбцов по принципу ИЛИ?
Т.е.  [32] = 20,43834924697876 ИЛИ [67] = 98,468518257141113 ИЛИ [67] = 34,075331687927246
Так?
F1 творит чудеса
 
Максим Зеленский, так да
В жизни нет ничего невозможного! Есть только недостаток знаний и умений.
 
и должно остаться 3 строки?
F1 творит чудеса
 
Нет. Смысл указывать уникальные значения (правее от наименования столбцов) для фильтрации в основной выгрузке  
В жизни нет ничего невозможного! Есть только недостаток знаний и умений.
 
Цитата
Александр написал:
для фильтрации в основной выгрузке
вот вы указали 3 уникальных значения - одно в столбце 32 и два в столбце 67. В результате фильтрации в основной выгрузке должны остаться только строки, которые содержат указанные значения в указанных столбцах? В вашем примере их три, должна получиться таблица с 6 (выбранными) столбцами и 3 (отфильтрованными) строками?
Или у меня уже лыжи не едут? :)
F1 творит чудеса
 
Цитата
Максим Зеленский написал:
Или у меня уже лыжи не едут?
У меня тоже не едут. Вообще ничего не понял. :D
Вот горшок пустой, он предмет простой...
 
Мб так?))  
В жизни нет ничего невозможного! Есть только недостаток знаний и умений.
Страницы: 1
Наверх