Средняя функция

У меня есть огромный набор данных, который обновляется каждый месяц. Я хотел бы проверить, отличаются ли новые данные от предыдущих месяцев в %.

Это выглядит так:

month name  data  
jan   551   2  
jan   552   20  
dec   553   12  
jan   553   13  
dec   554   9  
okt   555   2  
nov   555   2  
dec   555   2,5    

Итак 5 имён, до 4 мес и разные данные пр. месяц, пр. имя.

Я хотел бы сделать формулу, которая может сказать мне, отличается ли одно из имен на i% по сравнению с предыдущими месяцами. Например, я хотел бы сказать, что "имя" 555 в dec отличается на 25% по сравнению с средним для этого клиента.

спасибо,
Андерс


Ну, я думаю, что я не слишком хорош, чтобы объяснить себя. Итак, я постараюсь быть немного более ясным.

Я делаю это как функцию excel.

Итак, формула, которую я ищу, должна вычислять pr. назовите средние показатели (avgN). Это, конечно, меняется каждый месяц. И формула должна найти месячную разницу по сравнению со средним значением.

У меня около 2000 строк с 900 разными именами.


person Anders    schedule 07.09.2010    source источник


Ответы (2)


Предполагать:

avgN = average amount for customer n
currN = current (monthly) amount for customer n
delta = tolerance expressed as a decimal (.25 in your example)

Тогда формула

=abs((currN - avgN) / avgN) 

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

=if(abs((currN - avgN) / avgN) > delta, "tolerance exceeded", "within tolerance") 

Из вашего вопроса неясно, хотите ли вы сделать это в коде VBA или в функции рабочего листа. Если первое, то вам понадобится что-то вроде этого

Sub checkTolerance()

    Dim percentageChange As Double
    Dim currN As Double
    Dim avgN As Double
    Dim delta As Double

    ' Set the values of the variables above from somewhere (worksheet cell, user input, etc.)

    percentageChange = Abs((currN - avgN) / avgN)


    If percentageChange > delta Then 
        ' Do something when tolerance is exceeded
        MsgBox "tolerance exceeded"     

    Else
        ' Do something when amount is within tolerance
        MsgBox "within tolerance"
    End If 

End Sub
person Dónal    schedule 07.09.2010
comment
P.S. пожалуйста, не говорите никому, что я знаю VBA :) - person Dónal; 07.09.2010

=(SUM(($A$2:$A$9=A2)*($B$2:$B$9=B2)*($C$2:$C$9))-(SUM(($B$2:$B$9=B2)*($C$2:$C$9))/SUM(--($B$2:$B$9=B2))))/SUM(($A$2:$A$9=A2)*($B$2:$B$9=B2)*($C$2:$C$9))

Это формула массива, и ее нужно вводить с помощью клавиш Control+Shift+Enter, а не просто Enter. Если ваша первая строка данных начинается с A2, эта формула переходит в D2 и заполняется до тех пор, пока у вас есть данные.

SUM(($A$2:$A$9=A2)*($B$2:$B$9=B2)*($C$2:$C$9))

Эта часть суммирует все данные, которые имеют то же имя и месяц, что и строка, в которой вы находитесь.

(SUM(($B$2:$B$9=B2)*($C$2:$C$9))/SUM(--($B$2:$B$9=B2)))

Эта часть принимает среднее значение (сумма/количество) всех данных, которые имеют то же имя, что и строка, в которой вы находитесь, независимо от месяца.

За дек, 553, 12 вы получите -4,17%. Среднее значение для 553 составляет 12,5, а dec на 4,17% меньше среднего.

person Dick Kusleika    schedule 07.09.2010