
228
В третьей таблице Rashod.db содержатся сведения о расходе товара со
склада. Она содержит поле N_nakl (Номер накладной), Den (День), Mes (Ме-
сяц), God (Год даты расхода), Name_t (Наименование товара), Name_p (Наиме-
нование покупателя) и Kolvo (Количество единиц отпущенного товара). Пер-
вичный ключ построен по полю N_nakl. Таблица находится в отношении «мно-
гие-к-одному» с таблицами Tovar.db и Pokup.db. Для реализации целостности
построены внешние индексы по полям Name_t и Name_p.
Для определения набора данных необходимо на форме разместить компо-
нент TDecisionQuery (
) с именем DecisionQuery1. Установить в его свойство
DatabaseName псевдоним базы данных (в данном случае - это com_sklad), а в свой-
стве SQL определить оператор SELECT, в котором произведено внутреннее со-
единение таблиц Rashod, Tovar и Pokup:
«SELECT P.City, R.Name_p, T.Type, R.Name_t, R.Mes, Sum(R.Kolvo*T.Zena),
AVG(R.Kolvo*T.Zena)
FROM "Pokup.db" P,
INNER JOIN "Rashod.db" R
ON (P.Name_p = R.Name_p)
INNER JOIN "Tovar.db" T
ON (T.Name_t = R.Name_t)
GROUP BY P.City, R.Name_p, T.Type, R.Name_t, R.Mes».
Существуют следующие правила объявления измерений в многомерном
кубе:
- поля, по которым должны строиться измерения многомерного куба, пере-
числяются после ключевого слова SELECT;
- поля, по которым измерений строить не нужно, в операторе SELECT в
качестве возвращаемых полей результирующего набора данных не перечисляют-
ся;
- только после полей-источников для измерений куба перечисляются агре-
гатные выражения (сумма, среднее, число повторений); агрегированные данные
затем будут выводиться по указанным ранее измерениям;
- обязательно использование раздела GROUP BY, в котором необходимо
перечислить все поля, по которым строятся измерения куба, причем в том же по-
рядке, в котором они следуют после ключевого слова SELECT.
Поясним приведенный выше оператор SELECT. Данные берутся из таб-
лиц Rashod.db (ее краткое имя - R), Pokup.db (P) и Tovar.db (Т). Таблицы R и Р
связаны по полю Name_p, а T u R - по полю Name_t.
Измерения будут построены по полям P.City, R.Name_p, T.Type, R.Name_t
и R.Mes. В качестве данных по измерениям будет также выводиться (по выбору)
результат одной из следующих агрегаций: суммарная стоимость отпущенного то-
вара (SUM) или его средняя стоимость (AVG).
Компонент TDecisionQuery похож на TQuery и не имеет отличных от него
свойств, методов и событий. Установим значение True в его свойство Active. Те-
перь набор многомерных данных активен в приложении.