Персональные отчеты

Персональные отчеты

от Павел Бельский -
Количество ответов: 19

Прошу прощения, за, может быть, элементарные вопросы, но я просто новичок в этом деле.

Интересует вопроспо созданию собственных отчетов.
Объясню по порядку. Есть 3 тест который проходит пользователь. У меня есть некоторая шкала оценки пользователя, на каждый тест своя. Из 3-х тестов я делаю общий отчет, на основе каких-то своих вычислений.

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

Большое спасибо заранее за любую информацию.

В ответ на Павел Бельский

Re: Персональные отчеты

от Павел Бельский -

Забыл уточнить, вдруг это повлияет. Вопросы у меня для теста берутся из категорий случайным порядком. Т.е. в тесте допустим 10 категорий по 10 вопросов в каждой категории, и берутся они рандомом. Вот по каждой категории мне тоже нужно брать отчет, как ответил пользователь.

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

Спасибо.

В ответ на Павел Бельский

Re: Персональные отчеты

от Alexandre Scherbyna -

Вот здесь недавно подобный вопрос обсуждался.

В ответ на Alexandre Scherbyna

Re: Персональные отчеты

от Павел Бельский -

Александр, спасибо за ответ.
Тема похожая, но не решает мой вопрос, к сожалению. В этой теме обсуждается вопрос вывода итогов по категориям, что явялется частью решаемой задачи. Мне нужно обработать информацию и по категориям и по  тестам вместе и вывести результат с присвоением пользователю некоторой категории, согласно полученных результатов.
Я так понимаю, что это мне только запросами собирать эту информацию.
Подскажите как можно это организовать? Т.е. нужно как-то добавить кнопку в moodle, и по ней вполнять хитрые манипулиции.

Спасибо.

В ответ на Павел Бельский

Re: Персональные отчеты

от Alexandre Scherbyna -

Павел, внутри теста у вас есть возможность только дать разное число баллов за разные вопросы. Если есть несколько тестов, то итоговую оценку по ним вы можете посчитать в Журнале оценок, выбрав одну из стандартных формул (среднее, средневзвешенное и т.п.) или запрограммировав собственную, нестандартную. Если для написания этой формулы не хватает имеющихся в Moodle функций, можно воспользоваться дополнительным набором, который на этом форуме выложил Вадим Дворовенко. Если вам вообще Журнал оценок не подходит – выводите собственные отчеты, пользуясь модулем, который позволяет выполнить любой запрос к базе данных Moodle.

В ответ на Alexandre Scherbyna

Re: Персональные отчеты

от Павел Бельский -

Александр, вы как всегда с исчерпывающим ответом)
Спасибо. Думаю мне подойдет послединй вариант, я как раз нашел что-то похожее здесь. Но у меня не получилось пока установить.

В ответ на Alexandre Scherbyna

Re: Персональные отчеты

от Павел Бельский -

Александр, спасибо, Ваш модуль подходит, то что надо. Вот только я не могу найти в какой таблице хранятся ответы на пройденный тест. Вроде как сама попытка находится в таблице mdl_quiz_attempts, а ответы забираются из mdl_question_states, но совсем не понятно каким образом они "зашифрованы". Подскажите пожалуйста.

Извините, за, может быть, глупые вопросы, задача стоит срочная, и не совсем всегда время есть почитать литературу, да и с ангглийским не лады, но это решаемо переводчиком.

Спасибо.

В ответ на Павел Бельский

Re: Персональные отчеты

от Alexandre Scherbyna -

Надо создать тест, содержащий несколько простых вопросов, ввести ответы, а потом найти их в базе данных. Легче всего искать ответы в виде текста.

В ответ на Alexandre Scherbyna

Re: Персональные отчеты

от Vadim Tabunshchik -
Изображение пользователя Developers

2Александр:

Легче всего искать ответы в виде текста.

А как вы найдете ответы студента "по тексту", если вопросы ему выдавались из базы случайным образом и вся эта инфа хранится в виде "цифровых ключей" в таблице mdl_quiz_question_instances (и др., с нею связанных)?

