Статистика

Материал из Oktell
Перейти к: навигация, поиск

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


Журнал звонков

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


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

ВНИМАНИЕ! При запросе больших объемов данных необходимо учитывать, что это создает дополнительную нагрузку на процессорное время сервера БД и сетевой трафик. В некоторых случаях это может отразиться на качестве разговоров, осуществляющихся через VoIP шлюз сервера.


Полученные результаты доступны для экспорта в текстовые файлы, в файлы MS Excel и HTML. Также доступна выгрузка записей всех разговоров, попадающих под условие фильтра. Необходимо иметь в виду, что выгрузка записей осуществляется в их текущем состоянии. Используйте предварительное микширование, чтобы гарантировать объединение разговоров в один файл.


Диаграммы и настройка

Содержание и количество прочих отчетов не ограничено. По умолчанию модуль содержит ряд предустановленных отчетов, оценивающих основные показатели работы call-центра на основе полной статистики, собираемой системой в отдельную БД. Статистичская БД Oktell хранит данные в виде пространственной модели (OLAP-кубов), данные в которую попадают в процессе работы. Перечень существующих в ней кубов продолжает расширяться. Это и куб коммутаций, попыток звонков по задачам, куб состояний операторов, куб состояний очереди ожидания. Подробнее в разделе Структура пространственной БД.


Пользователи системы могут редактировать существующие отчеты и создавать новые. Также доступны функции экспорта и импорта отчетов, позволяющими вести динамический обмен со сторонними пользователями и разработчиками. На сайте http://www.telsystems.ru на странице зарегистрированных клиентов производится подобный обмен.


Технология OLAP в простом виде позволяет получить из пространственных таблиц любые срезы. Несмотря на простоту использования звездной схемы пространственной БД, большинство сложных отчетов строятся не путем среза данных OLAP-куба, а на основе отдельных различной степени сложности алгоритмов. При создании отчетов администратор баз данных может подключить в качестве источника данных любой запрос как из всех баз данных Oktell, так и из любых других баз данных. Таким же образом можно производить анализ полученных данных в каждом конкретном проекте, строя отчеты под конкретные задачи, в частности на основе таблиц абонентов.


Этот механизм полной произвольности отчетов предоставляет широкие возможности как для администраторов БД, так и для супервизоров.



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


Среди вариантов отображения:


График

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

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


Точки

Одна ось, каждый элемент оси имеет может иметь несколько показателей. На одном изображении разным цветом отображаются точки, соответствующие значениям своих показателей. Масштаб отображения показателей может быть общим или раздельным на усмотрение создателя отчета.

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


Соотношение

Одна ось, каждый элемент оси может иметь несколько показателей, каждый из которых отображается отдельной полосой. 

Вид отчета аналогичен виду модуля «Индикаторы».



Диаграмма

Одна ось, для каждого элемента из которых выводится только один показатель (первый из показателей в запросе). Суммарная величина показателей всех элементов образует 100%. На круговой диаграмме строятся сектора, соответствующие процентным соотношениям.

Поддерживает выгрузку в файл изображения.


Плоскость

Две оси. Отображается только один показатель (первый из показателей в запросе). На пересечении осей (горизонтальной и вертикальной) выводится значение показателя с подсветкой, интенсивность которой соответствует величине соответствующего показателя.

Поддерживает выгрузку в MSExcel в виде транспонированной таблицы


Таблица

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


Динамическая таблица

Аналогична таблице. Оперирует произвольным числом столбцов. Отсутствует раздел назначения типов выходных данных. Все, что возвращает запрос, автоматически выводится на экран, однако за исключением столбцов, имена которых начинаются с символа подчеркивания «_».




Каждый отчет может содержать произвольный фильтр.


Выбрав в списке интересующий отчет, супервизору необходимо задать значения для установленного в отчете фильтра (даты, время, операторы, задачи и произвольный набор других параметров, использованных создателем отчета при его формировании). После нажатия кнопки «Отобразить» отчет примет вид в соответствии с его настройкой на основе данных, полученных из БД. Нажав кнопку «Экспортировать» супервизор может выгрузить отчет в 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