Перекрестные таблицы в 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) недостаточно нагляден. Рис. 12.11. Динамика покупок книг в Browse-окне Однако вид результата можно улучшить, если оформить его как перекрестную таблицу (рис. 12.12). Рис. 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 Параметры генератора перекрестной таблицы
Пример. Откроем текст запроса с командой вызова генератора перекрестной таблицы и приведем эту команду к следующему виду: do (_GENXTAB) with 'Authorsbooksprices', .T., .T., .T., 1, 2, 3, .T., 0 Сохраним изменения и выполним запрос. Результат просмотрим на рис. 12.13. Рис. 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). |