В Visual FoxPro для создания перекрестной таблицы можно использовать мастер Cross-Tab Wizard (Мастер построения перекрестных таблиц). В появляющемся после запуска мастера диалоговом окне необходимо указать исходную таблицу, которая может быть таблицей из базы данных или являться результатом выборки данных из нескольких таблиц. Мастер на основе исходной таблицы создает итоговую выборку, в которой группирует и сортирует данные по полям, используемым в качестве строки и столбца перекрестной таблицы, а также вычисляет суммарное значение по заданному полю данных. Затем Visual FoxPro вызывает программу vfpxtab.prg, наименование которой хранится в системной переменной _genxtab.
Чтобы продемонстрировать возможности мастера по созданию перекрестной таблицы, воспользуемся таблицей salegGods.
Для создания перекрестной таблицы с помощью мастера выполните следующие действия:
Замечание
Для запуска мастера создания перекрестной таблицы можно также в меню Tools (Сервис) выбрать команду Wizard (Мастер), а затем — значение Query (Запрос). При этом открывается диалоговое окно Wizard Selection (Выбор мастера).
Рис. 10.4. Выбор исходной таблицы и полей
Рис. 10.5. Определение строк, столбцов и поля данных
Перенесите поле город в область Column (Колонка), поле код товара — в область Row (Ряд) и поле сумма - в область Data (Данные). После этого диалоговое окно будет выглядеть так, как показано на рис. 10.6. Нажмите кнопку Next (Далее) для перехода к следующему шагу.
Рис. 10.6. Диалоговое окно после определения строк, столбцов и поля данных
Таблица 10.1. Назначение опций области Summary
Опция | Назначение |
Sum (Сумма) | Итоговые значения равны сумме значений для каждой пары строка/столбец |
Count (Количество) | Итоговые значения равны количеству значений для каждой пары строка/столбец |
Average (Среднее) | Итоговые значения равны среднему значению для каждой пары строка/столбец |
Мах (Наибольшее) | Итоговые значения равны наибольшему из всех значений для каждой пары строка/столбец |
Min (Наименьшее) | Итоговые значения равны наименьшему из всех значений для каждой пары строка/столбец |
Оставьте установленную по умолчанию опцию Sum.
Рис. 10.7. Определение типа группировки и итогового столбца
Таблица 10.2. Назначение опций области Subtotals
Опция | Назначение |
Sum of data (Сумма данных) | Итоговые значения равны сумме значений для текущей строки |
Number of cells containing data (Число ячеек, содержащих данные) | Итоговые значения равны количеству ячеек, содержащих значения |
Percentage of the table total (Процент от итоговой суммы) | Итоговые значения равны сумме значений для текущей строки, выраженной в процентах по отношению к итоговой сумме |
None (Нет) | Итоговый столбец не создается |
Установите опцию Percentage of the table total (Процент от итоговой суммы). Для перехода к завершающей стадии создания перекрестной таблицы нажмите кнопку Next (Далее).
Рис. 10.8. Завершающая стадия создания перекрестной таблицы
Таблица 10.3. Назначение опций диалогового окна Cross-Tab Wizard — Step 4
Опция | Назначение |
Save cross-tab query (Сохранить перекрестную таблицу в запросе) | Мастер сохраняет созданную перекрестную таблицу в запросе |
Save and run cross-tab query (Сохранить перекрестную таблицу в запросе и запустить) | Мастер сохраняет созданный запрос и запускает его на выполнение |
Save cross-tab query and modify in the Query Designer (Сохранить перекрестную таблицу и открыть для модификации в конструкторе запросов) | Мастер сохраняет созданный запрос и открывает его в окне конструктора запросов |
Выберите третий вариант и нажмите кнопку Finish (Готово). Мастер завершит работу и откроет созданный запрос в окне конструктора. Просмотрите SQL-оператор. Для этого в меню Query (Запрос) выберите команду View SQL (Показать SQL).
Запрос, созданный с помощью мастера, содержит конструкцию для выборки данных, вызов программы, формирующей перекрестную таблицу, и команду просмотра таблицы в режиме Browse (Просмотр):
SELECT SaleGoods.Код_товара, SaleGoods.Город, SUM(SaleGoods.Сумма);
FROM 'SaleGoods.DBF' SaleGoods;
GROUP BY SaleGoods.Код_товара, SaleGoods.Город;
ORDER BY SaleGoods.Код_товара, SaleGoods.Город;
INTO CURSOR SYS(2015)
DO (_GENXTAB) WITH 'Query',.t.,.t.,.t.,,,,.t.,2,.t.
BROWSE NOMODIFY
Результат запроса аналогичен приведенному на рис. 10.3.