Имя: Пароль:
1C
1С v8
Помогите расчитать дисперсию в 1С
0 fierylions
 
10.06.14
11:07
Добрый день. Задача перенести формулы с Excel в 1С.
В Excel есть функция Дипс() Которая рассчитывает дисперсию числа (средние отклонение числа).

Как можно рассчитать дисперсию в 1С?
формула или функция?

Спасибо.
1 vicof
 
10.06.14
11:07
не стыдно?
2 shuhard
 
10.06.14
11:08
(0)[формула или функция? ]
ни то, ни другое
есть лишь фишка в СКД
3 fierylions
 
10.06.14
11:10
(2) можете привести пример?
4 Поpyчик-4
 
10.06.14
11:11
(0) Передаём таблицу значений в СКД и считаем штатной функцией.
Работает в 8.3.
5 Черный бухгалтер
 
10.06.14
11:15
(0) Я как-то - наоборот, из 1С выгружал в Excel, там всё считал и сохранял.
6 shuhard
 
10.06.14
11:21
(3) могу, не буду
7 fierylions
 
10.06.14
11:22
(4) (5) Спасибо.
8 Михаил Козлов
 
10.06.14
11:23
(3) "Почти можно" и запросом. Идея такая:
квадрат дисперсии = СУММА(Xi-Xср)^2/N*(N-1)
N - число записей - можно запросом
Xср - среднее значение - можно запросом
СУММА(Xi-Xср)^2 = СУММА(Xi)^2-2*СУММА(Xi)*Xср+Xср^2
Все члены можно запросом.
Не уверен, но, может быть в типовых есть в ABCКлассификации покупателей.
В рабочей конфе в самодельном документе текст запроса выглядит так:
Запрос.Текст = "ВЫБРАТЬ Разрешенные
       |    Номенклатура,
       |   ХарактеристикаНоменклатуры,  
       |   Количество(Номенклатура) КАК Артикулов,
       |   СУММА(СуммаВыручки) КАК СуммаВыручки,
       |   СУММА(СуммаВыручки*СуммаВыручки) КАК КвадратСуммыВыручки,        
       |   СУММА(СуммаВаловойПрибыли) КАК СуммаВаловойПрибыли,
    |   СУММА(СуммаКоличества) КАК СуммаКоличества,
    |   СУММА(СуммаКоличества*СуммаКоличества) КАК КвадратСуммыКоличества
       |ИЗ  (ВЫБРАТЬ
       |     ТаблицаРегистра.Номенклатура КАК Номенклатура,
      |     ТаблицаРегистра.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры,  
       |   МЕСЯЦ(ТаблицаРегистра.Период) КАК месяцВГоду,    
       |   СУММА(ТаблицаРегистра.СтоимостьОборот) КАК СуммаВыручки,
       |   СУММА(ВЫБОР КОГДА ТаблицаРегистраСебестоимость.Номенклатура ЕСТЬ NULL ТОГДА ТаблицаРегистра.СтоимостьОборот
       |          ИНАЧЕ ТаблицаРегистра.СтоимостьОборот - ТаблицаРегистра.КоличествоОборот * ВЫБОР КОГДА ТаблицаРегистраСебестоимость.КоличествоОборот = 0 ТОГДА 0 ИНАЧЕ ТаблицаРегистраСебестоимость.СтоимостьОборот / ТаблицаРегистраСебестоимость.КоличествоОборот КОНЕЦ
       |       КОНЕЦ) КАК СуммаВаловойПрибыли,
    |   СУММА(ТаблицаРегистра.КоличествоОборот) КАК СуммаКоличества
       |ИЗ РегистрНакопления.Продажи.Обороты(&ДатаНач, &ДатаКон, Регистратор," + ТекстГде + "
       |) КАК ТаблицаРегистра
       |ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ПродажиСебестоимость.Обороты(&ДатаНач, &ДатаКон, Регистратор,) КАК ТаблицаРегистраСебестоимость
       |ПО ТаблицаРегистра.Номенклатура = ТаблицаРегистраСебестоимость.Номенклатура
       |И ТаблицаРегистра.ХарактеристикаНоменклатуры = ТаблицаРегистраСебестоимость.ХарактеристикаНоменклатуры
       |И ТаблицаРегистра.Регистратор = ТаблицаРегистраСебестоимость.Регистратор
       |СГРУППИРОВАТЬ ПО
       |    ТаблицаРегистра.Номенклатура,
       |    ТаблицаРегистра.ХарактеристикаНоменклатуры,
       //|      ГОД(ТаблицаРегистра.Период),
       |     МЕСЯЦ(ТаблицаРегистра.Период)
    |) КАК ВнутреннийЗапрос
       |СГРУППИРОВАТЬ По Номенклатура,ХарактеристикаНоменклатуры
       |Упорядочить По СуммаВыручки Убыв
       |ИТОГИ
       |    МАКСИМУМ(Артикулов),
       |      СУММА(СуммаВыручки),
       |    СУММА(СуммаВаловойПрибыли),  
       |    СУММА(КвадратСуммыВыручки),
    |    СУММА(СуммаКоличества),
    |    СУММА(КвадратСуммыКоличества)
       |ПО ОБЩИЕ";
9 Crush
 
25.06.14
16:06
(8) Непонятно мне решение!
Дисперсия - это квадрат среднее квадратическогое отклонения, т.е. сумма квадратов отклонений деленная на количество записей.
СУММА(Xi-Xср)^2/N*(N-1) - а это вообще непонятно что.
СУММА(Xi-Xср)^2 - это квадрат суммы отклонений - совершенно не сумма квадратов!
/N*(N-1) - это конечно похоже на расчет стандартного отклонения, но наоборот должно быть *N/(N-1)

Здесь можно посмотреть в чем разница wiki:Среднеквадратическое_отклонение

В СКД что то туго получается посчитать без предварительного расчета средней, а среднюю то хочется не только по всей таблице, а еще и по группировкам. Получается агрегатная функция Вычислить("Среднее(блабла)") находится внутри Сумма().
Разбирался как считать корень через треугольник, вписанный в окружность, пришел к тем же самым рядам Тейлора для расчета косинуса. 10 рядов дали точность 15 знаков после запятой. - забил:)
Сейчас хочу попробовать передать массив данных в процедуру общего модуля и применить общий объект АнализДанных (ОбщаяСтатистика). Правда там стандартное отклонение вместо среднеквадратического, но это решаемо.
10 Crush
 
25.06.14
16:11
(9) Криво написал, сам разобрать не могу. Исправлюсь:)
Дисперсия - это квадрат среднего квадратического отклонения...