Как суммировать сложную формулу массива по строкам, не сохраняя промежуточные результаты во вспомогательном столбце?

#google-sheets #array-formulas

Вопрос:

У меня есть некоторые «сложные» вычисления, которые я в настоящее время выполняю по строкам и сохраняю во вспомогательном столбце. В конце концов я просто запускаю sum вспомогательный столбец, чтобы вычислить общее значение этого вычисления.

Я хотел бы просто иметь одно поле, в котором я выполняю расчет общего значения — без необходимости в вспомогательном столбце.

Чтобы быть конкретным, я рассчитываю нагрузку (XL): http://www.strongur.io/monitoring-training-stress-with-exertion-load/

В качестве входных данных я получаю тяжелоатлета, выполненные повторения и количество повторений, которые были в резервуаре до тех пор, пока не будет достигнут сбой (RIR). Я вычисляю XL набора, расширяя повторения, выполненные в диапазоне => 3 повторения, становится [1,2,3], а затем запускаю > ArrayFormula в этом диапазоне, чтобы рассчитать расстояние до отказа с точки зрения этого повторения (повторение 1 дальше от отказа, чем повторение 3) и, следовательно, XL этого одного повторения. Затем я использую a sum для расчета общей нагрузки на данный набор.

К сожалению, этот подход не масштабируется до «единого поля»-решения, поскольку я не могу добавить еще ArrayFormula одно вокруг него. Я не уверен, куда идти дальше — мой опыт работы с электронными таблицами ограничен.

Я думаю, что мне здесь чего — то не хватает с концептуальной точки зрения-я немного погуглил и увидел упомянутые матрицы, было бы это правильным направлением для такого рода вещей? Я хотел бы избежать необходимости писать функцию JavaScript только для этого случая использования.

Заранее спасибо за любые советы / указания! 🙂

С наилучшими пожеланиями, Саймон

Образец Электронной таблицы: https://docs.google.com/spreadsheets/d/1CNYxsQKo_CUIsstCDbcjoojL6WK46rg9ONybviFxAGs/edit?usp=sharing

Комментарии:

1. формула ur SEQUENCE(C2) D2 SEQUENCE(C2)-1 не совпадает с RIRj Repsj-i (как предполагается..) не могли бы вы поделиться y.. ?

2. Одна простая причина: острая нехватка кофе — вы правы, это неправильно. Я все исправил, спасибо, что указали на это!

Ответ №1:

использовать:

 =ARRAYFORMULA(SUM(IF(B2:B="";;IF(COLUMN(1:1)>C2:C;;
 B2:B*EXP(-0,215*(D2:D C2:C-COLUMN(1:1)))))))
 

введите описание изображения здесь

Комментарии:

1. Привет @player0 большое тебе спасибо! Не могли бы вы объяснить, как это COLUMN(1:1) работает? Я действительно не могу обмозговать это — у меня такое чувство, что вы используете это, чтобы сделать то, что я пытался сделать с SEQUENCE этим . Было бы здорово, если бы вы могли это объяснить 🙂

2. @SimonOswald да, последовательность выводит только одну последовательность,поэтому, как в вашем случае, нам нужна одна последовательность на каждую строку… столбец выводит номер столбца, поэтому столбец(B10) = 2-й столбец…. столбец(C5:F100) выведет массив 3,4,5,6, а столбец(2:2) выведет все столбцы, присутствующие в строке, поэтому 1,2,3,4,5,6,7,8 и т. Д. Итак, что мы здесь делаем, мы используем простой, если номер столбца больше значения в столбце B, больше ничего не делайте, используйте этот номер столбца для создания (имитации) последовательности на каждая строка

3. Очень аккуратно! Большое вам спасибо за то, что нашли время разобраться в этом 🙂

4. Я запрыгну сюда и добавлю одну вещь. Если количество повторений в наборе когда-либо будет больше, чем количество столбцов в настоящее время на листе, COLUMN(1:1) это не сработает. Например, если количество повторений равно 30, а количество столбцов всего 26, вы получите неточный результат для этой строки и, следовательно, для общего числа. Вы можете обменять оба экземпляра COLUMS(1:1) на SEQUENCE число, превышающее максимальное количество повторений за набор, которое у вас когда-либо будет, например, SEQUENCE(1;50) .

5. Должно быть, я пропустил «галочку» — я добавил ее сейчас 🙂 Я думаю, что a SEQUENCE(1;50) — это то, что я собираюсь использовать-даже сейчас у меня есть A-AL, так что места для большего количества повторений, чем я когда-либо хотел бы сделать. 50 повторений определенно достаточно! Спасибо всем вам за то, что изучили это 🙂