Blood81,
Цитата |
---|
Blood81 написал: язык М позволяет писать сложные формулы - аналог вложенным фукциям в excel |
Весь код запроса М можно написать
в одну строку, используя вложенные функции и вложенные выражения. Только это неудобно и не всегда оправдано, так как может вызывать многократное обращение к одним и тем же источникам данных (которое могло быть заменено расчетом одного выражения с последующим обращением к готовому результату).
Создавать ли временный доп.столбец или пытаться все сделать другим способом - зависит от задачи. Иногда проще создать доп.столбец, посчитать на нем что-то и убить его, чем городить огород сложной функцией. Все зависит от задачи, структуры данных и т.п.
в М нет оператора "r". Это была запись аргумента вложенной функции, которая возвращает true или false для отбора строк таблицы. В данном случае r означает строку таблицы, проверяемую на соответствие условию.
Код |
---|
#"Added Custom" = Table.AddColumn(
Exp,
"Количество",
each List.Sum(
Table.SelectRows(
Exp,
(r)=>r[Актив]=[Актив] and r[Дата]<=[Дата])[Движение]
),
type number), |
конкретно эта запись означает следующее:
- В таблицу Exp добавляем столбец, который называется "Количество".
- этот новый столбец в каждой строке рассчитывается при помощи некоей функции, получающей на вход текущую строку таблицы.
- при помощи оператора each мы передаем текущую строку в функцию. В дальнейшем к столбцам (полям) текущей строки можем обращаться просто по имени, не указывая идентификатор строки (например, просто [Актив] вместо Строка[Актив])
- Функция, которая считает значения для нового столбца, идет после слова each
- Эта функция для каждой текущей строки делает следующее:
- берет заново таблицу Exp
- при помощи еще одной функции отбирает строки в этой таблице. Эта функция должна возвращать true или false для каждой строки, получая на вход эту строку. Передаваемую для проверки строку обозначаем как r, чтобы отличать ее от той строки, которую мы используем на шаге 2. В итоге мы по значениям текущей (шаг 2) строки фильтруем исходную таблицу).
Дальше из получившейся отфильтрованной таблицы мы берем столбец [Движение]
И суммируем его при помощи List.Sum