2Павел: Задача, кот. Вы хотите решить, мне не понятна, и, думаю, не понятна вообще никому на форуме. улыбаюсь Чего в итоге Вы хотите добиться?  Какой персональный отчет может понадобиться доп-но, если Мул позволяет просмотреть оценик по всем попыткам, ответы на все вопросы по каждой попытке, и это все по всем пользователям?

Цитаты:

  1. У меня есть некоторая шкала оценки пользователя, на каждый тест своя. Из 3-х тестов я делаю общий отчет, на основе каких-то своих вычислений.
  2. по каждой категории мне тоже нужно брать отчет, как ответил пользователь

Вопросы:

  1. Какие такие "свои вычисления"? Почему не создать дополнительную категорию оценивания студента по итогам 3-х тестов стандартными средствами Мудл? Потом итог по этой категории можно учитывать (или не учитывать) в итоговой оценке за курс.
  2. "по каждой категории" - чего? Тестовых вопросов? Тогда и создавайте тест, включая в него вопросы каждой, отдельно взятой категории вопросов. Потом выведете средствами Мудл итог по этим тестам, включив оценки (или их вес, вклад и т. п.) за каждый тест.

нужно как-то добавить кнопку в moodle, и по ней вполнять хитрые манипулиции.

Павел, как Вы одной кнопкой выберете нужную попытку нужного студента, именно те вопросы, кот. выпали студенту в этой попытке, учтете метод оценивания (средняя, макс, мин, последняя, первая) и т. д.?

