Показать сообщение отдельно
Старый 07.06.2006, 18:16   #1  
Gustav is offline
Gustav
Moderator
Аватар для Gustav
SAP
Лучший по профессии 2009
 
1,858 / 1152 (42) ++++++++
Регистрация: 24.01.2006
Адрес: Санкт-Петербург
Записей в блоге: 19
Исследование скорости экспорта данных из Axapta в Excel (коллективный эксперимент)
Уважаемые коллеги,

Поводом для организации данной ветки послужила дисскуссия отсюда: Какой способ для связи Axapta с Excel вы предпочитаете?

Так вот. Предлагается количественно сравнить скорость экспорта данных из Axapta в Excel при использовании различных способов выгрузки. Все желающие могут поучаствовать в эксперименте. Каждый участник выбирает свой любимый (или нелюбимый – как кому нравится) способ (или способы), «прогоняет» его (их) и вкратце информирует остальных о результатах своих изысканий (можно приложить джоб или проект). Если есть возможность проверить свои способы на разных по характеристикам компьютерах – всячески приветствуется!

Сравнение предлагается производить в сходных (по объему экспортируемых данных) условиях. Вот эти условия:

1. Выводим в Excel данные из двух связанных таблиц: LedgerTrans и LedgerTable.

2. Объем вывода – примерно 50 тысяч записей, 10 полей (список ниже).

3. В Аксапте данные получаем в цикле:
Код:
    LedgerTrans ledgerTrans;
    LedgerTable ledgerTable;
    int timeFullStart, timeFullFinish, timeFullTotal;
    ……………………………
    // засекаем время
    timeFullStart = timenow();
    ……………………………
    while select  ledgerTrans
            join  ledgerTable
            where ledgerTrans.AccountNum == ledgerTable.AccountNum
               && ledgerTrans.TransDate >= str2date('dd.mm.yy',123) && ledgerTrans.TransDate <= str2date('DD.MM.YY',123)
    {
            // 10 полей
            ledgerTrans.RecId  --- >  в Excel, столбец 1
            ledgerTrans.AccountNum --- >  в Excel, столбец 2
            ledgerTable.AccountName --- >  в Excel, столбец 3
            ledgerTable.AccountPlType  --- >  в Excel, столбец 4   
            ledgerTrans.BondBatchTrans_RU ) --- >  в Excel, столбец 5
            ledgerTrans.BondBatch_RU  --- >  в Excel, столбец 6
            ledgerTrans.TransDate  --- >  в Excel, столбец 7
            ledgerTrans.Txt  --- >  в Excel, столбец 8
            ledgerTrans.AmountMST  --- >  в Excel, столбец 9
            ledgerTrans.Crediting  --- >  в Excel, столбец 10
    }
    ……………………………
    timeFullFinish = timenow();
    timeFullTotal = timeFullFinish - timeFullStart;
    info('Время выполнения, сек');
    info(int2str(timeFullTotal));
4. Конкретная реализация алгоритма выгрузки в Excel – естественно, ваша. Куда данные пойдут из цикла – скажем, сразу напрямую в Excel или сначала во временную таблицу – тоже ваша забота.

5. Кол-во выгружаемых записей неявно «задается» путем выполненного заранее подбора начальной и конечной дат в запросе: dd.mm.yy и DD.MM.YY – вы просто подбираете себе такой конкретный диапазон дат, который бы возвращал из вашего LedgerTrans-a примерно 50000 записей (плюс-минус 2-3 тысячи – не вопрос!). Поскольку бизнесы у всех разные, то и разные по жизни темпы наполнения LedgerTrans-a. Про ваши конкретные даты вы, естественно, никому из нас не рассказываете (чтобы шпиёны не могли оценить интенсивность вашей бухгалтерии J) – если только сами не захотите.

6. Рассматриваем только выгрузку средствами самой Аксапты. Доступ напрямую к таблицам БД средствами СУБД (MS SQL Server или Oracle), минуя Аксапту – не рассматриваем.

7. Данные выводим в новую книгу Excel без форматирования, только строка заголовка и дальше данные (начиная с ячейки A2 J). Моментом окончанием исследуемого процесса считается появление всех данных в открытом окне Excel. Время последующего сохранения этой новой книги на диске не учитываем. Если же алгоритм построен так, что данные сначала выводятся на диск (например, как текстовый файл), то этот файл следует открыть и «предъявить» в открытом окне Excel – это время уже учитываем!

Какие результаты интересны? (обсуждаемо):

1. Общее время процесса, в секундах – от момента запуска метода до момента появления всех данных в окне Excel.
2. Время непосредственного вывода в Excel, в секундах - если есть возможность подсчитать время непосредственного вывода в Excel, отделив его от времени выборки данных из таблиц в цикле, то просьба указать это время.
3. Фактическое кол-во выведенных записей (с точностью до 100 вполне достаточно).
4. Версия Excel – 97, 2000, 2002, 2003 (в способе, который буду иллюстрировать я, это оказалось существенным параметром)
5. Версия Axapta.
6. Характеристики компьютера: частота процессора, размер оперативной памяти, «реальная тачка или виртуальная»… что еще?
7. Характеристики локальной сети – пропускная способность… что еще?
8. Конечно, любые ваши дополнительные комментарии.
9. Что еще?

Ну что, изобразим?

Заранее спасибо всем, кто откликнется. Пошёл готовиться и сам…

P.S. Все условия эксперимента обсуждаемы, включая запрос, таблицы, кол-во записей и полей.

Последний раз редактировалось Gustav; 07.06.2006 в 18:27.
За это сообщение автора поблагодарили: mazzy (9), sukhanchik (4), konopello (1).