Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.11.13;
Скачать: CL | DM;

Вниз

Подскажите с какой стороны взяться...   Найти похожие ветки 

 
Alexus   (2003-10-21 19:14) [0]

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


 
MsGuns ©   (2003-10-21 20:14) [1]

TClientDataSet ?


 
Alexsus   (2003-10-21 20:15) [2]

Не понял вопроса.


 
MsGuns ©   (2003-10-21 20:17) [3]

Я не понял ? Если надо агрегаты (суммы по колонкам в пределах групп или по всему НД, то CDS - это как раз то, что надо, если что-то другое, то надо яснее формулировать.


 
Alexsus   (2003-10-21 20:23) [4]

В общем нужно организовать механизм группировки и аггрегирования, но функции агрегатов могут быть не стандартными(не только сумма, среднее и тд ). На основе каких компонентов это можно реализовать ? И нет ли какого-нить примерчика ?


 
Кщд   (2003-10-22 07:44) [5]

так необходимые ф-ции в студию
или считаете, что сейчас все Вам бросятся советовать, не имея представления о том, что Вам нужно?


 
Alexus   (2003-10-22 14:25) [6]

Нужно реализовать как минимум димперсию и среднеквадратическое.


 
Кщд   (2003-10-22 14:35) [7]

такого компонента не знаю
дисперсию и прочее из мат. статистики можно считать добавив в uses Math


 
Alexsus   (2003-10-22 14:54) [8]

А как хотя бы это можно реализовать? Вычисление самой дисперсии это не проблема, вопрос как это организовать на основе данных полученных из базы с минимальными затратами и желательно большим быстродействием ? Очень помог бы хоть какой-нибудь совет.


 
Brahman ©   (2003-10-22 16:25) [9]

Если данные уже получены, то уже не проблема.
Если IB - то можно UDF


 
Alexsus   (2003-10-23 14:11) [10]

Данные уже получены. А вот что такое IB и UDF к сожалению не понял.


 
Zacho ©   (2003-10-23 14:20) [11]


> Alexsus (23.10.03 14:11) [10]
> А вот что такое IB и UDF к сожалению
> не понял.

IB - это такой SQL-сервер. А UDF - это User Defined Function. Но все равно тебе это не нужно, т.к. в любом случае сделать агрегатную ф-цию в UDF не получиться.


 
kaif ©   (2003-10-23 14:33) [12]

Делаешь базу на InterBase (Firebird).
Это сервер баз данных. Прикольная вещь. Попробуй - не пожалеешь.
Создаешь там таблицу (CREATE TABLE MYTABLE ...).
Ложишь туда данные (закачиваешь)
Потом делаешь один простой SELECT типа
SELECT SUM((A-A0)*(A-A0)) D, COUNT(*) C
FROM MYTABLE

Потом открываешь этот запрос и получаешь дисперсию:
dispercy := FieldByName("D").AsFloat/FieldByName("C").AsInteger.


 
Alexsus   (2003-10-23 14:50) [13]

Дело в том что база лежит в ACCESS и это требование заказчика, и нужно не только дисперсию, а по возможность какой нибудь механизм на основе которого можно было бы легко добавлять новые аггрегаты. Если я буду формировать группировки и т.д. сам на основе кого TADOTable это будет достаточно эффективно по скорости или нужно использовать что нить другое ???


 
kaif ©   (2003-10-23 15:02) [14]

Но ведь Access поддерживает SQL-запросы.
ИМХО, нужно создать механизм динамического формирования текстов SQL-запросов и получать исходные данные для разных агрегатов. Хорошо бы добавить в программу небольшой скриптер-нитерпретатор, чтобы производить окончательную обработку данных. И главное - придумать удобный интерфейс, в котором можно было бы задавать (или добавлять) новые формулы для статобработки.
Для получения той же дисперсии тебе нужно выполнить 2 задачи:
1. Максимально быстро получить суммарный квадрат отклонения и кол-во записей.
2. Поделить одно на другое.

Задача 1 решается SQL-запросом к Access-базе
Задача 2 решается встроенным интерпретатором формул. Интерпретаторы можно найти в сети. Например, Automa Pascal Scripter и многие другие.


 
Alexsus   (2003-10-23 15:13) [15]

Возможно я чего не допонимаю.
Предварительная выборка SQL запросом не будет сожержать не сгрупированный набор данных т.к. иначе упрёмся в стандартне аггрегаты. Следовательно группировка и аггрегация должна производиться уже не посредственно в памяти или где-нить во временной таблице(что не желательно) и вопрос в том что я просто не знаю какой инструментарий предоставить хорошее быстродействие в этом случае.


 
kaif ©   (2003-10-23 17:15) [16]

Просто я не вижу статистических задач, в которых стандартные агрегаты не подошли бы в качестве исходного "материала".
Есть еще одна идея. Run-time генерация текстов хранимых процедур.
Разбиваешь всякую задачу опять на 2 задачи:
1. SQL-запрос, собирающий с помощью стандартных агрегатов "сырой материал"
2. Создаешь run-time хранимую процедуру, сканирующую результирующий набор, посталяемый этим запросом и делающая всю остальную работу. Делаешь SELECT-запрос результатов этой процедуры, после чего процедуру уничтожаешь.

Однако такое решение возможено тоько в IB.

Если Access - требование заказчика, то я вижу только такие решения:
1. (гибкое) Берется компонент kbmMemTable (очень быстрая таблица в памяти, поддерживающая индексацию и все остальные прелести для быстрой обработки данных), результат "сырого" SQL выбрасывается в эту таблицу с помощью какого-нибудь метода типа kbmMemTable.LoadFromDataSet, а дальше организуется окончательный расчет руками при помощи очень быстрого скриптера. Такие есть. я сам встречал скриптеры, развивающие до 100млн. операций в секунду (правда не помню, какие).
2. (жесткое) Методы расчетов добавляются к системе в виде отдельных подключаемых dll, загружаемых динамически, с единым стандартом вызова (правда разработать такой стандарт на все случаи жизни сложно). Или же вообще в виде ActiveX-ов добавляются, но опять dll-ы. Юзер добавлять новые не сможет в этом случае. DLL-ы будешь дописывать ты и поставлять заказчику по мере надобности.


 
Alexsus   (2003-10-23 18:23) [17]

Спасибо за совет. Только я не понял что подразумевается под "очень быстрый скриптёр" ?


 
Vick ©   (2003-10-23 18:53) [18]

>Предварительная выборка SQL запросом не будет сожержать не >сгрупированный набор данных т.к. иначе упрёмся в стандартне >аггрегаты. Следовательно группировка и аггрегация должна >производиться уже не посредственно в памяти или где-нить во временной таблице

Не понимаю, почему SQL запрос не может делать группировки и аггрегатизации, при этом все запихивать во временную таблицу, потом ее просто убивать - по-моему очень даже нормально. Только фигня, что Access не поддерживает хранимые процедуры.


 
Alexsus   (2003-10-23 18:59) [19]

SQL запрос может делать группировки и агрегации, просто нужно использовать не стандартные агрегаты, поэтому SQL можно использовать только на этапе подготовки данных, по моему так.



Страницы: 1 вся ветка

Текущий архив: 2003.11.13;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.055 c
14-42027
Checist [root]
2003-10-16 16:25
2003.11.13
Исключение, блин


1-41135
Артем
2003-11-04 07:56
2003.11.13
Ошибка при переходе на другую форму


9-40769
TButton
2003-04-06 20:52
2003.11.13
работа над RPG


6-41863
Maxim Volobuev
2003-09-06 18:38
2003.11.13
WebBrowser и Socks прокси


1-41315
iNew
2003-10-31 09:04
2003.11.13
Вопрос по заполнению динамического массива.