Hi Brian,
Thanks again for your comments & ideas.
What I have done so far is this:
The questionnaire contains multiple choice question with one having 14
options!
I have set up in the Response Panel 14 U1 fields as "tick boxes" and
each has associated with it, and next to it, a calculated A1 field. In
the QuestionWording Panel I list the Response labels and have a field
which indicates how many there are. This is used in the Response Panel
to set the A1 fields to either "" or ASCII 249, the marker used by
DPMouse to skip a field with this next to it (it can be left or right).
Thus in a Yes or No response only the first two "tick boxes" are
available and in a five question Lickert only the first five etc. The
Response Labels are displayed above their appropriate "tick boxes". If
the number of Responses allowed is set to zero all "tick boxes" are
unavailable but a free form text field is accessible.
At present the "tick boxes" accept either letter which becomes an "X" or
space bar to clear it. I tried toggling with the space bar but couldn't
get it to work even using a recursive link. DP seems to sometimes not
differentiate between ""(null) and " " (space). If you can find your
formula I'd be eternally grateful.
Using a web front end is something I may look at later but I would like
to get something working in DP first even though it may not be elegant!
Regards,
Michael
Brian Hancock wrote:
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
_______________________________________________
Dataperf mailing list
[email protected]
http://lists.dataperfect.nl/mailman/listinfo/dataperf