У меня есть Google Sheets, где продукты перечислены в виде строк, а атрибуты - в виде столбцов. Атрибут каждого продукта оценивается по шкале от 1 до 10. Мой последний столбец является средним из этих значений (то есть =Average(B2:D2)
). Это прекрасно работает, если каждый атрибут имеет одинаковый вес.
+--------+-------+-------+-------+---------+
| | Attr1 | Attr2 | Attr3 | Overall |
+--------+-------+-------+-------+---------+
| Prod 1 | 10 | 8 | 9 | 9 |
| Prod 2 | 2 | 10 | 7 | 6.33 |
| Prod 3 | 4 | 6 | 6 | 5.33 |
+--------+-------+-------+-------+---------+
Проблема в том, что я хочу, чтобы каждый атрибут имел разный вес. Например, Attr1 может не иметь значения и должен стоить только 50%, в то время как Attr3 очень важен и должен стоить 300%.
+--------+-------------+-------+--------------+---------+
| | Attr1 (50%) | Attr2 | Attr3 (300%) | Overall |
+--------+-------------+-------+--------------+---------+
| Prod 1 | 10 | 8 | 9 | 8.89 |
| Prod 2 | 2 | 10 | 7 | 7.11 |
| Prod 3 | 4 | 6 | 6 | 5.78 |
+--------+-------------+-------+--------------+---------+
Значение для первой строки будет:
(10*0.5 + 8*1 + 9*3) / (0.5+1+3) = 8.89
который можно рассчитать с помощью:
(
B2*(IFERROR(REGEXEXTRACT(B1, "\d+"), 100)/100)
+ C2*(IFERROR(REGEXEXTRACT(C1, "\d+"), 100)/100)
+ D2*(IFERROR(REGEXEXTRACT(D1, "\d+"), 100)/100)
) / (
IFERROR(REGEXEXTRACT(B1, "\d+"), 100)/100
+ IFERROR(REGEXEXTRACT(C1, "\d+"), 100)/100
+ IFERROR(REGEXEXTRACT(D1, "\d+"), 100)/100
)
которым, как вы можете видеть, может стать очень сложно управлять по мере добавления новых атрибутов. В идеале я ищу решение, которое не требует создания временных ячеек, чтобы помочь с расчетами.
Существует ли какая-либо встроенная функция или общее соглашение, которое может помочь мне рассчитать эти средневзвешенные значения?
источник
$
означают знаки?dollar sign in excel
это то же самое, так как вы найдете больше документации для него.sumproduct
Если ваши веса находятся в строке 2 от B до L, а данные, которые вы хотите усреднить, находятся в строках 3 и выше, скажем, тогда вы можете использовать sumproduct следующим образом:
источник
Google, кажется, слушал. По крайней мере, в моем экземпляре Google Sheets эта функция
AVERAGE.WEIGHTED
существует. За помощь:источник
Код Липиса у меня не работал, так что вот обновление. Этот код:
работает с текущей версией таблиц Google, правильно обращаясь к элементам массива
проверяет, являются ли значения числами
имеет переключатель, чтобы рассмотреть нулевые значения или нет
Код:
источник
Исправление кода Lipis для работы с текущей версией таблиц Google:
источник
#NUM!
в результате. Код, созданный Lipis, все еще работает. Вы игнорируете только 2d-массив, который возвращается.ARRAYFORMULA () может вычислить средневзвешенное значение в таблицах Google (и не только).
Хранение весов отдельно в B2: D2 упрощает чтение формулы. Вычисление средневзвешенного значения для E3 выглядит аналогично SUMPRODUCT () выше (копирование / вставка для E4 и E5):
=ARRAYFORMULA(sum(B3:D3 * $B$2:$D$2)/sum($B$2:$D$2))
Использование RegExExtract () для получения весов от $ B $ 1: $ D $ 1 - это простое изменение в ARRAYFORMULA (). Замените простой диапазон более сложным выражением "
iferror(regexextract($B$1:$D$1,"\d+"),100)/100
", и формула для E3 становится (копировать / вставить для E4 и E5):=ARRAYFORMULA(sum(B3:D3 * iferror(regexextract($B$1:$D$1,"\d+"),100)/100)/sum(iferror(regexextract($B$1:$D$1,"\d+"),100)/100))
NB. Это регулярное выражение требует имен атрибутов без номеров; поэтому используйте AttrA, AttrB и AttrC вместо Attr1, Attr2 & Attr3.
источник
Внимательно прочитав ваш вопрос,
Я придумал это решение, которое не использует временных ячеек.
формула
Скриншот
Разъяснения
REGEXEXTRACT
Извлечет значение в заголовке после первой прямой скобки иVALUE
преобразует его в число. ЗначениеIFERROR
будет установлено равным,100
если ничего не найдено, иARRAYFORMULA
позволит выбрать диапазон, а не отдельные ячейки.пример
Я создал для вас файл примера: Как рассчитать средневзвешенные значения в таблицах Google?
источник
Поскольку принятый ответ использует скрипт Google Apps, я также создал небольшой фрагмент кода.
Код
Скриншот
Заметка
Сценарий будет следовать той же логике, что и в этом посте. Основным преимуществом является то, что он будет рассчитывать общие значения сразу.
пример
Я создал для вас файл примера: Как рассчитать средневзвешенные значения в таблицах Google?
источник
Для простых средневзвешенных значений вы можете просто добавить значение ячейки несколько раз. Например, если вы хотите, чтобы А1 составлял 75%, а В1 - 25%, вы можете вставить
=AVERAGE (A1,A1,A1,B1)
. Так что специально для вас это будет=AVERAGE (B2,C2,C2,D1,D2,D2,D2,D2,D2,D2)
, который будет весить В2 как половину от С2 (50%) и D2 как 3х С2 (300%).Более сложные вещи выше моей зарплаты. :)
источник
На самом деле обе версии Average.weighted и sumproduct дают одинаковый результат:
Поэтому я предпочитаю использовать первый, так как с ним гораздо проще справиться, однако я не знаю, как добавить другие веса к этой формуле.
Это подсказка, но не знаю, как добавить только веса, а не дополнительные значения
источник
Существует довольно простой способ использования только данных функций.
где E content - количество баллов, а G - важность этих баллов.
источник