Статистика
Модуль статистики call-центра доступен супервизорам, администраторам и другим пользователям, обладающим соответствующим правом. Для пользования модулем необходимо зарегистрироваться в call-центре системы. Служит для построения хронологических отчетов различной формы и содержания.
Журнал звонков
Самым основным отчетом является журнал звонков. Полученная с помощью фильтра, накладываемого на выборку, информация дает возможность прослушать любую из перечисленных в таблице коммутаций. Дважды щелкните на записи для отображения проигрывателя.
Данные, отображаемые пользователю, помимо установленного им фильтра будут отфильтрованы согласно правам на проекты. Информация по задаче в журнале видна только ее супервизорам и имеющим доступ к ее проекту.
ВНИМАНИЕ! При запросе больших объемов данных необходимо учитывать, что это создает дополнительную нагрузку на процессорное время сервера БД и сетевой трафик. В некоторых случаях это может отразиться на качестве разговоров, осуществляющихся через VoIP шлюз сервера.
Полученные результаты доступны для экспорта в текстовые файлы, в файлы MS Excel и HTML. Также доступна выгрузка записей всех разговоров, попадающих под условие фильтра. Необходимо иметь в виду, что выгрузка записей осуществляется в их текущем состоянии. Используйте предварительное микширование, чтобы гарантировать объединение разговоров в один файл.
Диаграммы и настройка
Содержание и количество прочих отчетов не ограничено. По умолчанию модуль содержит ряд предустановленных отчетов, оценивающих основные показатели работы call-центра на основе полной статистики, собираемой системой в отдельную БД. Статистичская БД Oktell хранит данные в виде пространственной модели (OLAP-кубов), данные в которую попадают в процессе работы. Перечень существующих в ней кубов продолжает расширяться. Это и куб коммутаций, попыток звонков по задачам, куб состояний операторов, куб состояний очереди ожидания. Подробнее в разделе Структура пространственной БД.
Пользователи системы могут редактировать существующие отчеты и создавать новые. Также доступны функции экспорта и импорта отчетов, позволяющими вести динамический обмен со сторонними пользователями и разработчиками. На сайте http://www.telsystems.ru на странице зарегистрированных клиентов производится подобный обмен.
Технология OLAP в простом виде позволяет получить из пространственных таблиц любые срезы. Несмотря на простоту использования звездной схемы пространственной БД, большинство сложных отчетов строятся не путем среза данных OLAP-куба, а на основе отдельных различной степени сложности алгоритмов. При создании отчетов администратор баз данных может подключить в качестве источника данных любой запрос как из всех баз данных Oktell, так и из любых других баз данных. Таким же образом можно производить анализ полученных данных в каждом конкретном проекте, строя отчеты под конкретные задачи, в частности на основе таблиц абонентов.
Этот механизм полной произвольности отчетов предоставляет широкие возможности как для администраторов БД, так и для супервизоров.
В основе любого отчета лежит выборка данных, в которой есть одно или несколько полей с показателями, а также поля категорий, по которым эти показатели строятся. В зависимости от типа отображения отчета, категории объединяются в одну или несколько осей.
Среди вариантов отображения:
Каждый отчет может содержать произвольный фильтр.
Выбрав в списке интересующий отчет, супервизору необходимо задать значения для установленного в отчете фильтра (даты, время, операторы, задачи и произвольный набор других параметров, использованных создателем отчета при его формировании). После нажатия кнопки «Отобразить» отчет примет вид в соответствии с его настройкой на основе данных, полученных из БД. Нажав кнопку «Экспортировать» супервизор может выгрузить отчет в MS Excel в том виде, в котором он представлен в его клиентском модуле Oktell.
Создание отчетов должно вестись людьми, имеющими представление о структуре данных.
- Описание. Краткое или полное описание отчета. Доступно супервизору на вкладке диаграммы по щелчку на пиктограмме с вопросительным знаком. В случае, когда супервизору по соображениям безопасности запрещен доступ к вкладке настроек, это единственный способ доступа к описанию.
- Группа. Перечень групп, к которым относится редактируемый отчет. На этапе редактирования прямым заданием текста могут быть созданы новые группы. Используются для фильтрации на вкладке настроек.
- Тип диаграммы. Один из приведенных выше вариантов отображения результатов отчета.
- Тип формирования. Пользовательский режим создания отчетов дает возможность формирования простых агрегирующих срезов OLAP. Доступны также обобщенные механизмы формирования отчетов на основе текста запросов SQL и на основе хранимых процедур.
Для создания отчета на базе текста запроса SQL в режиме редактирования на вкладке «Свойства» выберите тип формирования «Запрос SQL». Перейдите на вкладку «Данные» и заполните поле запроса в соответствии со своей задачей. Запрос может быть практически любой сложности с единственным ограничением: весь запрос будет передан на обработку одним пакетом. При необходимости задайте входные параметры, подставляемые из фильтра. Для создания отчета на базе хранимой процедуры в режиме редактирования на вкладке «Свойства» выберите вариант «Хранимая процедура». После перехода на вкладку данных в выпадающем дереве необходимо выбрать базу и хранимую процедуру (также можно ввести полное имя процедуры в ручном режиме). Автоматически будут загружены все ее параметры, для которых необходимо назначить типы. Параметры попадут в фильтр при построении отчета. Отчеты на основе хранимых процедур позволяют удобно отлаживать сложные запросы, а также использовать весь функционал, доступный для них.
Автообновление отчетов. В некоторых случаях необходимы отчеты, которые постоянно выводят на экран свежие данные. Для этого в свойствах отчета необходимо установить период автообновления. При запуске расчета будет запущен процесс обновления информации (перерасчета) через установленные промежутки времени.
Сохраните запрос, и он сразу же станет доступным для использования.
Для экспорта отчета в файл выделите необходимые отчеты и нажмите кнопку «Экспорт» слева внизу (или выберите соответствующий пункт в контекстном меню), а в предложенном окне укажите путь.
Для импорта отчетов нажмите «Импорт» (или выберите соответствующий пункт в контекстном меню) и в окне выбора файлов выделите один или несколько файлов отчетов. При неуспешном импорте во всплывающем окне будет подведен итог количества успешно и неуспешно импортированных отчетов. Импорт может быть осуществлен с заменой идентификаторов отчетов. В обычном режиме при обнаружении в системе отчета с совпадающим кодом он будет перезаписан. При импорте с заменой идентификатора при обнаружении совпадения код импортируемого отчета заменяется на уникальный новый.
Если в системе установлено очень много отчетов, и они мешают восприятию, часть редко используемых специфических отчетов можно экспортировать и хранить отдельно, удалив из системы.
В запросе могут быть использованы параметры, которые необходимо будет ввести пользователю перед формированием отчета (перед отправкой запроса на выполнение). Все параметры в запросе (как это принято в MS SQL) обозначаются через одинарный символ «@», например @paramname. Используйте их в тексте запроса по своему усмотрению. Помимо переданных извне параметров в запросе могут присутствовать и внутренние переменные, обозначающиеся таким же способом. Отличие переменной от параметра в том, что переменная в тексте запроса однократно объявляется перед использованием с помощью директивы «Declare», например «DECLARE @var1 INT, @var2 nvarchar(200)». Если в запросе отрезок текста начинается с однократного @, и не является переменной, он автоматически считается параметром. Все параметры должны быть объявлены. Для этого используется верхнее поле в интерфейсе настройки отчета. Задайте необходимое число параметров: укажите их идентификаторы, типы и заголовки (для удобного восприятия пользователем при формировании фильтра). Если все корректно, то после нажатия кнопки «Выполнить» запрос считается компилируемым и поля затеняются. Любое изменение в любом из двух полей (поля фильтра и SQL-запрос) автоматически снимет флаг компилируемости.
Следите за тем, чтобы не использовались одинаково именованные параметры. Это не приведет ни к чему адекватному.
Стоит отметить, что каждый тип параметра в фильтре представляет собой переменную определенного типа. Среди них int, nvarchar, bit, datetime. Однако существуют в перечне и более сложные параметры: временнЫе интервалы и врЕменные таблицы (наборы).
Временной интервал представляет для пользователя поле с выпадающим вниз инструментом Oktell «Календарь». Выбрав период, пользователь указывает на две даты – начало и конец интервала. В параметрах фильтра они задаются двумя разными идущими подряд строчками, а отображаются в фильтре единым полем.
Категория «Набор» для пользователя, заполняющего фильтр, представляет собой совокупность галочек соответствующего множества элементов (операторы, состояния, задачи, проекты, результаты задач). Для администратора БД, создающего отчет в виде SQL-запроса подобный идентификатор является не параметром-переменной, а параметром-таблицей с единственным полем «Id» внутри. Именно в ней будут сохранены строки, соответствующие элементам, включенным в набор. В отчетах на базе текста SQL обращение к этим таблицам осуществляется с префиксом «@», в отчетах на базе хранимых процедур - с префиксом «#».
Перечень всевозможных типов параметров с указанием соответствующих им типов в SQL, которые можно использовать в фильтре:
- Целое число (int)
- Вещественное число (float)
- Строка (nvarchar)
- Галочка (bit)
- Галочка с 3 состояниями (int)
- Дата (datetime)
- Интервал дат (начало) (используется в паре с «интервал дат-конец») (datetime, datetime)
- Интервал дат (конец) (используется в паре с «интервал дат-начало») (datetime, datetime)
- Время (datetime)
- Временной интервал (начало) (используется в паре с «временной интервал-конец») (datetime, datetime)
- Временной интервал (конец) (используется в паре с «временной интервал-начало») (datetime, datetime)
- Оператор (uniqueidentifier)
- Набор операторов ( table ( Id uniqueidentifier ) )
- Задача (uniqueidentifier)
- Набор задач ( table ( Id uniqueidentifier ) )
- Проект (uniqueidentifier)
- Набор проектов ( table ( Id uniqueidentifier ) )
- Статус оператора (int)
- Набор статусов операторов ( table ( Id int ) )
- Результат задачи (int)
- Набор результатов задачи ( table ( Id int ) )
- Пользовательский список ( тип, соответствующий запросу пользователя на определение списка, или sql_variant )
- Пользовательский набор ( table ( Id sql_variant ) )
Пользовательские типы фильтров (список и набор) требуют задания SQL-запроса для формирования списка доступных значений. Для задания или изменения текущего запроса какого-либо элемента фильтра с пользовательским типом необходимо щелкнуть в правой части таблицы параметров (в последнем столбце, содержащем «...»), в строке интересующего элемента. В открывшемся окне скорректировать запрос, после чего закрыть окно. Запрос должен представлять собой один пакет (batch) и может иметь любую сложноcть. Однако следует учитывать, что постоянное его выполнение в ходе создания фильтра может привести к длительным задержкам, в случае, если время выполнения созданного запроса достаточно велико. В качестве результатов берется первый возвращаемый набор данных. Первый столбец считается идентификатором, значение (или таблица значений) которого будет передано в основной запрос отчета на этапе его построения. Второй столбец - описания, подставляемые в визуальные компоненты для отображения. А качестве идентификаторов могут выступать любые типы, за исключением TEXT, NTEXT, TIMESTAMP.
Примеры запросов на формирование пользовательского фильтра:
Select [Id], [Caption] From dbo.[ClientTypes]
Declare @dttoday DateTime
Set @dttoday = Cast ( Floor ( Cast ( GetDate() as float ) ) as DateTime )
Select [Id], [Name]
From dbo.[Clients] cl
Inner join dbo.[ClientCalls] cc on cl.[Id] = cc.[IdClient]
Where [LastCall] > @dttoday
Group By [Id], [Name]
После формирования запроса и успешной его проверки выставляется флаг компилируемости. Из получающейся в результате выполнения запроса выборки выделяются столбцы и помещаются в нижнюю часть интерфейса в таблицу «Назначение». Здесь в зависимости от типа выбранного визуального представления запроса необходимо проставить нужным столбцам соответствующие типы и задать описания (для удобного восприятия отчета пользователем)
Среди типов уже рассмотренные выше «Ось» и «Значение». Тип «Не отображается» указывает построителю отчета на отсутствие необходимости использовать поле. Для отчета типа «Плоскость» среди типов вместо «Ось» появляются два «Горизонтальная ось» и «Вертикальная ось». Для табличных отчетов все поля типа «Ось» будут подсвечены в результирующем поле. Не отображаемые поля будут пропущены при выводе данных и при экспорте.
ВНИМАНИЕ! При использовании временных таблиц # в отчетах на основе текстового запроса, необходимо в начале тела запроса помещать команду SET FMTONLY OFF, иначе использование # не будет возможным. В других случаях не рекомендуется использовать указанную команду. При обнаружении некорректных ситуаций при использовании # или других команд рекомендуется преобразовать отчет в хранимую процедуру.
ВНИМАНИЕ! В некоторых отчетах могут понадобиться данные из прикрепленной таблицы абонентов. Операция обращения к ней тривиальна в случае работы с внешней таблицей, и может быть проблематична при работе с локальной таблицей в силу специфики ее хранения (если для нее выбрана автоматическая генерация имени). Это необходимо учитывать при формировании проекта. Для удобства работы с отчетами внутри системы рекомендуются к использованию внешние таблицы, а также локальные таблицы с явным указанием имени и типов полей. Ниже приведен пример кода для формирования временной таблицы с полями Id и Name с данными из произвольной (в том числе и локальной) прикрепленной таблицы абонентов.
-- Формирование временной таблицы @tmpic ( Id, Name ) с данными
-- из прикрепленной к задаче с кодом @idtask таблицы абонентов.
SET FMTONLY OFF
Declare @emptyname nvarchar ( 30 )
Set @emptyname =
Declare @hasnames bit
Set @hasnames = 0
Declare @idlist uniqueidentifier
Select @idlist = ListId From A_TaskManager_Tasks t where Id = @idtask
if ( @idlist is null )
Set @emptyname = '<список удален>'
Declare @abons table ( Id int, Name nvarchar ( 200 ) )
Declare @type int
Declare @query nvarchar ( 4000 )
Declare @jtable nvarchar ( 1000 )
Declare @colname nvarchar ( 50 )
Declare @colid nvarchar ( 50 )
Select @type = Type, @query = Query, @jtable = JoinedTable, @colid = ColumnId, @colname = ColumnName
From A_TaskManager_Lists
Where Id = @idlist
Declare @tmpic table ( Id int, Name nvarchar ( 1000 ) )
if ( Len ( @colid ) > 0 ) and ( Len ( @colname ) > 0 ) and ( not @type is null )
begin
Declare @extquery nvarchar ( 4000 )
if exists ( Select * From tempdb..sysobjects Where Id = object_id ( 'tempdb..#tmpic' ) )
Drop Table #tmpic
Create table #tmpic ( id int, name nvarchar ( 1000 ) )
if ( Len ( @jtable ) > 0 ) and ( @type in ( 1, 2 ) )
begin
Set @extquery = 'Select ' + @colid + ' as Id, Cast ( IsNull ( ' +
@colname + ', + @emptyname +
) as nvarchar ( 1000 ) ) as Name From ' + @jtable
Insert into #tmpic
Exec sp_sqlexec @extquery
Set @hasnames = 1
end
else if ( Len ( @query ) > 0 ) and ( @type = 3 )
begin
Set @extquery = 'Select ' + @colid + ' as Id, Cast ( IsNull ( ' +
@colname + ', + @emptyname +
) as nvarchar ( 1000 ) ) as Name From (' + @query + ')a'
Insert into #tmpic
Exec sp_sqlexec @extquery
Set @hasnames = 1
end
Insert into @tmpic
Select * From #tmpic
Set @emptyname = '<не найден>'
Update @tmpic
Set Name = @emptyname
Where Name =
Drop Table #tmpic
Set @emptyname = '<не задано>'
end
-- Далее можно пользоваться таблицей @tmpic с полями Id и Name