Базелюк Петр | Технический директор | КТС

«Бизнес-аналитика с помощью Power BI»

- Почему Power BI? - Выгрузка данных из 1С:Предприятие это плохо? - События это наше все - О нормализации замолвим слово - Что такое хранилище данных. Смещение сложности в сторону бизнес-аналитики или в сторону 1С:Предприятия - Поговорим об первичных и вторичных ключах. Эффективно связываем одну таблицу хранилища данных со множеством объектов конфигурации 1С - Как максимально точно обновлять данные в хранилище. Забываем об операциях Insert, Delete, Update - учимся делать MERGE. - Оптимизация MERGE с помощью Common Table Expression - Все-таки, полный онлайн возможен?

Набор математических функций

0. SvoyakMartin 56 31.10.16 13:55 Сейчас в теме
Небольшой набор математических функций для работы с массивами чисел.

Перейти к публикации

Комментарии
Сортировка: Древо
1. Caliban 62 12.01.17 09:27 Сейчас в теме
Зачем такие сложности с суммой?

Функция Сумма(Массив) Экспорт
	Cумма = 0;
	
	Для Каждого Число Из Массив Цикл
		Сумма = Сумма + Число;
	КонецЦикла;
	
	Возврат Сумма;
КонецФункции
Показать
starik-2005; Diversus; v3rter; ice-net; +4 Ответить
4. SvoyakMartin 56 12.01.17 10:16 Сейчас в теме
(1) ситуация аналогична использованию упорядочивания массива для получения крайних вместо перебора.
Несмотря на то, что логично предположить, что получение итога по колонке выполняет ту же операцию сложения в цикле, а я предлагаю дополнительно тратить время и память на создание объекта и его заполнение, по замерам производительности в моём случае выигрывает тот вариант, что я предложил.
6. ice-net 9 12.01.17 10:20 Сейчас в теме
(4)
Ладно время, а как Вы проверяли производительность по памяти?
8. SvoyakMartin 56 12.01.17 11:00 Сейчас в теме
(6) Конкретно в моём случае в приоритете была скорость выполнения отчёта. С памятью же вроде всё очевидно: создавая новую сущность с целью копирования в неё данных можно рассчитывать, что памяти придётся выделить как минимум в два раза больше(например при передаче по значению), а при использовании списка значений и тем более таблицы значений и подавно!
9. ice-net 9 12.01.17 11:09 Сейчас в теме
(8)
Я не совсем это имел ввиду)) Я хотел узнать почему в функции Сумма используется ТЗ, а не перебор по массиву как в (1)?
5. v3rter 12.01.17 10:19 Сейчас в теме
Ну если изменения в процессе вызова функции исходного массива некритичны, то да.
Хотя считаю, что сумму и минимум лучше было делать "дедовскими" способами - циклом с условием и вспомогательной переменной, как в
(1)

Идея понравилась, за идею "звездану".
10. SvoyakMartin 56 12.01.17 11:09 Сейчас в теме
(5) Изменения в исходный массив вносит только упорядочивание. Если важна сохранность не только данных, но и их индексов, тогда да, стоит озадачиться данным вопросом.
2. v3rter 12.01.17 09:58 Сейчас в теме
Мне показалось

https://its.1c.ru/db/metod8dev#content:2606:hdoc
Передача параметров по ссылке

По умолчанию, во встроенном языке 1С:Предприятия 8 передача параметров в процедуры и функции осуществляется по ссылке. Это означает, что изменение формального параметра внутри процедуры или функции будет отражаться на значении фактического параметра, переданного при вызове процедуры или функции.

или надо было передавать по значению?
Функция Сумма(Знач Массив) Экспорт
3. ice-net 9 12.01.17 10:14 Сейчас в теме
(2)
Знач Массив - породит новую переменную Массив (в текущем контексте), что не есть Массив - передаваемый в параметр
=> пришлось бы писать что-нибудь типа
Массив = Сумма(Массив);

Функция Сумма(Знач Массив)
.....
Возврат Массив;
КонецФункции
7. Alias 148 12.01.17 10:23 Сейчас в теме
На всякий случай напоминаю о наличии в платформе объекта
Новый АнализДанных
в котором уже есть встроенные механизмы расчёта различных параметров, в том числе максимума/минимума, медианы, среднего, стандартного отклонения и др.

Надеюсь автор сравнивал свою разработку с использованием платформенных методов и выяснил, что она работает быстрее и лучше?...
vsozansky; корум; +2 Ответить
12. SvoyakMartin 56 12.01.17 11:51 Сейчас в теме
(7) Признаюсь, с данным классом был не знаком, и при поиске способа получения дисперсии и ср.кв. отклонения средствами платформы он мне так же не попадался. На досуге озадачусь изучением сего.
(11) За сравнение - спасибо, думаю, если объединить повторяющиеся вызовы, то общее время чуть сократится.
11. Alias 148 12.01.17 11:19 Сейчас в теме
Сравнил с платформенным методом.

За счет того что платформа получает сразу несколько параметров (напомню, для типа анализа АнализДанныхОбщаяСтатистика это Количество, Максимум,
Медиана, Минимум, Размах, Среднее, СтандартноеОтклонение), время выполнения анализа платформой больше, чем каждое из вычислений с использованием приведённых функций.
Для примера:
Анализ данных платформой: 100 мс (получены 7 параметров)
Расчет приведёнными функциями: медиана - 25 мс, среднее - 80 мс, макс/мин - по 20 мс

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

Если нужно получить сразу пакет параметров -- то нужно или переделывать функции, оптимизируя получение за один проход, или всё же использовать платформенный механизм (т.к. судя по времени исполнения 100 всё же меньше чем 25+80+20+20).
Прикрепленные файлы:
Медиана.epf
13. v3rter 12.01.17 12:00 Сейчас в теме
В инженерных калькуляторах статистические функции сохраняют в памяти устройства количество элементов, сумму и сумму квадратов. Для расчета дисперсии этих данных достаточно. Я это к тому, что если надо считать ещё быстрее, то может каким-то образом сохранять или кешировать эти данные, вместе с минимумом и максимумом?
14. vasilev2015 645 12.01.17 12:08 Сейчас в теме
Предлагаю:

рядом с медианой добавить моду ))
вместо возведения во вторую степень POW использовать умножение на себя
вместо Количество()-1 использовать ВГраница()
15. SvoyakMartin 56 12.01.17 15:00 Сейчас в теме
(14) С модой не всё так просто, что делать, если попадётся мультимодальный массив? Можно посчитать по интервальной, но какой брать интервал?

POW(x, 2) vs x * x - повторюсь, что у меня в приоритете время выполнения, в единичных случаях простое умножение выигрывает, но в среднем наоборот.

ВГраница() - согласен! На 6 символов короче запись и быстрее в среднем в 5 раз!
16. Probot1c 04.02.17 06:10 Сейчас в теме
с набором функций и обработкой данных удобно в екселе работать, хорошо что в 1с что-то подобное есть.
Оставьте свое сообщение
Все разделы

Вакансии

Удаленный ИТ-журналист
Санкт-Петербург
По совместительству

Программист 1С
Санкт-Петербург
зарплата от 80 000 руб. до 150 000 руб.
Полный день

Программист 1С
Москва
зарплата от 120 000 руб. до 160 000 руб.
Полный день

Консультант-аналитик 1С
Москва
зарплата до 160 000 руб.
Полный день

Удаленный бизнес-аналитик 1С
Санкт-Петербург
Временный (на проект)