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