Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.02.19;
Скачать: CL | DM;

Вниз

Помогите со сводными таблицами   Найти похожие ветки 

 
jiny   (2005-12-20 09:01) [0]

Есть программа по проведению социологических опросов.
Схема работы проста :
Создается тема опроса -> к ней вопросы -> к каждому из вопросов забиваются ответы.
Причем вопросы есть простые, и есть "константные", т.е.
простые забиваются вручную, соответственно - ответы тоже вручную, данные о "константных" вопросах находятся в табличке
CONSTANT_LIST, где указано : 1) название вопроса, 2) таблица, откуда брать предполагаемые ответы, название поля в таблице анкет (например если вопрос "Ваш возраст ?", таблица "male_status", а поле в анкетах "id_malestatus")
Список вопросов находится в таблице "questions", ответы к ним "answers"
Вот структуры таблиц :

<themes>

ID integer not null
name_theme varchar(250) COLLATE PXW_CYRL


questions вопросы

   ID                 INTEGER NOT NULL,
   REAL_DATE_CREATED  DATE,
   ID_CONSTANT        INTEGER DEFAULT 0,
   CONSTANT_TABLE     VARCHAR(50) COLLATE PXW_CYRL,
   ID_THEME           INTEGER NOT NULL,
   NAME_QUESTION      VARCHAR(250) COLLATE PXW_CYRL,
   COMMENTS           VARCHAR(100) COLLATE PXW_CYRL,
   ISACTIVE           SMALLINT DEFAULT 1,
   PORYADOK           INTEGER


answers предлагаемые ответы

   ID                 INTEGER NOT NULL,
   ID_QUESTIONS       INTEGER,
   NAME_ANSWER        VARCHAR(250) COLLATE PXW_CYRL,
   ISACTIVE           SMALLINT DEFAULT 1,
   REAL_DATE_CREATED  DATE,
   COMMENTS           VARCHAR(100) COLLATE PXW_CYRL,
   PORYADOK           INTEGER,
   ID_CONSTANT        INTEGER DEFAULT 0,
   TABLE_CONSTANT     VARCHAR(50) COLLATE PXW_CYRL,
   FIELD_CONSTANT     VARCHAR(50) COLLATE PXW_CYRL


ankets анкеты

   ID                    INTEGER NOT NULL,
   REAL_DATE_CREATED     DATE,
   DATE_ANKET            DATE,
   AGE                   INTEGER,
   ID_THEME              INTEGER,
   ISMALE                SMALLINT DEFAULT 1,
   ID_PROFESSION         INTEGER,
   ID_NATION             INTEGER,
   ID_MARRIED            SMALLINT DEFAULT 0,
   ID_OBRAZOVANIE        INTEGER,
   ID_ORGANIZATION_TYPE  INTEGER,
   ID_TERRITORY          INTEGER,
   ID_INVALID            INTEGER,
   ID_DOHOD              SMALLINT,
   COMMENTS              VARCHAR(100) COLLATE PXW_CYRL,
   RID                   VARCHAR(20) NOT NULL COLLATE PXW_CYRL,
   ISACTIVE              SMALLINT DEFAULT 1


anket_answers ответы к анкетам

   ID_ANKET           INTEGER,
   REAL_DATE_CREATED  DATE,
   ID_QUESTIONS       INTEGER,
   ID_ANSWER          INTEGER


CONSTANT_LIST список "константных" вопросов

   ID              INTEGER NOT NULL,
   PORYADOK        INTEGER,
   NAME_Q          VARCHAR(100) COLLATE PXW_CYRL,
   SHORT_NAME      VARCHAR(50) COLLATE PXW_CYRL,
   NAME_TABLE      VARCHAR(50) COLLATE PXW_CYRL,
   FIELD_CONSTANT  VARCHAR(50) COLLATE PXW_CYRL


Нужно чтобы программа делала сводную таблицу
в разрезе ответов одного из  константных вопросов, например :
Например по вопросу "Ваш возраст :"
--------------------------------------------------------------
               от 17 до 29 лет |от 30 до 45 лет|от 46 до 61 года|
--------------------------------------------------------------
I. Кто убил кролика Роджера ?
--------------------------------------------------------------
1. Багз Банни       5%                      7%                88%
2. Даффи Дак      9%                      8%                81%
3. Затрудняюсь
ответить             86%                    5%                9%
--------------------------------------------------------------
Как сделать универсальный алгоритм для любого из "константных" вопросов ?
Помогите.

