Средняя функция - PullRequest
       12

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

1 голос
/ 07 сентября 2010

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

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

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 месяцев и разные данные pr.месяц, пр.название.

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

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


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

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

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

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

Ответы [ 2 ]

0 голосов
/ 07 сентября 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, а декабрь на 4,17% меньше среднего.

0 голосов
/ 07 сентября 2010

Предположим:

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
...