Цитата |
---|
EvgeniyLFC написал: Вы предлагаете объеденить таблицы, чтобы была возможность использовать ВПР в PQ, но принцип мне не понятен. Буду благодарен, если разъясните и покажите пример. |
Чтобы вам было понятнее - приведу такую аналогию. PQ это такой же функциональный язык, как и.. формулы.
То есть по своим принципам работа с PQ ничем не отличается от работы с формулами - нет операций присвоения в том смысле, как это принято, например, в VBA. Результат вычисляется во время обновления по принципу "как растет дерево" - от корня и к ветвям. По этому же принципу в формуле вы используете значения других ячеек, где хранятся промежуточные результаты, но и там они вычисляются в случае необходимости, обращаясь к другим ячейкам и т.д.
Присвоение имени на PQ можно сравнить с объявлением именнованого диапазона ячеек в Excel. По этой причине понятно что не может быть двух диапазонов с одинаковыми именами, ровно как и двух одинаковых имен в пределах одной зоны видимости в PQ.
Попробуйте зайти в Advanced Editor PQ и, стерев там абсолютно все, написать просто:
или
И нажать ОК.
Аналогом "скобок" в формулах, в PQ является конструкция let .. in - между let и in пишутся промежуточные этапы, а то, что после in - итоговое возвращаемое значение.
Код |
---|
let
Privet = "Привет, "
in Privet & "Вася" |
Код |
---|
let
Privet1 = "Привет, ",
Privet2 = "Вася",
Privet3 = Privet1 & Privet2
in Privet3
|
Последний пример является основной формой М - кода, которую генерирует встроенный редактор. Когда вы делаете Query from Table, вместо Privet1 добавляется функция, возвращающая из книги вашу таблицу по ее имени, вместо Privet2 и Privet3 - те операции, которые вы в редакторе делаете.
Внутри let имена перечисляются через запятую, перед in она не ставится.
Эти "cкобки" можно вставлять где угодно, только в некоторых случаях встроенный редактор перестанет вас понимать (если ваш запрос не сможет разбить на послоедовательные шаги). Не рекомендую в начале это делать, лучше делайте код в редакторе запросов, добавляя или редактируя по необходимости.
Ну вот пример со скобками:
Код |
---|
let Privet1 = "Привет, ",
Privet2 = let Va = "Ва", Sya = "ся" in Va & Sya,
Privet3 = Privet1 & Privet2
in Privet3 |
Имя Privet2 будет присвоено выражению Va & Sya, элементы которого, в свою очередь, определяется внутри let.
По вышесказанным причинам, вычисление начинается с того, что идет после последнего in и далее PQ "смотрит" на что внутри let ссылается это конечное выражение, в случае необходимости нужные значения вычисляются и т.д.
Имхо, самая наглядная картина - рост дерева из семечка.
P.S. В PQ существует множество типов - например, список (List), таблица (Table) запись (Record), что угодно (Any) и т.д. Более того, функции и типы данных тоже являются типами, а элементами любых составных элементов могут быть любые типы.
Вы можете создать таблицу, ячейками которой будут, например, другие таблицы или даже функции.
Функция может быть рекурсивной (вызывать саму себя), может быть с переменным числом аргументов
Массивов в привычном понимании тут нет - есть списки, элементами которого являются другие списки, либо, например, таблицы.