Посмотрите, насколько сложна схема БД Мудл для тестов (http://docs.moodle.org/dev/Question_database_structure, http://docs.moodle.org/dev/Quiz_database_structure) и остановитесь на стандартных средствах Мудл, позволяющих очень многое, что, на мой взгляд, некоторым пользователям идет даже во вред улыбаюсь

В ответ на Vadim Tabunshchik

Re: Персональные отчеты

от Павел Бельский -

Какой персональный отчет может понадобиться доп-но

мне в итоге понадобиться отчет вида:

пользователь
наименование теста
категория вопросов
общий бал за категорию
 результат (прошел не прошел) общий бал        
                   

Итог: такая-то квалификация, такой то процент, и прочие плюшки.

Примерно так, но это пока поверхностно, он более глубокий будет. Никто не хочет смотреть где правильные ответы, где не правильные, все хотят видеть уже результат в определенном виде.

Тогда и создавайте тест, включая в него вопросы каждой, отдельно взятой категории вопросов

У меня тест должен быть один, т.е. в тесте как в единице есть несколько категорий ответов, в каждой из категорий по 10 рандомных вопросов. Разбить каждую категорию на отдельные тесты нельзя, потому что идет общее ограничение по времени.

По сути у меня только одна попытка для студента есть, и выбирать между попытками мне не нужно. Конкретно вопросы на какие он отвечал мне не нужны, нужно только сколько он заработал на конкретной категории, И выводить всех студентов в отчет.

 

 

В ответ на Павел Бельский

Re: Персональные отчеты

от Vadim Tabunshchik -
Изображение пользователя Developers

идет общее ограничение по времени.

Почему общее время нельзя разбить на составные части "по категориям вопросов"?

Конкретно вопросы на какие он отвечал мне не нужны

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

mdl_question_states, как я понял это ответы пользователя, но не понятно что за поле event, и чем отличается поле grade от raw_grade.

event - это событие, Мудл фиксирует все действия студента, когда он отвечает на вопросы в тесте. К примеру, сначала он выбрал ответ А, потом передумал, и выбрал Б. Вы это тоже будете в своем запросе учитывать?
grade и raw_grade, имхо, как то связаны с event, потому как Мудл выводит и промежуточные резалты по отдельному вопросу в случае того или иного выбора ответа студентом.

PS: Я Вам советую, не майтесь, над тестовой системой Мудл работает не один человек (проф. программист), Вы потратите уйму времени, сил и т. п. и получите результат, кот. можно было получить, переформулировав задачу и применив встроенные средства Мудл. Тем более, судя по приведенной таблице, я всё больше склоняюсь к мысли, что Вы не до конца продумали свою собственную идею.

В ответ на Vadim Tabunshchik

Re: Персональные отчеты

от Павел Бельский -

Почему общее время нельзя разбить на составные части


Потому что дано время общее на выполнение теста. В среднем по 2 минуты на категорию, но пользователь может потратить на 1 категорию 1 минуту, а на 2 категорию 3 минуты.

Вот здесь я вывожу по категориям для конкретного пользователя, для конкретного теста количество правильных ответов (это наработка). 

SELECT
  a.uniqueid `Номер попытки`,
  a.quiz `Номер теста`,
  a.sumgrades `Количество верных ответов`,
  a.userid `ID Юзера`,
  c.name `Наименование категории`,
  SUM(s.raw_grade) `Оценка категории`
FROM
  mdl_quiz_attempts a,
  mdl_question_states s,
  mdl_question q,
  mdl_question_categories c
WHERE
  s.grade  = 1 AND
  a.userid = 4 AND
  a.quiz   = 1 AND
  s.attempt = a.uniqueid AND
  s.question = q.ID AND
  c.id = q.category
GROUP BY c.name
LIMIT 0 , 1000

event - это событие, Мудл фиксирует все действия студента, когда он отвечает на вопросы в тесте.

Т.е. пользователь выбрал вариант, нажал далее, а потом вернулся обратно и выбрал другой вариант и после этого завершил тест? 

Идея не до конца продумана, потому что тот кому нужен этот отчет пока не до конца сформулировали свои желания. Но на текущий момент мне нужно знать балы по каждой категории. Каждая из категорий дает свою оценку для квалисифакции. Допустим В 1 категории от 0-40 процентов набрал - это один бал, во второй категории 0-40% это 2 бала, меньше 80%  значит остальное можно не считать. и т.п.
Боюсь что одним запросом мне не справиться, даже если я выведу результаты по категориям.
Общий подсчет балов надо делать в цикле с проверкой каждой категории, а как сделать это цикл пока не представляю

В ответ на Павел Бельский

Re: Персональные отчеты

от Vadim Dvorovenko -
Изображение пользователя Developers Изображение пользователя Майнтейнер перевода

И ещё совет. Может быть вам не отчёт по тесту сделать, а полностью переписать модуль тестирования? Тут некоторое время назад на форуме возникал вопрос о тестировании по принципу ФЭПО - принцип похожий - вопросы разбиты внутри теста по группам и оценки сначала анализируеются по группе, а уже потом по совокупности групп. Я анализировал для себя эту задачу и сделал вывод, что гораздо лучше скопировать модуь quiz в quizxxx, убрать всё лишнее, создать новые  таблицы простой структуры, переписать логику формаирования теста и анализа результата с нуля, потому как она будет очень простая и получить конкретный результат - тест, созданный по простым правилам и с простой методикой анализа результата. Жаль, времени пока не нашлось.

Когда-то астронома Эддингтона спросили: Сэр, правду ли говорят, что в мире всего три человека, которые понимают теорию относительности Эйнштейна? На это он ответил: Ну Эйнштейн понимает, ну я понимаю, а кто третий? Система тестирования в мудл изменяется с каждой версией. В 2.2 появлось question behaviour, в 2.1 новый механизм хранения логов, в 2.0 интерфейс, флажки, изменеиня формата модулей, в 1.9 появилась история выбора студентом ответов на вопрос. Это всё попытки сделать систему более универсальной, а значит более сложной, запутанной, непредсказуемой. Попытки запихать в один модуль совершенно разную функциональность. В вашей конкретной задаче эта универсальность не нужна,  возможно стоит отказаться от всего этого груза решив задачу с нуля. И догадайтесь, что я отвечу, если меня спросят, правда ли что структуру таблиц тестов moodle понимает в мире три человека?

В ответ на Vadim Dvorovenko

Re: Персональные отчеты

от Павел Бельский -

Сильно написано.
Но к сожалению есть ограничения во времени реализации и нет практики в программировании на php, только в ознакомительных целях. Была поставлена задача на работе, пока пытаюсь решить готовыми решениями.

В ответ на Alexandre Scherbyna

Re: Персональные отчеты

от Павел Бельский -

Я , в принципе, с этого и начал. И за начала отсчета взял путь в оценках результата http://localhost/moodle2/mod/quiz/report.php?id=1&mode=overview.  И начала копать в report.php где нашел один запрос, видимо тот который нужен

"SELECT a.*".
           "  FROM {quiz_attempts} a, {question_states} s".
           " WHERE a.quiz = ? AND s.attempt = a.uniqueid AND s.timestamp = 0"

По ниему начал смотреть таблицы. С mdl_quiz_attempts все понятно, это попытки пользователя,  там в принципе ничего лишнего, хотя о некоторых полях остается только догадываться. А вот mdl_question_states, как я понял это ответы пользователя, но не понятно что за поле event, и чем отличается поле grade от raw_grade.

В ответ на Павел Бельский

Re: Персональные отчеты

от Vadim Dvorovenko -
Изображение пользователя Developers Изображение пользователя Майнтейнер перевода

тексты вопросов хранятся в  `mdl_question`.questiontext

тесты вариантов ответов для вопросов типа типа множестевенный выбор в mdl_question_answers.answer

использование вопроса в тесте учитывается таблицей `mdl_quiz_question_instances` При этом grade указывает оценку за этот вопрос в тесте. 

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

Список вопросов этого теста хранится в  mdl_question_attempts, с привякой к mdl_question_usages

Выбранные пользователем ответы на вопросы этого теста хранятся в  mdl_question_states.

Однако попытка может быть разбита на несколько шагов (mdl_question_attempt_steps) и  при оценивании ещё используются какие-то сессии (mdl_question_sessions, тоже привязана к попытке)

Ещё можно прочитать комментарии к таблицам в moodle/lib/db/install.xml,  там же в незамысловатом формате описаны связи между ними (foreign keys). Плюс ещё документация разработчика.

Плюс тщательное изучение исходного кода. Плюс включение отладчика на php и трассировка действий при создании теста, при сохранении / оценивании попытки

После всего этого должно быть понятно, что создать отчёт по тесту можно только очень чётко представляя, что же вы именно хотите получить, потому что совершенно просто выбрать из базы похожие, но не те данные.

В ответ на Vadim Dvorovenko

Re: Персональные отчеты

от Павел Бельский -

потому что совершенно просто выбрать из базы похожие, но не те данные


Фраза сразу заставила призадуматься. И после обсуждения с начальством, выбил следующий вариант. Выгржать в EXCEL результаты таблицы, а потом макросом или еще програмкой создавать отчет в том виде который нужен. Но так как у меня весь тест разбит на 3 теста, появляется следующий вопрос, можно ли стандартными методами объединить в общий отчет результаты по 3 тестам, чтобы не клацать 3 раза для получения отчета по каждому тесту.

Спасибо за любую информацию.

В ответ на Павел Бельский

Re: Персональные отчеты

от Павел Бельский -

Использую  Block: Configurable reports но появилась проблема - не могу настроить роли для просмотра отчет этого модуля. Захожу в настройку прав просмотра этого блока выбираю роль для которой хочу назначить, проставляю все на разрешено, сохраняю, результата ноль. Проверяю права по пользователю - все разрешено, а блок все равно не отображается. У админа все отображается, хотя такие же настройки. 
Перекидываю пользователя на роль админа, тогда видит этот отчет.
Скорпировал роль админа, чтобы потом посмотреть на какой части обрубается возможность просмотра, но даже на этом этапе уже не срабатывает. НА скопированной роли так же не  видно этого блока...
Не пойму даже в чем может быть проблема.