Как рассчитать средневзвешенное значение внутри ArrayFormula на основе нескольких критериев строки? - PullRequest
0 голосов
/ 28 апреля 2020

Я так долго пытаюсь решить проблему, и я не понял, как это сделать.

По сути, мне нужно рассчитать средневзвешенное значение на основе нескольких критериев. Этот критерий будет получен из ArrayFormula (это означает, что у меня есть столбцы с различными значениями для критериев, и я хочу автоматически заполнить среднее значение на основе этого критерия, используя ArrayFormula).

Это моя структура в «главной» таблице: Структура основной таблицы

И это таблица, в которой я «ищу»: Структура таблицы поиска

Таблица «поиск» работает как баланс со всеми операциями, выполненными пользователями. Он содержит все покупки и продажи с соответствующими им ценами и количествами.

По сути, мне нужно средневзвешенное значение покупной цены по пользователю и тикеру, где цены - это значения, а количества - это веса. Используя приведенные выше изображения в качестве примера: «Рассчитайте средневзвешенную покупную цену для тикера ABEV3, который принадлежит example@example.com». Но это должно повторяться для каждой строки, используя ArrayFormula.

До реализации ArrayFormula я успешно использовал запросы, но обнаружил, что QUERY и ArrayFormula несовместимы при использовании массива «в предложении WHERE. Я также пытался использовать SUMPRODUCT, связывая его с FILTER, но он возвращает ошибку несоответствия размера.

Важно отметить: на «основной» таблице можно использовать тот же тикер для разные пользователи, но не один и тот же тикер на одном и том же пользователе дважды. Он работает как составной первичный ключ, как в базах данных.

Заранее спасибо!

Копия моего листа доступна здесь.

Ответы [ 2 ]

0 голосов
/ 02 мая 2020

Итак, мне удалось сделать обходной путь.

Я создал другой лист для хранения всех сумм и сгруппированных запросов.

На этом листе я запрашиваю листы транзакций дважды, один для покупки операции и другое для операций по продаже, группируя их по пользователю и тикеру. В результате получается что-то вроде this .

После этого строки на этом листе автоматически обновляются после добавления транзакции, и это просто вопрос выполнения VLOOKUP в этом интервале запроса.

Почему это было хорошо для меня ? Потому что мне нужны итоги для других целей, и это удовлетворяет обеим задачам.

0 голосов
/ 29 апреля 2020

попробовать:

=ARRAYFORMULA(IFNA(VLOOKUP(A2:A&B2:B; QUERY(FILTER({
 'Transactions - Variable Income'!A2:A&'Transactions - Variable Income'!B2:B\ 
 'Transactions - Variable Income'!D2:D*'Transactions - Variable Income'!E2:E}; 
 'Transactions - Variable Income'!C2:C="buy"); 
 "select Col1,avg(Col2) group by Col1"); 2; 0)))

0

(https://www.wallstreetmojo.com/average-vs-weighted-average/)

...