Hi Michael,

mmm, the interface issues are always the most awkward. For a start have you looked at DPMouse? Although I have never used it, its ability to conditionally allow entry to a field could be useful.... I am sure there are some people out there who might be able to add some comment to that...

That absolute easiest, but perhaps less friendly way for the survey repondent, is to have one field for the entry of each question, and to code the entry, so for example every response marks A, B, C, D, E, as in a multiple choice question. In this case, it is easy to display those choices in a calculated field, and also to restrict entry to a specific set of values.

Because there is only one question per page, you have plenty of screen real estate to play with. You could have say a Lickert scale Question with a Calculated Text Field, to display the valid choices,

eg
P1F1:GZZZ9::H (SurveyID)
P1F2:GZZZ9::H (ResponseID)
P1F3:GZ9::N (QuestNum)      P1F4:A50A2::C  (QuestWording)
P1F5:A50A8::C (UserInstructions)
P1F6:U1 (UserResponse)

eg
Q2.  I love DataPerfect.
Please indicate you agreement with the above statement using the following:

A.   Strongly Agree
B.   Strongly Disagree
C.   Neutral
D.   Disagree
E.   Strongly Disagree
F.   Not applicable
and then after entering your response press F9
__

or
Q3  I will be use DP for my next project?
A.   Yes,
B.   No.
and then after entering your response press F9
__

The formula in P1F4 comes directly from the link to the QuestionWording, thru a DataLink on P1F3 on SurveyID, QuestionNum P1F3PxFy

The formula in P1F5 Also looks at the DataLink thru P1F3 to the questions, but then looks something like
IF P1F3 = 0 THEN
cat.t["Thank you for completing this survey";2;", You can use the UpArrow to review your answers and when finished Press F7 to exit"]
ELSE
 IF P1F3PxFz="Lickert" OR P1F3PxFz="ReverseLickert" THEN
