Пользовательские запросы, сегментация и агрегирование данных о сеансах

Материал из Документация Ключ-АСТРОМ

Ключ-АСТРОМ собирает подробные данные сеанса пользователя каждый раз, когда пользователь взаимодействует с вашим контролируемым приложением. Эти данные включают все действия пользователя и данные о производительности высокого уровня. Используя Ключ-АТСРОМ API или язык запросов сеансов пользователя Ключ-АСТРОМ (USQL), вы можете легко выполнять мощные запросы, сегментации и агрегации этих собранных данных. Чтобы помочь вам, в этой теме приведены подробные сведения о ключевых словах и функциях, синтаксисе, работе с таблицами мониторинга реальных пользователей, автоматизированных запросах и многом другом.

Язык запросов сеансов пользователей — это не SQL, и Ключ-АСТРОМ не хранит данные сеансов пользователей в реляционной базе данных. Язык запросов сеансов пользователей — это язык запросов, специфичный для Ключ-АСТРОМ, хотя он и опирается на некоторые концепции SQL, а синтаксис похож, что упрощает начало работы.

Выберите один из подходов:

Запросы сеансов пользователя через веб-интерфейс Ключ-АСТРОМ

  1. Перейдите в раздел SQL - запросы сессий .
  2. Введите запрос и нажмите на кнопку Выполнить запрос .

Выбор таймфрейма с помощью USQL

С помощью селектора таймфрейма данные сеанса пользователя можно фильтровать на основе выбранного таймфрейма анализа. Выберите новый таймфрейм.

Таймфрейм new.png

Элементы управления выбором таймфрейма

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

Подробный Таймфрейм.png

  • Вкладка Пресеты содержит список всех доступных стандартных таймфреймов. Выберите один, чтобы изменить свой таймфрейм на этот предустановленный.
  • Вкладка Custom отображает календарь. Щелкните начальный день, щелкните конечный день, а затем щелкните на кнопку Применить, чтобы выбрать этот диапазон дней в качестве таймфрейма.
    • Выбранные интервалы календаря устанавливаются на окончание в начале следующего дня (со временем, установленным на 00:00). Например, если вы выбираете в календаре период с 3 по 4 сентября, временной интервал начинается 3 сентября в момент времени 00:00и заканчивается 5 сентября в момент времени 00:00, поэтому вы никогда не пропустите последнюю минуту временного диапазона. Вы можете редактировать отображаемое время.
  • Вкладка Недавний отображает недавно использованные таймфреймы. Выберите один, чтобы вернуться к этому таймфрейму.
  • Элементы управления < > сдвигают временной диапазон вперед или назад по времени. Шаг — это длина исходного таймфрейма. Например, если текущий таймфрейм Последние 2 часа (двухчасовой диапазон, заканчивающийся сейчас), щелкните < , чтобы сместить таймфрейм на два часа назад, на -4h to -2h (двухчасовой диапазон, заканчивающийся два часа назад).
  • Наведите курсор на таймфрейм, чтобы увидеть время начала, продолжительность и время окончания. Курсор с таймфреймом.png

Выражения выбора таймфрейма

Если выбрать текущий таймфрейм в строке меню, отобразится редактируемое выражение таймфрейма.

  • Если читать слева направо, выражение таймфрейма имеет начальное время, оператор 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в пятницу днем ​​в 3:00, вы получите диапазон 11 дней 15 часов, начиная с начала понедельника предыдущей недели, поскольку /wокругление происходит до начала недели.
  • Если вы использовали -1wwithout /wв пятницу днем ​​в 3:00, то время начала будет ровно на 7 дней (168 часов) раньше: в предыдущую пятницу в 3:00 дня.

В общем случае, /используется в сочетании с единицей (например /d, /w, /M, , и /y) означает округление даты или времени до начала указанной единицы времени. Например, -3dозначает ровно 72 часа назад, тогда как -3d/dозначает три дня назад, округленное до ближайшего дня (начиная с времени 00:00, начала дня). Используется now/dдля обозначения начала сегодняшнего дня.

-1w/w + 8h Начиная с начала прошлой недели плюс 8 часов (8:00 утра понедельника).
  • Обратите внимание, что вы можете использовать операторы +и -с единицами измерения, временными метками и т . д now.
-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формате .
  • Если вы указываете дату, но не указываете время (например, просто 2020-08-16), предполагается, что время соответствует началу дня ( 00:00)
  • Если вы указываете время, но не указываете дату (например, просто 21:28), предполагается, что дата сегодняшняя.
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 .