Saya memiliki Google Sheets di mana produk terdaftar sebagai baris dan atribut sebagai kolom. Atribut setiap produk dinilai pada skala 1-10. Kolom terakhir saya adalah rata-rata dari nilai-nilai ini (yaitu =Average(B2:D2)
). Ini berfungsi dengan baik jika setiap atribut memiliki bobot yang sama.
+--------+-------+-------+-------+---------+
| | Attr1 | Attr2 | Attr3 | Overall |
+--------+-------+-------+-------+---------+
| Prod 1 | 10 | 8 | 9 | 9 |
| Prod 2 | 2 | 10 | 7 | 6.33 |
| Prod 3 | 4 | 6 | 6 | 5.33 |
+--------+-------+-------+-------+---------+
Masalahnya adalah saya ingin setiap atribut memiliki bobot yang berbeda. Misalnya, Attr1 mungkin tidak penting dan seharusnya hanya bernilai 50%, sedangkan Attr3 sangat penting dan harus bernilai 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 |
+--------+-------------+-------+--------------+---------+
Nilai untuk baris pertama adalah:
(10*0.5 + 8*1 + 9*3) / (0.5+1+3) = 8.89
yang dapat dihitung dengan menggunakan:
(
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
)
yang, seperti yang Anda lihat, dapat menjadi sangat sulit untuk dikelola karena lebih banyak atribut ditambahkan. Idealnya, saya mencari solusi yang tidak memerlukan pembuatan sel sementara untuk membantu perhitungan.
Apakah ada fungsi bawaan atau konvensi umum yang dapat membantu saya menghitung rata-rata tertimbang ini?
sumber
$
artinya tanda - tanda itu?dollar sign in excel
itu adalah hal yang sama karena Anda akan menemukan lebih banyak dokumentasi untuk itu.sumproduct
Jika bobot Anda berada di baris 2 dari B ke L, dan data yang ingin Anda rata-rata berada di baris 3 dan lebih tinggi, katakanlah, maka Anda dapat menggunakan sumproduct sebagai berikut:
sumber
Google sepertinya telah mendengarkan. Setidaknya dalam contoh Google Sheets saya, fungsinya
AVERAGE.WEIGHTED
ada. Per bantuan:sumber
Kode Lipis tidak berfungsi untuk saya, jadi inilah pembaruan. Kode ini:
bekerja dengan versi Google Spreadsheets yang saat ini menangani elemen array dengan benar
memeriksa apakah nilainya adalah angka
memiliki saklar untuk mempertimbangkan nilai nol atau tidak
Kode:
sumber
Memperbaiki kode Lipis agar berfungsi untuk versi Google Spreadsheets saat ini:
sumber
#NUM!
hasilnya. Kode yang dibuat Lipis masih berfungsi. Anda hanya mengabaikan array 2d yang dikembalikan.ARRAYFORMULA () dapat menghitung rata-rata tertimbang di Google Spreadsheets (dan banyak lagi).
Menyimpan bobot secara terpisah di B2: D2 menyederhanakan membaca rumus. Menghitung rata-rata tertimbang untuk E3 kemudian terlihat mirip dengan SUMPRODUCT () di atas (salin / tempel untuk E4 & E5):
=ARRAYFORMULA(sum(B3:D3 * $B$2:$D$2)/sum($B$2:$D$2))
Menggunakan RegExExtract () untuk mendapatkan bobot dari $ B $ 1: $ D $ 1 adalah perubahan sederhana di ARRAYFORMULA (). Ganti kisaran sederhana dengan "
iferror(regexextract($B$1:$D$1,"\d+"),100)/100
" ekspresi yang lebih kompleks dan menjadi rumus untuk E3 (copy / paste untuk 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 Regexp itu memerlukan nama atribut tanpa angka; jadi, gunakan AttrA, AttrB & AttrC bukan Attr1, Attr2 & Attr3.
sumber
Setelah membaca pertanyaan Anda dengan cermat,
Saya datang dengan solusi ini, yang tidak menggunakan sel sementara.
Rumus
Tangkapan layar
Dijelaskan
The
REGEXEXTRACT
akan mengekstrak nilai dalam header setelah braket lurus pertama danVALUE
akan mengubahnya menjadi sebuah angka. TheIFERROR
akan menetapkan nilai pada100
jika tidak ada yang ditemukan danARRAYFORMULA
akan memungkinkan untuk memilih berbagai, daripada sel-sel individual.Contoh
Saya telah membuat contoh file untuk Anda: Bagaimana cara menghitung rata-rata tertimbang di Google Spreadsheets?
sumber
Karena jawaban yang diterima menggunakan Skrip Google Apps, saya juga membuat cuplikan kecil.
Kode
Tangkapan layar
Catatan
Script akan mengikuti logika yang sama seperti yang disajikan dalam posting ini . Keuntungan utama adalah bahwa ia akan menghitung nilai keseluruhan sekaligus.
Contoh
Saya telah membuat contoh file untuk Anda: Bagaimana cara menghitung rata-rata tertimbang di Google Spreadsheets?
sumber
Untuk rata-rata tertimbang sederhana , Anda bisa menambahkan nilai sel beberapa kali. Seperti jika Anda ingin A1 menjadi 75% dan B1 menjadi 25%, Anda dapat memasukkan
=AVERAGE (A1,A1,A1,B1)
. Jadi khusus untuk Anda, itu akan menjadi=AVERAGE (B2,C2,C2,D1,D2,D2,D2,D2,D2,D2)
, yang akan menimbang B2 sebagai setengah dari C2 (50%) dan D2 sebagai 3x C2 (300%).Hal-hal yang lebih rumit berada di atas nilai gaji saya. :)
sumber
Sebenarnya kedua versi Average.weighted dan sumproduct memberikan hasil yang sama:
Jadi saya lebih suka menggunakan yang pertama karena cara ini lebih mudah untuk menanganinya, namun saya tidak tahu bagaimana menambahkan bobot lain ke formula ini.
Ini adalah tooltip, tetapi tidak tahu bagaimana cara menambahkan hanya bobot dan bukan nilai tambahan
sumber
Ada cara yang cukup sederhana dengan hanya menggunakan fungsi yang diberikan.
di mana konten E adalah jumlah poin dan G pentingnya poin-poin tersebut.
sumber