Заранее спасибо


 
jiny   (2005-12-20 09:02) [1]

" Помогите со сводными таблицами " ? т.к. я буду выдавать конечные отчеты в Excel


 
Sergey13 ©   (2005-12-20 10:05) [2]

Что-то слабо я понял про твои "константные" вопросы. Что это и с чем их едят? На пальцах, если не трудно.


 
jiny   (2005-12-20 10:46) [3]

Константные вопросы это те вопросы, которые встречаются практически во всех анкетах (пол, возраст, социально-профессиональные категории, национальность и т.д.)
По сути это такие же вопросы как и все остальные только для удобства пользователей, возведены в статус "справочников", где ответы это записи "справочника". Сделано это для того, чтобы добавлять новые "Константные" вопросы без изменения кода программы.


 
Курдль ©   (2005-12-20 10:54) [4]


> Сделано это для того, чтобы добавлять новые "Константные"
> вопросы без изменения кода программы.


А разве нельзя добавлять любые вопросы без изменения кода программы?
Разве не для того существуют БД?
:(


 
Sergey13 ©   (2005-12-20 11:00) [5]

Честно говоря, мне не шибко нравится:
1. Смешивание 2 типов вопросов/ответов в одной структуре.
2. Способ обработки "константных" вопросов, когда надо вколачивать в таблицу имена таблиц и полей.
Я бы наверное пошел по другому пути. Для "константных" сделал бы отдельную структуру, позволяющую дополнение. Ведь по сути это справочники.


 
jiny   (2005-12-20 14:10) [6]

Sergey13 ©   (20.12.05 11:00) [5]
Знаешь, ты мыслишь точно также, как и я в начале проекта,
но некая госструктура, выдвинула требование, чтобы было
присутствие неких "константных" вопросов. Сказано - сделано, мне не
сложно, да и прикольно немного. Только вот неЗАДАЧА - нужно чтобы
данные(ответы на вопросы) можно было формировать в разрезе любого из так называемых "константных" вопросов(параметров или как угодно).
Вручную я сделал формирование по всем вышеуказанным параметрам, т.е. в разрезе каждого параметра, с тем чтобы не париться, когда будут создавать новые (другие) "константные" вопросы.


 
evvcom ©   (2005-12-20 14:22) [7]

Твои "константные" и "не константные" вопросы по сути ничем не отличаются. Слей их воедино, и уж если существует такое требование, добавь просто флаг в таблице. А так какая разница, откуда родом этот вопрос, из анкеты или придуманного кем-то опросом?


 
Sergey13 ©   (2005-12-20 15:12) [8]

2[7] evvcom ©   (20.12.05 14:22)
Так у него вроде так и есть. 8-)
А отличаются они как раз по сути. Надо обрабатывать одни в разрезе других. Я бы разделил наверное.
ИМХО все.


 
evvcom ©   (2005-12-20 15:25) [9]


> Так у него вроде так и есть. 8-)

А мне показалось, что ни фига не так. Разные таблицы ankets и CONSTANT_LIST. В анкетах ограниченный список (идентификаторов?) вопросов (профессия, национальность и пр.) А стукнет им в голову дополнить этот список еще одним (двумя, тремя, ...) "стандартными" вопросами и что? Менять структуру и код клиента? Хотя по сути это те же вопросы, что и "Кто убил кролика Роджера?"


 
jiny   (2005-12-20 16:29) [10]

Sergey13 ©   (20.12.05 15:12) [8]
Спасибо, что хоть ты понял меня, у меня на самом деле и те и другие, что видно по структуре табл.Questions, слиты в одной таблице, различающейся по флагу ID_constant
Вот что мне нужно (пример) :
Тема : Постэлекторат
Вопросы :
I. Вы довольны результатами выборов ?
Ответы к I:
 1. Да, в полной мере.
 2. Нет
 3. Я не могу судить объективно.
 4. Затрудняюсь ответить
II. Вы были свободны в выборе своего кандидата ?
 1. Да, это был мой осознанный выбор.
 2. Нет, я был не свободен в выборе кандидата.
 3. Затрудняюсь ответить
III. Ваш пол :
 1. Мужской.
 2. Женский.
IV. Ваш возраст :
 1. от 18 до 29 лет.
 2. от 30 до 45 лет.
 3. от 46 до 61 года
 4. от 61 и старше
V. Ваша социально-профессиональная категория :
 1. Рукодитель предприятия, организации
 2. Работник промышленности.
 3. Работник науки, культуры и образования.
 4. Работник милиции, судов.
 5. Военный