cat.t["Please indicate your agreement blah blah...";2;A. Strongly Agree";1;"B. Agree";1;"C.. Blah blah...."]
 ELSE
   cat.t[1; "A. Yes";2;"B. No"]
 ENDIF cat.c[1;"and then after entering your response press F9"]
ENDIF

and then a formula in P1F6 the user response field,

IF P1F3PxPz="Lickert" etc THEN
  IF contains["ABCDEF;"*" P1F6 "*"] THEN
      P1F6
  ELSE
      ""
  ENDIF
ELSE
  IF contains["AB;"*" P1F6 "*"] THEN
      P1F6
  ELSE
      ""
  ENDIF
ENDIF

Its not necessarily pretty for the user, it is nonetheless easy to use, relatively goofproof and simple to implement.

The idea of a binary mask is fine, except that DP does not have convenient tools for manipulating binary values, and bitwise logical operations... But I really do not think they will be needed. I once worked out a formula using a recursive panel link where you could press the Spacebar on a field and toggle its value from blank to X which simulated a windows checkbox, but I for the life of me can't find it. It strikes me that with a few extra bits that it could have worked as a radio button, but it was an awful lot of work.

In fact this is where things like web enabling of DP really come into their own... When I create a survey with DP all that comes out from DP is an XML file which basically just includes the question number, the question working, and the Scale type, and I then use an XSLT template to generate the Question Page, which includes all the questions, and they have radio buttons, or text fields for the user to interact with. I then post the results back of each question, to DP and let a DP report populate all the relevant fields. In this way you do not need to get user interface get too much in the way of good data structures. DP basically forces you into making data compromises or interface compromises, whereas putting it out it the browser and separating database and application, from interface unleashes DP.

Hope this helps,

Good luck
Brian



----- Original Message ----- From: "Michael Iannantuoni" <[EMAIL PROTECTED]>
To: "DataPerfect Users Discussion Group" <[email protected]>
Sent: Friday, December 01, 2006 11:56 PM
Subject: Re: [Dataperf] Questionnaire/Survey with DataPerfect


Thanks Brian,

Numbering now working so I will give some more thought to the answers. I have considered using a calculated field as a check on what is allowed as a response: Yes/No questions if answered with tick boxes could be considered as two-question Lickert (assuming that "normal" Lickerts are also answered with tick boxes). The calculated field would sum the ticks (tick = 1, blank = 0) but would not allow a total other than "1". For multiple option questions, no check would be needed.

Does this make any sense?

I had also considered a binary looking number in the calculated check field which would allow 10 or 01 for Yes/No questions or would allow 10000, 01000, 00100, 00010, 00001 for a five question Lickert.

What do you think?

Regards,

Michael


Brian Hancock wrote:
Hi Michael,

I presume you mean how each question in each survey gets a new number restarting from zero? or how does the question in the response link up the question wording?

I thought point out that I used simple ::IN numbering fields, on each of the panels except the Response Instance panel, just to make it quicker and more obvious. Normally I would use the Ralph Alvy autonumbering system of which I am greatly indebted...

In the STR on each child panel I have a G9::H field initialised to the value "1" for each record on create. That Keeps a Total back to a counter on the parent panel. from the counter I have a Panel Link pointing back the other way. On the child record add "1" to the value in the Keep a Total Target to get the next question number, in either the creation of the question wording, or in the user responding to the survey.

I start with a Parent SurveyMaster table with a Survey ID.

Then on the survey creation side I have a Question Wording Table which includes includes the SurveyID and Question Number, plus the above numbering to generate each question number.

On filling in side I have a Response Table, with its own ID, and a child of that being the Response Instance panel. In the Response instance I use the Survey ID, and another instance of the above numbering system. So for each question the user is answering the Survey ID and a question number exist.
From this I can have a DataLink bypassing the parent, directly to the
Question Wording Panel, and then displayed the Question Wording using SurveyID-QuestionNumber data link When the questions run out, ie their is no more question wordings to link it displays a message thanking them for completing the the survey and asks them press F7 to exit.

That structure is pretty basic, but the real value comes into the fact that during analysis, you do not have the to worry about the hundreds of fields used in the cross tabulation for results that have been suggest you watch out for. You can do any analysis, with a very simple report, and the survey can be from one to any number of questions, without making the report any more complex. Since DP has Average and StdDev formula, you can provide numerical weighting for question, eg 0 for no, 1 for yes, 5-for Strongly agree, 1-for strongly Disagree for Likert scaling, or for reverse Likert (ie 5 for Strongly Disagree to 1 for Strongly Agree) http://en.wikipedia.org/wiki/Likert and create an averaging, which together with tabulations, and StdDev will give you details about the spread of the results. By the way a tip for the simple cross tabbing, is to create a virtual subreport link to each question, and doing the cross tabs average and standard deviation, separately for each question.

(As an aside, the reason you would use both likert and reverse likert, is so that you can group opposites, for instance I could ask agreement with the statement, "I liked xyz", and then later you could ask as a control the opposite, "I disliked xyz", as a reverse likert, so you can group them together as an average value rather and know that your

It may seem unwieldy having each response to each question as a separate record, because when you do the maths it can look bad. I know when I first wrote my first surveying module, I tried the multiple question per record, a panel-ful of questions, and although easy to code, was totally inflexible and hard to report from. When I looked that each survey might be of 2000 or so students, and there might be 25 questions, on each, the thought that I would have 50,000 response instance records,(if I broke it up to such granularity; this seemed daunting, but ultimate very fast and very easy.

That database was written first in Access 97 and then Access 2000, and performed over 10000 surveys (each with different question wording) of an average of 14 question, responded to by an average of 120 students, (ie over 15 million instance records), and the reporting of anyone of survey in single user mode (including generating of graphics) takes less than 5 seconds.

Other than the control of the interface the same methodology could be used with DP.

Good luck

Brian



----- Original Message ----- From: "Michael Iannantuoni" <[EMAIL PROTECTED]>
To: "Dataperfect Mailing List" <[EMAIL PROTECTED]>
Sent: Wednesday, November 29, 2006 9:19 PM
Subject: [Dataperf] Questionnaire/Survey with DataPerfect


Hi Brian,

I am obviously missing something but I can't quite figure out how your question numbering system works in the STR you sent me - any further explanation appreciated.

Best wishes,

Michael

_______________________________________________
Dataperf mailing list
[email protected]
http://lists.dataperfect.nl/mailman/listinfo/dataperf


_______________________________________________
Dataperf mailing list
[email protected]
http://lists.dataperfect.nl/mailman/listinfo/dataperf

_______________________________________________
Dataperf mailing list
[email protected]
http://lists.dataperfect.nl/mailman/listinfo/dataperf


_______________________________________________
Dataperf mailing list
[email protected]
http://lists.dataperfect.nl/mailman/listinfo/dataperf

Reply via email to