Пользовательские запросы, сегментация и агрегирование данных о сеансах
Ключ-АСТРОМ собирает подробные данные сеанса пользователя каждый раз, когда пользователь взаимодействует с вашим контролируемым приложением. Эти данные включают все действия пользователя и данные о производительности высокого уровня. Используя Ключ-АТСРОМ API или язык запросов сеансов пользователя Ключ-АСТРОМ (USQL), вы можете легко выполнять мощные запросы, сегментации и агрегации этих собранных данных. Чтобы помочь вам, в этой теме приведены подробные сведения о ключевых словах и функциях, синтаксисе, работе с таблицами мониторинга реальных пользователей, автоматизированных запросах и многом другом.
Язык запросов сеансов пользователей — это не SQL, и Ключ-АСТРОМ не хранит данные сеансов пользователей в реляционной базе данных. Язык запросов сеансов пользователей — это язык запросов, специфичный для Ключ-АСТРОМ, хотя он и опирается на некоторые концепции SQL, а синтаксис похож, что упрощает начало работы.
Выберите один из подходов:
Запросы сеансов пользователя через веб-интерфейс Ключ-АСТРОМ
- Перейдите в раздел SQL - запросы сессий .
- Введите запрос и нажмите на кнопку Выполнить запрос .
Выбор таймфрейма с помощью USQL
С помощью селектора таймфрейма данные сеанса пользователя можно фильтровать на основе выбранного таймфрейма анализа. Выберите новый таймфрейм.
Элементы управления выбором таймфрейма
Глобальный селектор временных рамок служит временным фильтром, который в большинстве случаев позволяет вам выбрать определенный временной интервал анализа, который сохраняется на всех страницах и в представлениях продуктов по мере навигации по вашему анализу.
- Вкладка Пресеты содержит список всех доступных стандартных таймфреймов. Выберите один, чтобы изменить свой таймфрейм на этот предустановленный.
- Вкладка Custom отображает календарь. Щелкните начальный день, щелкните конечный день, а затем щелкните на кнопку Применить, чтобы выбрать этот диапазон дней в качестве таймфрейма.
- Выбранные интервалы календаря устанавливаются на окончание в начале следующего дня (со временем, установленным на
00:00
). Например, если вы выбираете в календаре период с 3 по 4 сентября, временной интервал начинается 3 сентября в момент времени00:00
и заканчивается 5 сентября в момент времени00:00
, поэтому вы никогда не пропустите последнюю минуту временного диапазона. Вы можете редактировать отображаемое время.
- Выбранные интервалы календаря устанавливаются на окончание в начале следующего дня (со временем, установленным на
- Вкладка Недавний отображает недавно использованные таймфреймы. Выберите один, чтобы вернуться к этому таймфрейму.
- Элементы управления < > сдвигают временной диапазон вперед или назад по времени. Шаг — это длина исходного таймфрейма. Например, если текущий таймфрейм
Последние 2 часа
(двухчасовой диапазон, заканчивающийся сейчас), щелкните < , чтобы сместить таймфрейм на два часа назад, на-4h to -2h
(двухчасовой диапазон, заканчивающийся два часа назад). - Наведите курсор на таймфрейм, чтобы увидеть время начала, продолжительность и время окончания.
Выражения выбора таймфрейма
Если выбрать текущий таймфрейм в строке меню, отобразится редактируемое выражение таймфрейма.
- Если читать слева направо, выражение таймфрейма имеет начальное время, оператор
to
и конечное время. - Если время окончания явно не указано, то подразумеваются
to
иnow
. Например,-2h
это одно и то же-2h to now
. - Поддерживаемые единицы:
s
,m
,h
,d
,w
,M
,q
,y
(также можно использовать целые слова, такие какminutes
иquarter
)
Примеры выражений таймфрейма | Значение |
---|---|
today
|
От начала сегодняшнего дня до начала завтрашнего дня. |
yesterday
|
От начала вчерашнего дня до начала сегодняшнего дня. Нравится -1d/d to today .
|
yesterday to now
|
С начала вчерашнего дня по текущее время сегодня. |
previous week
|
Предыдущие семь полных дней. Если сегодня понедельник, вы получаете "предыдущий понедельник по предыдущее воскресенье (вчера)". |
this year
|
Текущий календарный год, с 1 января текущего года 00:00 по 1 января следующего года 00:00 .
|
last 6 weeks
|
Последние 42 дня (6 недель * 7 дней), заканчивающиеся сейчас. Эквивалентно -6w to now .
|
-2h
|
От 2 часов (120 минут) назад до текущего времени (now уже подразумевается). Эквивалентно Last 2 hours и -2h to now .
|
-4d to -1h30m
|
От 4 дней (96 часов) назад до 1,5 часов назад. |
-1w
|
Последние 7 дней (168 часов), с этого времени 7 дней назад до текущего времени (now ). Эквивалентно -7d и -168h .
|
-1w/w
|
С начала предыдущей календарной недели по текущий момент времени (сейчас).
В общем случае, |
-1w/w + 8h
|
Начиная с начала прошлой недели плюс 8 часов (8:00 утра понедельника).
|
-1d/d+9h00m to -1d/d+17h00m
|
Часы работы вчера: с 09:00 до 17:00 (с 9:00 до 17:00). |
2020-08-16 21:28 to 2020-08-19 10:02
|
Абсолютный диапазон, состоящий из абсолютных дат и времени начала и окончания в YYYY-MM-DD hh:mm формате .
|
1598545932346 to 1598837052346
|
Миллисекундные временные метки Unix. |
Автозаполнение с помощью USQL
Автозаполнение доступно для операторов запроса на основе текущего введенного текста. Автозаполнение является контекстно-зависимым и основано на текущем контексте курсора. Оно разумно предугадывает, какой текст вы захотите ввести следующим.
Информация автозаполнения, возвращаемая API, содержит список предложений, в котором наиболее вероятные значения отсортированы в верхней части списка, а также необходимые корректировки текста запроса и результирующее положение курсора после корректировки. Это позволяет вам поместить курсор в более полезную позицию после добавления текста, например, внутри скобок при выборе функции.
Список полей содержит только допустимые поля или функции для выбранной таблицы, а его контекстная зависимость отображает только числовые поля, когда курсор находится внутри вызова функции, которая работает только с числовыми данными, например SUM()
, или AVG()
.
Значения полей предлагаются только для полей, основанных на перечислении. Фактический запрос к Elasticsearch для автозаполнения не выполняется.
API среды Ключ-АСТРОМ
Вы можете выполнять вызовы API с помощью вашего предпочтительного клиента. Найдите соответствующую документацию API в разделе API сеансов пользователя .
Для выполнения этих вызовов вам необходимо разрешение User sessions (DTAQLAccess
), назначенное вашему API-токену. Чтобы узнать, как получить и использовать ваш токен, см. Ключ-АСТРОМ API - Токены и аутентификация.
Таймфрейм API среды
Данные сеанса пользователя всегда должны быть доступны с таймфреймом. Доступ к большим таймфреймам может быть сложен из-за большого количества потенциальных одиночных совпадений с запросами.
Таймфреймы обычно не являются частью самого запроса, а отправляются в отдельных параметрах вызова API. Подробности можно найти в документации API.
Однако вы можете использовать поля времени, такие как starttime
и endtime
для выбора временных рамок. Вы также можете использовать эти поля в функциях, например, чтобы узнать, в какое время дня начинается большинство сеансов пользователей, как в HOUR(starttime)
.
Ключевые слова и функции
Для доступа к данным сеанса пользователя определены следующие ключевые слова:
AND
, AS
, ASC
, BETWEEN
, BY
, DESC
, DISTINCT
, FALSE
, FROM
, GROUP
, IN
, IS
, JSON
, LIMIT
, NOT
, NULL
, OR
, ORDER
, SELECT
, STARTSWITH
, TRUE
, WHERE
, LIKE
, FILTER
Для доступа к данным сеанса пользователя определены следующие функции:
SUM
, MAX
, MIN
, AVG
, MEDIAN
, COUNT
, YEAR
, MONTH
, DAY
, HOUR
, MINUTE
, DATETIME
, TOP
, PERCENTILE
, KEYS
Ключевые слова, функции и имена столбцов нечувствительны к регистру. Соответствия строк в условиях WHERE
чувствительны к регистру.
Синтаксис
Типичный запрос строится из следующих ключевых слов:
SELECT <columns> FROM <table> WHERE <condition> GROUP BY <grouping> ORDER BY <ordering>
Однако единственными обязательными элементами являются SELECT <columns>
и FROM <table>
.
Пример
SELECT browserType, userId, city, AVG(userActionCount) AS "Average user action count", AVG(duration) AS "Average duration", count(*) AS "Sessions", SUM(totalErrorCount) AS "Errors" FROM usersession WHERE ip between '52.179.11.1' and '52.179.11.255' GROUP BY browserType, userId, city
Часто используемые ключевые слова
SELECT <columns>
Выбирает один или несколько столбцов из указанной таблицы данных или выполняет функции агрегации из набора поддерживаемых функций.
columns: [DISTINCT] <column>, <column>, ... | function(<parameter>) |
<column> AS <alias> | JSON
Пример
SELECT country, city, browserfamily FROM usersession
SELECT DISTINCT country, city, useractioncount FROM usersession
SELECT country, city, avg(duration) AS average FROM usersession GROUP BY country, city
FUNNEL
Позволяет использовать предопределенный формат FUNNEL для запроса. Может использоваться для построения графика потока определенных действий пользователя. Также может сочетаться с пользовательскими свойствами сеанса и другими условиями.
Он изменяет синтаксис любого запроса на следующий:
SELECT FUNNEL (<condition> AS <alias>, <condition>, ...) FROM <table> WHERE <condition>
- Для
FUNNEL
запросов не используйте функцииSELECT *
или ключевые слова, такие какJSON
. - В настоящее время в
FUNNEL
не допускаются операторы ,GROUP BY
,ORDER BY
или .LIMIT
FUNNEL
не поддерживает упорядочивание. Нет гарантии, что этоuseraction1
произошло раньшеuseraction2
дляSELECT FUNNEL (useraction.name = "useraction1", useraction.name = "useraction2") FROM usersession
запроса. Этот запрос является эквивалентом только двухSELECT
операторов, как поясняется в примерах ниже.
Пример 1
Вместо выполнения следующих трех запросов:
SELECT COUNT(*) FROM usersession where useraction.name = "AppStart"
SELECT COUNT(*) FROM usersession where useraction.name = "AppStart" AND useraction.name = "searchJourney"
SELECT COUNT(*) FROM usersession where useraction.name = "AppStart" AND useraction.name = "searchJourney" AND useraction.name = "bookJourney"
Следующий запрос возвращает тот же результат:
SELECT FUNNEL (useraction.name = "AppStart", useraction.name = "searchJourney", useraction.name = "bookJourney")
FROM usersession
Пример 2
Чтобы просмотреть количество пользователей, успешно завершивших bookJourney
:
SELECT FUNNEL (useraction.name="login", useraction.name = "searchJourney", useraction.name = "bookJourney")
FROM usersession
FROM <table>
Вы можете указать только одну таблицу. Таблицы для данных сеанса пользователя следующие.
usersession
содержит информацию о сеансах пользователей .useraction
хранит данные о действиях пользователя .userevent
предоставляет информацию о событиях пользователя , таких как изменение страницы или события ярости.usererror
содержит больше данных о событиях ошибок , т.е. об ошибках и сбоях.
Пример
SELECT country, city, browserfamily FROM usersession
SELECT name, starttime, endtime, duration FROM useraction ORDER BY duration DESC
WHERE <condition>
Вы можете объединить несколько условий, используя булеву логику и скобки в WHERE
предложении, например, WHERE (city = 'Barcelona' AND country = 'Spain')
чтобы включить только города с названием Барселона, которые находятся в Испании.
condition: (condition AND condition) | (condition OR condition) | field IN(...) |
field IS <value> | field IS NULL | field = <value> | field > <value> | field < <value> |
field <> <value> | field IS NOT <value> | field BETWEEN <value> AND <value> | ...
Однако только правая часть условий может содержать значение, поэтому сравнивать два поля нельзя.
Пример
SELECT country, city, browserfamily FROM usersession WHERE country = 'Albania' AND screenWidth > 1000
SELECT TOP(country, 20), TOP(city, 20), TOP(duration, 10), AVG(duration) AS average
FROM usersession
WHERE duration BETWEEN 1000 AND 2000
GROUP BY TOP(country, 20), TOP(city, 20), TOP(duration, 10)
GROUP BY <grouping>
При агрегировании полей необходимо указать соответствующие ключевые слова GROUP BY
, указывающие, как будет выполняться агрегирование.
grouping: <column>, ...
Пример
SELECT city, count(*) FROM usersession GROUP BY city
SELECT MONTH(starttime) as month, count (*) FROM usersession
GROUP BY month
LIMIT <limit>
Позволяет ограничить количество возвращаемых результатов. Например, вы можете выбрать только 10 лучших результатов, когда это объединено с заказом.
Фреймворк всегда применяет верхний предел для предотвращения перегрузки системы. Если не используется LIMIT
, по умолчанию возвращается 50 результатов.
Пример
SELECT city, starttime FROM usersession ORDER BY starttime DESC LIMIT 10
LIMIT
может также использоваться для увеличения количества результатов в случаях, когда LIMIT
условие отсутствует, поскольку тогда применяется ограничение по умолчанию.
ORDER BY <ordering>
Позволяет упорядочить результаты по столбцам, в порядке возрастания или убывания. Порядок будет возрастающим, если не указано иное.
Упорядочение выполняется по частоте. Например, 5 верхних возвращаемых городов являются наиболее часто встречающимися. Указав поле в предложении ORDER BY
, вы можете добавить значение сортировки для строк, дат и чисел.
Сортировка по enums
или по function values
таким как AVG
и SUM
упорядочивает возвращаемые результаты, но вы можете не получить верхние элементы. Например, если вы запросите верхние 5 результатов по AVG(duration)
, запрос только 10 может добавить результаты даже наверху.
ordering: <column> ASC | <column> DESC | <column>, ...
Пример 1
SELECT useraction.name, starttime FROM usersession ORDER BY starttime DESC
Пример 2
Вы можете упорядочить подсчеты, добавив ключевое слово DISTINCT
.
SELECT DISTINCT city, COUNT(*) FROM usersession ORDER BY COUNT(*) DESC
Пример 3
SELECT avg(duration) AS average, count(*) as number, day(startTime) as startDay
FROM usersession where duration < 2000
GROUP BY startTime
ORDER BY average
или
SELECT avg(duration) AS average, count(*) as number, day(startTime) as startDay
FROM usersession where duration < 2000
GROUP BY startTime
ORDER BY number DESC, average ASC
LIKE
Позволяет сравнивать данные с выражением, используя подстановочные знаки для соответствия указанному шаблону. Можно использовать следующие символы:
%
или*
: Соответствует любой строке из 0 или более символов?
: Соответствует любому отдельному символу
Строковые значения чувствительны к регистру. Например, SELECT city FROM usersession WHERE userId LIKE "*astromkey*"
соответствует me@dynatrace.com
, но не me@dynaTrace.com
. Чтобы избежать этого, используйте подстановочный знак ?
, как в этом примере:SELECT city FROM usersession WHERE userId LIKE "*astromkey*"
Экранирование подстановочных знаков
Чтобы экранировать подстановочный символ, добавьте перед ним обратную косую черту \
. Например, \%
, \*
, и \?
рассматриваются как стандартные строковые литералы %
, *
, и ?
.
Чтобы экранировать сам обратный слеш \
, добавьте перед ним еще один обратный слеш \
. Полученная запись \\
рассматривается как один обратный слеш \
.
Если вы добавляете две обратные косые черты \\
перед подстановочным символом (что приводит к записям типа \\%
, \\*
или \\?
), такая запись рассматривается как одна экранированная обратная косая черта \
и один подстановочный символ. Например, \\*
запись соответствует \abc
, \123ABC
или \
.
Краткое описание того, как экранировать подстановочные знаки:
Вход | Рассматривается как | Совпадения |
---|---|---|
\%
|
%
|
%
|
\*
|
*
|
*
|
\?
|
?
|
?
|
\\
|
\
|
\
|
\\%
|
\ и любая строка из нуля или более символов
|
\abc , \123ABC , \ , и т. д.
|
\\*
|
\ и любая строка из нуля или более символов
|
\abc , \123ABC , \ , и т. д.
|
\\?
|
\ и любой отдельный символ
|
\a , \1 , \A , и т. д.
|
Примеры экранирования подстановочных знаков:
Запрос соответствует , userId
что равно AU%40KWM
:
SELECT userId FROM usersession WHERE userId LIKE "AU\%40KWM"
Запрос соответствует , userId
что равно AU*40KWM
:
SELECT userId FROM usersession WHERE userId like "AU\*40KWM"
Запрос ищет значение , userId
равное AU?40KWM
:
SELECT userId FROM usersession WHERE userId LIKE "AU\?40KWM"
Запрос содержит одну экранированную обратную косую черту \
и один подстановочный знак %
, поэтому запрос соответствует, userId
например AU\40KWM
, AU\abcd40KWM
, AU\ab12340KWM
, или AU\777_12340KWM
:
SELECT userId FROM usersession WHERE userId LIKE "AU\\%40KWM"
Запросы, содержащие 11+ условий LIKE с непересекающимися подстановочными знаками, отклоняются
Запросы USQL, содержащие 11 или более LIKE
условий в начале *
или %
внутри шаблона поиска (но не в конце), отклоняются из выполнения.
Обычно мы просто подсчитываем количество LIKE
условий, используемых в запросе. Например, LIKE
в запросе ниже пять условий — мы подсчитываем каждое вхождение LIKE
в WHERE
предложении и CONDITION
функции.
SELECT CONDITION(COUNT(userSessionId), WHERE useraction.name LIKE '*search.html'),
CONDITION(COUNT(userSessionId), WHERE useraction.name LIKE '*booking-payment1.html')
FROM usersession
WHERE city LIKE "%York"
OR city LIKE "S*Francisco"
AND city LIKE "L*inz"
Однако при использовании функции FUNNEL
расчет становится более сложным. Для этой функции мы внутренне преобразуем один запрос в несколько запросов. После этого преобразования мы подсчитываем количество условий LIKE
в этих внутренне преобразованных запросах.
Например, следующий запрос:
SELECT FUNNEL (useraction.name LIKE "*start", useraction.name LIKE "Jou%rney", useraction.name LIKE "bookJourn*ey") FROM usersession
изменяется на следующие три запроса:
SELECT COUNT(*) FROM usersession where useraction.name LIKE "*start"
SELECT COUNT(*) FROM usersession where useraction.name LIKE "*start" AND useraction.name LIKE "Jou%rney"
SELECT COUNT(*) FROM usersession where useraction.name LIKE "*start" AND useraction.name LIKE "Jou%rney" AND useraction.name LIKE "bookJourn*ey"
Это означает, что в приведенном выше запросе FUNNEL
на самом деле шесть условий LIKE
.