Так вот, III,IV,V вопросы - это константные вопросы, ответы к которым беруться из справочников, а I,II вопросы - это обычные вопросы, ради которых и проводится соц.исследование.
В таблицу "Вопросы"(questions) они заливаются вместе, с той лиш разницей, что обычные вопросы имеют в поле ID_CONSTANT=0, а "константные" в поле ID_CONSTANT=ID строки в таблице CONSTANT_LIST, и в ответах - также, ID_CONSTANT=ID элемента в соответствующем записи справочнике (например если в answers ID_CONSTANT=3, table_constant="ages",field_constant="age" это значит, что id=3 в справочнике возрастных групп, поле "age" находиться в табл. ankets, чтобы потом можно было как то запись идентифицировать. Вот .
Мне нужно чтобы отчеты формировались с перечислением I и II вопросов
в разрезе III, либо IV, либо V вопросов.


 
evvcom ©   (2005-12-20 16:42) [11]


> Мне нужно чтобы отчеты формировались с перечислением I и
> II вопросов
> в разрезе III, либо IV, либо V вопросов.

И все равно это не повод, чтобы их так разносить. Флаг поставь. А как ты будешь SQL писать со своими table_constant="ages"? Опять динамически?


 
Sergey13 ©   (2005-12-20 16:53) [12]

2[10] jiny   (20.12.05 16:29)
Интересная задача. Тут думать надо. 8-) А времени нет. 8-(
В конечном итоге тебе надо добиться группировки по "обычному" вопросу и "константному", а агрегатом должен быть "обычный" ответ.
Может тебе просто избавиться от CONSTANT_LIST? Зачем она - я так до конца и не понял. Есть вопрос и к нему ответы. Вопросы с признаком такой/сякой. Ну и фильтровать по этому признаку.
И еще. Я бы подумал о том, что бы привязку вопроса к теме опроса вынести в отдельную таблицу для того, что бы можно было "констрейнты" привязывать много раз к разным темам (они же наверняка повторяются).


 
jiny   (2005-12-20 20:19) [13]

Sergey13 ©   (20.12.05 16:53) [12]
>>И еще. Я бы подумал о том, что бы привязку вопроса к теме опроса
>>вынести в отдельную таблицу для того, что бы можно было "констрейнты"
>>привязывать много раз к разным темам (они же наверняка повторяются).
Согласен, я уже думал об этом, только пока это не первоочередная задача.
Насчет своего основного вопроса. я сделал возможность выбора одного из доступных для конкретной темы "К" вопросов, с тем чтобы формировать данные в разрезе выбранного. пока так.На ум ничего больше не приходит

>>Может тебе просто избавиться от CONSTANT_LIST? Зачем она - я так до
>>конца и не понял. Есть вопрос и к нему ответы. Вопросы с признаком
>>такой/сякой. Ну и фильтровать по этому признаку.
constant_list - это промежуточная таблица, где РЕГИСТРИРУЮТСЯ все будущие "К" вопросы, помимо этого она служит для настройки "К" вопросов, которые будут использоваться в темах, чтобы исключить ненужные.

evvcom ©   (20.12.05 16:42) [11]
>>И все равно это не повод, чтобы их так разносить. Флаг поставь. А как ты
>>будешь SQL писать со своими table_constant="ages"? Опять динамически?
понимаешь, дляпользователя, равно как и для программы абсолютно по барабану "константный" это вопрос или нет, это важно для дальнейшей логики отчетов, флаг причастности или непричастности к "К" уже стоит,
а забил я "к" вопросы к обычным вопросам, т.к. на основе конкретной темы, сначала формируется анкетный лист, т.е. для живого человека, чтобы он мог ручечкой шариковой пометки сделать. Стараюсь максимально автоматизировать процесс.



Страницы: 1 вся ветка

Текущий архив: 2006.02.19;
Скачать: CL | DM;

Наверх




Память: 0.52 MB
Время: 0.047 c
1-1137681618
beglec
2006-01-19 17:40
2006.02.19
TSocket in Delphi 7 как их подключить?


2-1138963088
pvm
2006-02-03 13:38
2006.02.19
DLL


1-1137591191
kyn66
2006-01-18 16:33
2006.02.19
Сложный запрос по таблице


2-1138553263
Balex
2006-01-29 19:47
2006.02.19
Как удалить EXE-файл, который меня запустил?


2-1138564775
nickmas
2006-01-29 22:59
2006.02.19
Excel