Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2003.11.13;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.5 MB
Время: 0.037 c
3-41079
GaM
2003-10-13 18:18
2003.11.13
Прошу простого совета


1-41489
Михааааааааа
2003-10-28 16:47
2003.11.13
TImage


14-41925
muest
2003-10-21 09:52
2003.11.13
Вирус?


14-42032
Lmz
2003-10-12 21:15
2003.11.13
Расшаренные папки в Win2000/XP


3-40836
chtr
2003-10-21 14:22
2003.11.13
Ошибка Row cannot be located for updating





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский