Распечатать страницу

Перекрестные таблицы в Microsoft Visual FoxPro

« Назад

Предположим, что нужно построить таблицу, отображающую динамику приобретения книг, показывающую, в какой день, на какую сумму и какого автора были приобретены книги. Для получения перечисленных данных пригоден следующий текст запроса (сохранен фильтр Authors.Inputdate > {^2004/11/25}):

SELECT Authors.Author, Books.PDate, Books.Price;

                                            FROM ;

                                               HomeLibrary!Authors ;

                                               INNER JOIN HomeliBrary!BooksAuthors ;

                                               ON Authors.AuthorId = Booksauthors.authorid ;

                                               INNER JOIN HomeLibrary!Books ;

                                               ON Books.BookId = Booksauthors.BookId;

                                            WHERE Authors.InputDate > ( {^2004/11/25} );

                                            ORDER BY Authors.Author

Воспроизведем и выполним этот запрос в проектировщике. Полученный результат (рис. 12.11) недостаточно нагляден.

178.1.-Динамика-покупок-книг-в-Browse-окне

Рис. 12.11. Динамика покупок книг в Browse-окне

Однако вид результата можно улучшить, если оформить его как перекрестную таблицу (рис. 12.12).

178.2.-Динамика-покупок-книг-в-перекрестной-таблице

Рис. 12.12. Динамика покупок книг в перекрестной таблице

Для реализации этой цели выберем в проектировщике запроса вкладку Miscellaneous и нажмем на кнопку Cross tabulate. Это нажатие приведет к появлению в конце текста запроса 2-х следующих строчек

… ;

INTO CURSOR SYS(2015)

DO (_GENXTAB) WITH 'AuthorsBooksPrices'

а также комментария, предупреждающего, что в результат попадут 3 (первые) столбца из общего числа выбранных.

Две добавленные строки обеспечивают, во-первых, направление результата запроса в курсор. Имя курсора генерируется функцией SYS(2015). Во-вторых, выполняется команда DO (_GENXTAB) WITH …, строящая по имеющимся в курсоре данным перекрестную таблицу и направляющая результат в курсор AuthorsBooksPrices; SYS(2015)-курсор закрывается.

Выберем курсор AuthorsBooksPrices в Data Session-окне и увидим вышеприведенный результат (см. рис. 12.12).

В добавленной DO-команде _GENXTAB – это системная переменная, хранящая имя программы-генератора перекрестной таблицы. (На самом деле эта программа использует объект класса GenXTab и его метод MakeXtab.)

Генератор перекрестной таблицы по умолчанию употребляет первое выбираемое поле для оси ординат (строк), второе – для оси абсцисс (столбцов), а третье – в качестве данных. Изменить заданные по умолчанию установки можно либо управляя параметрами генератора, либо используя помощник создания перекрестной таблицы (команда меню Tools – Wizards – Query – Cross-Tab Wizard). Смысл параметров генератора описан в табл. 12.2

Таблица 12.2

Параметры генератора перекрестной таблицы

Описание

Значение по умолчанию

1

Имя выходного файла или курсора

XTab.dbf

2

Создается только курсор

.T.

3

Закрывается исходная таблица

.T.

4

Отображается индикатор выполнения

.T.

5

Номер поля для оси ординат (строки)

1

6

Номер поля для оси абсцисс (столбца)

2

7

Номер поля для данных

3

8

Формируется итоговое поле

.F.

9

Вид итога:
·              0 – сумма;
·              1 – количество;
·              2 – доля от итоговой суммы в %

0

Пример. Откроем текст запроса с командой вызова генератора перекрестной таблицы и приведем эту команду к следующему виду:

do (_GENXTAB) with 'Authorsbooksprices', .T., .T., .T., 1, 2, 3, .T., 0

Сохраним изменения и выполним запрос. Результат просмотрим на рис. 12.13.

178.3.-Перекрестная-таблица-с-итоговым-полем

Рис. 12.13. Перекрестная таблица с итоговым полем

Замечания:

1. Чтобы отказаться от построения перекрестной таблицы, нужно открыть текст запроса и удалить из него добавленные для генерации таблицы строчки, не позабыв о точке с запятой, предшествующей опции INTO CURSOR.

2. Генерацию перекрестной таблицы также можно выполнить методом RunXtab объекта класса _xtab библиотеки _utility.vcx, поставляемой с VFP и находящейся по умолчанию в каталоге Visual FoxPro Catalog\Foundation Classes\Automation (см. в справке тему Foundation classes, Component Gallery Object Members, Cross Tab).