Пользовательские запросы, сегментация и агрегация данных сеанса: различия между версиями
ENetrebin (обсуждение | вклад) (Новая страница: «.») |
ENetrebin (обсуждение | вклад) |
||
(не показана 1 промежуточная версия этого же участника) | |||
Строка 1: | Строка 1: | ||
. | Dynatrace собирает подробные данные о сеансе пользователя каждый раз, когда пользователь взаимодействует с вашим отслеживаемым приложением. Эти данные включают все действия пользователя и высокоуровневые данные о производительности. Используя API Dynatrace или язык запросов пользовательских сессий Dynatrace (USQL), вы можете легко выполнять мощные запросы, сегментацию и агрегирование этих захваченных данных. Чтобы помочь вам, в этом разделе приведены подробные сведения о ключевых словах и функциях, синтаксисе, работе с таблицами Real User Monitoring, автоматических запросах и многом другом. | ||
Имейте в виду, что в Dynatrace версии 1.204 мы представили новые счетчики ошибок в USQL и экспорте сеансов для каждого действия пользователя, которые полностью согласуются с Dynatrace. В свою очередь, в Dynatrace версии 1.217 мы перестанем поддерживать следующие счетчики ошибок: | |||
* <code>useraction.errorCount</code>— Включает только ошибки JavaScript. | |||
* <code>useraction.httpRequestsWithErrors</code>— Учитывает только ошибки на стороне сервера. | |||
* <code>useraction.failedXHRRequests</code>— Учитываются только неудачные вызовы XHR, сделанные в браузере вашего конечного пользователя. | |||
* <code>useraction.failedImages</code>— Будет включено в новый <code>requestErrorCount</code>. Узнайте больше о том, как лучше всего заменить существующие счетчики ошибок новыми. | |||
Язык запросов сеансов пользователей не является SQL , и Dynatrace не хранит данные сеансов пользователей в реляционной базе данных. Язык запросов сеансов пользователей — это язык запросов, специфичный для Dynatrace, хотя он опирается на некоторые концепции SQL, а его синтаксис аналогичен, что облегчает начало работы. | |||
Выберите предпочтительный подход: | |||
Запросы сеанса пользователя через веб-интерфейс Dynatrace | |||
# В меню Dynatrace выберите Запрос пользовательских сессий . | |||
# Введите запрос и выберите Выполнить запрос . | |||
=== Селектор таймфрейма с USQL === | |||
С помощью селектора таймфрейма данные сеанса пользователя можно фильтровать на основе выбранного таймфрейма анализа. Выберите новый таймфрейм. | |||
==== Элементы управления селектором таймфрейма ==== | |||
Селектор глобальных временных рамок служит временным фильтром, который в большинстве случаев позволяет выбрать конкретный временной отрезок для анализа, который сохраняется на всех страницах продукта и во всех представлениях по мере навигации по анализу. | |||
* На вкладке Presets перечислены все доступные стандартные таймфреймы. Выберите один, чтобы изменить таймфрейм на этот пресет. | |||
* На вкладке Custom отображается календарь. Щелкните день начала, щелкните день окончания, а затем нажмите Применить , чтобы выбрать этот диапазон дней в качестве временного интервала. | |||
** Выбранные календарные интервалы устанавливаются так, чтобы заканчиваться в начале следующего дня (со временем, установленным на <code>00:00</code>). Например, если вы выберете период с 3 по 4 сентября в календаре, период времени начнется 3 сентября в момент времени <code>00:00</code>и закончится 5 сентября в момент времени <code>00:00</code>, поэтому вы никогда не пропустите последнюю минуту диапазона времени. Вы можете редактировать это отображаемое время. | |||
* На вкладке « Недавние » отображаются недавно использовавшиеся таймфреймы. Выберите один, чтобы вернуться к этому периоду времени. | |||
* Элементы управления < и > сдвигают временной диапазон вперед или назад по времени. Приращение — это длина исходного временного диапазона. Например, если текущий временной диапазон равен <code>Last 2 hours</code>(двухчасовой диапазон, заканчивающийся сейчас), щелкните < , чтобы сдвинуть временной диапазон на два часа назад, к <code>-4h to -2h</code>(двухчасовой диапазон, заканчивающийся два часа назад). | |||
* Наведите указатель мыши на временной интервал, чтобы увидеть время начала, продолжительность и время окончания. | |||
==== Выражения выбора таймфрейма ==== | |||
Если вы выберете текущий таймфрейм в строке меню, отобразится редактируемое выражение таймфрейма. | |||
* Если читать слева направо, выражение таймфрейма имеет время начала, <code>to</code>оператор и время окончания. | |||
* Если явное время окончания не указано, символы <code>to</code>и <code>now</code>подразумеваются. Например, <code>-2h</code>то же самое <code>-2h to now</code>. | |||
* Поддерживаемые единицы: <code>s</code>, <code>m</code>, <code>h</code>, <code>d</code>, <code>w</code>,<code>M</code> , <code>q</code>, <code>y</code>(вы также можете использовать целые слова, такие как <code>minutes</code>и <code>quarter</code>) | |||
{| class="wikitable" | |||
!Примеры выражений таймфрейма | |||
!Значение | |||
|- | |||
|<code>today</code> | |||
|С начала сегодняшнего дня до начала завтрашнего дня. | |||
|- | |||
|<code>yesterday</code> | |||
|С начала вчерашнего дня до начала сегодняшнего дня. Как <code>-1d/d to today</code>. | |||
|- | |||
|<code>yesterday to now</code> | |||
|С начала вчерашнего дня до текущего времени сегодня. | |||
|- | |||
|<code>previous week</code> | |||
|Предыдущие семь целых дней. Если сегодня понедельник, вы получаете от предыдущего понедельника до предыдущего воскресенья (вчера). | |||
|- | |||
|<code>this year</code> | |||
|Текущий календарный год, с 1 января текущего года <code>00:00</code>по 1 января следующего года по <code>00:00</code>. | |||
|- | |||
|<code>last 6 weeks</code> | |||
|Последние 42 дня (6 недель * 7 дней), заканчивающиеся сейчас. Эквивалентно <code>-6w to now</code>. | |||
|- | |||
|<code>-2h</code> | |||
|От 2 часов (120 минут) назад до текущего времени ( <code>now</code>подразумевается). Эквивалентно <code>Last 2 hours</code>и<code>-2h to now</code> . | |||
|- | |||
|<code>-4d to -1h30m</code> | |||
|От 4 дней (96 часов) назад до 1,5 часов назад. | |||
|- | |||
|<code>-1w</code> | |||
|Последние 7 дней (168 часов), начиная с этого времени 7 дней назад и заканчивая текущим временем ( <code>now</code>). Эквивалентно <code>-7d</code>и <code>-168h</code>. | |||
|- | |||
|<code>-1w/w</code> | |||
|С начала предыдущей календарной недели до текущего времени (сейчас). | |||
* Если вы использовали<code>-1w/w</code> в пятницу днем в 3:00, вы получите диапазон 11 дней 15 часов, начиная с начала понедельника предыдущей недели, потому что <code>/w</code>округляется до начала недели. | |||
* Если вы использовали<code>-1w</code> без <code>/w</code>в пятницу в 3:00 дня, время начала будет ровно на 7 дней (168 часов) раньше: в предыдущую пятницу в 3:00 дня. | |||
Как правило, <code>/</code>использование в сочетании с единицей измерения (например <code>/d</code>, <code>/w</code>, <code>/M</code>, и <code>/y</code>) означает округление даты или времени в меньшую сторону до начала указанной единицы времени. Например, <code>-3d</code>означает ровно 72 часа назад, тогда как <code>-3d/d</code>означает три дня назад, округленное до ближайшего дня (начиная с time <code>00:00</code>, начало дня). Используется <code>now/d</code>для обозначения начала сегодняшнего дня. | |||
|- | |||
|<code>-1w/w + 8h</code> | |||
|Начиная с начала прошлой недели плюс 8 часов (8:00 утра понедельника). | |||
* Обратите внимание, что вы можете использовать операторы <code>+</code>и с единицами измерения, отметками времени и .<code>-now</code> | |||
|- | |||
|<code>-1d/d+9h00m to -1d/d+17h00m</code> | |||
|Время работы вчера, с 09:00 до 17:00 (с 9:00 до 17:00). | |||
|- | |||
|<code>2020-08-16 21:28 to 2020-08-19 10:02</code> | |||
|Абсолютный диапазон, состоящий из абсолютных дат и времени начала и окончания в<code>YYYY-MM-DD hh:mm</code> формате. | |||
* Если указать дату, но опустить время (например, просто<code>2020-08-16</code> ), время считается началом дня ( <code>00:00</code>) . | |||
* Если вы укажете время, но не укажете дату (например, просто <code>21:28</code>), предполагается, что это сегодняшняя дата. | |||
|- | |||
|<code>1598545932346 to 1598837052346</code> | |||
|Временные метки эпохи Unix в миллисекундах. | |||
|} | |||
=== Автозаполнение с USQL === | |||
Автозаполнение доступно для операторов запроса на основе введенного в данный момент текста. Автозаполнение зависит от контекста и основано на текущем контексте курсора. Он разумно предугадывает, какой текст вы, возможно, захотите ввести дальше. | |||
Информация автозаполнения, возвращаемая из API, содержит список предложений с наиболее вероятными значениями, отсортированными в верхней части списка, а также необходимую корректировку текста запроса и результирующую позицию курсора после корректировки. Это позволяет вам поместить курсор в более полезную позицию после добавления текста, например, в скобки при выборе функции. | |||
Список полей содержит только допустимые поля или функции для выбранной таблицы, а его контекстная зависимость показывает только числовые поля, когда курсор находится внутри вызова функции, который работает только с числовыми данными, такими как <code>SUM()</code>, или <code>AVG()</code>. | |||
Значения полей предлагаются только для полей на основе перечисления. Фактический запрос к Elasticsearch не выполняется для автозаполнения. | |||
API среды Dynatrace | |||
Вы можете выполнять вызовы API, используя предпочитаемый вами клиент. Найдите соответствующую документацию по API в User Sessions API . Кроме того, вы можете использовать API Explorer. Чтобы получить к нему доступ, выберите Environment API v1 в меню пользователя в правом верхнем углу. | |||
Для выполнения этих вызовов вам необходимо разрешение сеансов пользователей ( <code>DTAQLAccess</code>), назначенное вашему токену API. Чтобы узнать, как получить и использовать токен, см. раздел API Dynatrace — токены и аутентификация . | |||
=== Таймфреймы в Environment API === | |||
Доступ к данным сеанса пользователя всегда должен осуществляться с указанием временных рамок. Доступ к большим временным рамкам может быть дорогостоящим из-за большого количества потенциальных одиночных совпадений с запросами. | |||
Таймфрейм обычно не является частью самого запроса, а отправляется в отдельных параметрах вызова API. Подробности можно найти в документации по API. | |||
Однако вы можете использовать поля времени, такие как <code>starttime</code>и <code>endtime</code>, для выбора периода времени. Вы также можете использовать эти поля в функциях, например, чтобы узнать, в какое время дня начинается большинство сеансов пользователей, как в <code>HOUR(starttime)</code>. | |||
== Ключевые слова и функции == | |||
Следующие ключевые слова были определены для доступа к данным сеанса пользователя: | |||
<code>AND</code>, <code>AS</code>, <code>ASC</code>, <code>BETWEEN</code>, <code>BY</code>, <code>DESC</code>, <code>DISTINCT</code>, <code>FALSE</code>, <code>FROM</code>, <code>GROUP</code>, <code>IN</code>, <code>IS</code>, <code>JSON</code>, <code>LIMIT</code>, <code>NOT</code>, <code>NULL</code>, <code>OR</code>, <code>ORDER</code>, <code>SELECT</code>, <code>STARTSWITH</code>, <code>TRUE</code>, <code>WHERE</code>_<code>LIKE</code> _<code>FILTER</code> | |||
Следующие функции были определены для доступа к данным сеанса пользователя: | |||
<code>SUM</code>, <code>MAX</code>, <code>MIN</code>, <code>AVG</code>, <code>MEDIAN</code>, <code>COUNT</code>, <code>YEAR</code>, <code>MONTH</code>, <code>DAY</code>, <code>HOUR</code>, <code>MINUTE</code>, <code>DATETIME</code>, <code>TOP</code>,<code>PERCENTILE</code> ,<code>KEYS</code> | |||
Ключевые слова, функции и имена столбцов нечувствительны к регистру. Строковые совпадения в<code>WHERE</code> условиях чувствительны к регистру. | |||
== Синтаксис == | |||
Типичный запрос строится из следующих ключевых слов: | |||
<code>SELECT <columns> FROM <nowiki><table> WHERE <condition> GROUP BY <grouping> ORDER BY <ordering></nowiki></code> | |||
Однако единственными обязательными элементами являются <code>SELECT <columns></code>и<code>FROM <nowiki><table></nowiki></code> . | |||
Пример | |||
=== Часто используемые ключевые слова === | |||
==== ВЫБРАТЬ<code><columns></code> ==== | |||
Выбирает один или несколько столбцов из указанной таблицы данных или выполняет функции агрегирования из набора поддерживаемых функций. | |||
<code>columns: [DISTINCT] <column>, <column>, ... | function(<parameter>) | | |||
<column> AS <alias> | JSON</code> | |||
Пример | |||
<code>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</code> | |||
==== ВОРОНКА ==== | |||
Позволяет использовать предопределенный формат воронки для запроса. Может использоваться для отображения потока конкретных действий пользователя. Также можно комбинировать с настраиваемыми свойствами сеанса и другими условиями. | |||
Он изменяет синтаксис любого запроса на следующий: | |||
<code>SELECT FUNNEL (<condition> AS <alias>, <condition>, ...) FROM <nowiki><table> WHERE <condition></nowiki></code> | |||
Пример 1 | |||
Вместо выполнения следующих трех запросов: | |||
<code>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"</code> | |||
Следующий одиночный запрос возвращает тот же результат: | |||
<code>SELECT FUNNEL (useraction.name = "AppStart", useraction.name = "searchJourney", useraction.name = "bookJourney") | |||
FROM usersession</code> | |||
Пример 2 | |||
Чтобы получить список пользователей, которые успешно забронировали путешествие: | |||
<code>SELECT FUNNEL (useraction.name="login", useraction.name = "searchJourney", useraction.name = "bookJourney") | |||
FROM usersession</code> | |||
==== ИЗ<code><nowiki><table></nowiki></code> ==== | |||
Вы можете указать только одну таблицу. Таблицы для данных сеанса пользователя: <code>usersession</code>, <code>useraction</code>и <code>userevent</code>. | |||
Пример | |||
<code>SELECT country, city, browserfamily FROM usersession | |||
SELECT name, starttime, endtime, duration FROM useraction ORDER BY duration DESC</code> | |||
==== КУДА<code><condition></code> ==== | |||
Вы можете комбинировать несколько условий, используя логическую логику и круглые скобки внутри <code>WHERE</code>предложения, например, <code>WHERE (city = 'Barcelona' AND country = 'Spain')</code>чтобы включить только города с названием Барселона, которые находятся в Испании. | |||
<code>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> | ...</code> | |||
Однако значение может содержать только правая часть условий, поэтому сравнивать два поля нельзя. | |||
Пример | |||
<code>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)</code> | |||
==== ГРУППА ПО<code><grouping></code> ==== | |||
Всякий раз, когда поля агрегируются, вы должны указать соответствующие <code>GROUP BY</code>ключевые слова, чтобы указать, как должно выполняться агрегирование. | |||
<code>grouping: <column>, ...</code> | |||
Пример | |||
<code>SELECT city, count(*) FROM usersession GROUP BY city | |||
SELECT MONTH(starttime) as month, count (*) FROM usersession | |||
GROUP BY month</code> | |||
==== ПРЕДЕЛ<code><limit></code> ==== | |||
Позволяет ограничить количество возвращаемых результатов. Например, вы можете выбрать только 10 лучших результатов в сочетании с упорядочиванием. | |||
Платформа всегда применяет верхний предел для предотвращения перегрузки системы. Если <code>LIMIT</code>не используется, по умолчанию возвращается 50 результатов. | |||
Пример | |||
<code>SELECT city, starttime FROM usersession ORDER BY starttime DESC LIMIT 10</code> | |||
<code>LIMIT</code>также может использоваться для увеличения количества результатов в случаях, когда <code>LIMIT</code>предложение отсутствует, потому что тогда применяется ограничение по умолчанию. | |||
==== СОРТИРОВАТЬ ПО<code><ordering></code> ==== | |||
Позволяет упорядочить результаты по столбцам в порядке возрастания или убывания. Порядок восходящий, если не указано иное. | |||
Заказ осуществляется по частоте. Например, 5 наиболее часто возвращаемых городов являются наиболее часто встречающимися. Указав поле в <code>ORDER BY</code>предложении, вы можете добавить значение сортировки для строк, дат и чисел. | |||
Заказ по <code>enums</code>или по <code>function values</code>таким, как <code>AVG</code>и <code>SUM</code>заказывает возвращенные результаты, но вы можете не получить лучшие элементы. Например, если вы запрашиваете первые 5 результатов с помощью <code>AVG(duration)</code>, запрос только 10 может добавить результаты даже вверху. | |||
<code>ordering: <column> ASC | <column> DESC | <column>, ...</code> | |||
Пример 1 | |||
<code>SELECT useraction.name, starttime FROM usersession ORDER BY starttime DESC</code> | |||
Пример 2 | |||
Вы можете упорядочить подсчеты, добавив <code>DISTINCT</code>ключевое слово. | |||
<code>SELECT DISTINCT city, COUNT(*) FROM usersession ORDER BY COUNT(*) DESC</code> | |||
Пример 3 | |||
Вы можете упорядочить функции в списке выбора, указав только имя столбца или псевдоним, определенный в файле <code>SELECT</code>. | |||
<code>SELECT avg(duration) AS average, count(*) as number, day(startTime) as startDay | |||
FROM usersession where duration < 2000 | |||
GROUP BY startTime | |||
ORDER BY average</code> | |||
или же | |||
<code>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</code> | |||
==== КАК ==== | |||
Позволяет сравнивать данные с выражением, используя подстановочные знаки для соответствия заданному шаблону. Можно использовать следующие символы: | |||
* <code>%</code>: соответствует любой строке из 0 или более символов | |||
* <code>*</code>: соответствует любой строке из 0 или более символов | |||
* <code>?</code>: Соответствует любому одиночному символу | |||
Строковые значения чувствительны к регистру. Например, <code>SELECT city FROM usersession WHERE userId LIKE "*astromkey*"</code>соответствует , <code>me@ruscomtech.ru</code>но не <code>me@ruscomTech.ru</code>. Чтобы избежать этого, используйте <code>?</code>подстановочный знак, как в этом примере:<code>SELECT city FROM usersession WHERE userId LIKE "*ruscom?ech*"</code> | |||
==== ФИЛЬТР ==== | |||
Позволяет фильтровать функции с числовыми значениями, тем самым отображая только конкретные результаты агрегирования. | |||
Пример | |||
<code>SELECT useraction.application, | |||
AVG(usersession.doubleProperties.bookings) | |||
FILTER > 1500 | |||
FROM usersession | |||
WHERE usersession.doubleProperties.bookings IS NOT NULL | |||
GROUP BY useraction.application</code> | |||
Функции <code>WHERE</code>и <code>FILTER</code>не являются взаимозаменяемыми. Хотя это предложение можно использовать <code>WHERE</code>только для абсолютных значений, <code>FILTER</code>функция работает и с агрегированными значениями. | |||
=== Часто используемые функции === | |||
==== МИН(поле) ==== | |||
Запрашивает минимальное значение числового поля или поля даты. | |||
Пример | |||
<code>SELECT MIN(duration), MAX(duration), AVG(duration), MEDIAN(duration) | |||
FROM usersession</code> | |||
==== МАКС(поле) ==== | |||
Запрашивает максимальное значение числового поля или поля даты. | |||
Пример | |||
<code>SELECT MIN(duration), MAX(duration), AVG(duration), MEDIAN(duration) | |||
FROM usersession</code> | |||
==== СРЕДНЕЕ (поле) ==== | |||
Запрашивает среднее значение числового поля или поля даты. Может быть, <code>NaN</code>если поле всегда <code>null</code>. | |||
Пример | |||
<code>SELECT MIN(duration), MAX(duration), AVG(duration), MEDIAN(duration) | |||
FROM usersession</code> | |||
==== МЕДИАНА(поле) ==== | |||
Запрашивает среднее значение числового поля или поля даты. | |||
Пример | |||
<code>SELECT MIN(duration), MAX(duration), AVG(duration), MEDIAN(duration) | |||
FROM usersession</code> | |||
==== СУММ(поле) ==== | |||
Вычисляет сумму числового поля. | |||
Пример | |||
<code>SELECT TOP(name, 20), SUM(duration) FROM useraction | |||
GROUP BY name</code> | |||
==== COUNT(поле), COUNT(*), COUNT(DISTINCT поле) ==== | |||
Подсчитывает количество совпадающих строк. | |||
<code>COUNT(*)</code>: подсчитывает количество совпадающих элементов. | |||
<code>COUNT(<field>)</code>: подсчитывает количество совпадающих элементов, где <code>\<field></code>не является нулевым. | |||
<code>COUNT(DISTINCT <field>)</code>: подсчитывает количество различных значений для <code>\<field></code>выбранных элементов. | |||
Dynatrace отклоняет и не выполняет запросы <code>COUNT(DISTINCT <field>)</code>, которые могут занимать много памяти. Это происходит для всех полей чрезвычайно высокой кардинальности, например, для таких <code>dateTime</code>полей, как <code>usersession.startTime</code>, <code>usersession.endTime</code>или <code>useraction.networkTime</code>. | |||
Поля с чрезвычайно высокой кардинальностью | |||
Пример | |||
<code>SELECT country, COUNT(*), COUNT(city), COUNT(DISTINCT city) | |||
FROM usersession | |||
GROUP BY country</code> | |||
==== ВЕРХ(поле, n) ==== | |||
Возвращает лучшие <code>\<n></code>результаты из поля. По умолчанию <code>1</code>(верхнее значение), если <code>n</code>не указано. | |||
Пример | |||
<code>SELECT TOP(name, 20), SUM(duration) | |||
FROM useraction | |||
GROUP BY name</code> | |||
Если <code>TOP(<field>, n)</code>выбрано и результаты сгруппированы, но <code><field></code>не являются частью группировки, первые n элементов возвращаются в виде списка в одном поле. | |||
<code>SELECT TOP(country, 20), TOP(city, 3), COUNT(*) | |||
FROM usersession | |||
GROUP BY country</code> | |||
==== ГОД(поле даты), МЕСЯЦ(поле даты), ДЕНЬ(поле даты), ЧАС(поле даты), МИНУТЫ(поле даты) ==== | |||
Возвращает данный элемент, извлеченный из поля даты. | |||
<code>YEAR</code>: 4-значный год. <code>MONTH</code>: Номер месяца от 1 до 12 <code>DAY</code>: День месяца от 1 до 31. <code>HOUR</code>: Значение часов от 0 до 23. <code>MINUTE</code>: Значение минут от 0 до 59. | |||
Пример | |||
<code>SELECT starttime, | |||
DATETIME(starttime), YEAR(starttime), MONTH(starttime), DAY(starttime), HOUR(starttime), MINUTE(starttime) | |||
FROM usersession | |||
ORDER BY starttime | |||
DESC</code> | |||
==== ДАТАВРЕМЯ(поле даты [, формат [, интервал]]) ==== | |||
Форматирует выбранное поле даты с заданной строкой формата. Формат по умолчанию <code>yyyy-MM-dd HH:mm</code>. | |||
Допустимые буквы в строке формата: | |||
* <code>y</code>: год | |||
* <code>M</code>: месяц | |||
* <code>d</code>: день месяца | |||
* <code>H</code>: час (0-23) | |||
* <code>h</code>: час (1-12) | |||
* <code>m</code>: минута | |||
* <code>s</code>: второй | |||
* <code>E</code>: день недели (пн-вс) | |||
<code>year</code>| _ <code>month</code>| <code>week</code>интервалы указаны для одного <code>interval</code>. Для <code>d</code>(дней), <code>h</code>(часов), <code>m</code>(минут) или <code>s</code>(секунд) вы можете использовать число, за которым следует буква для строки формата, например <code>5m</code>. Например,<code>SELECT DISTINCT DATETIME(starttime, 'HH:mm', '5m'), count(*) FROM usersession</code> подсчитывает сеансы в пятиминутных блоках. | |||
Пример | |||
<code>SELECT DATETIME(starttime, 'yyyy-MM') FROM usersession | |||
SELECT DISTINCT DATETIME(starttime, 'HH:mm', '5m'), count(*) FROM usersession</code> | |||
==== УСЛОВИЕ(функция, условие) ==== | |||
Позволяет комбинировать несколько функций с различными условиями. | |||
В строке формата разрешены следующие функции: | |||
* <code>MIN()</code> | |||
* <code>MAX()</code> | |||
* <code>AVG()</code> | |||
* <code>SUM()</code> | |||
* <code>PERCENTILE()</code> | |||
* <code>MEDIAN()</code> | |||
* <code>COUNT()</code> | |||
Вы можете комбинировать несколько условий, используя логическую логику и круглые скобки с <code>CONDITION</code>функцией, например, <code>CONDITION(COUNT(*), WHERE city = 'Barcelona' AND country = 'Spain')</code>включать только города с названием Барселона, которые находятся в Испании. | |||
<code>CONDITION(function, condition) | |||
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> | ...</code> | |||
Вы также можете использовать <code>FILTER</code>фильтр предложений для функций с числовыми значениями, тем самым отображая только конкретные результаты агрегирования. | |||
<code>SELECT CONDITION(COUNT(usersessionId), WHERE userActionCount > 2 AND useraction.name = "search.jsp") FILTER > 1000, city FROM usersession GROUP BY city</code> | |||
Пример | |||
<code>SELECT CONDITION(COUNT(usersessionId), WHERE userActionCount > 2 AND useraction.name = "search.jsp") FROM usersession | |||
SELECT CONDITION(SUM(usersession.duration), WHERE name = "index.jsp") AS c1, CONDITION(SUM(usersession.duration), WHERE name = "search.jsp") AS c2, CONDITION(SUM(usersession.duration), WHERE name IS NOT "index.jsp" AND name IS NOT "search.jsp") AS c3 FROM useraction WHERE (duration > 1000 OR usersession.userActionCount > 4) | |||
SELECT CONDITION(SUM(usersession.duration), WHERE name = "index.jsp") AS c1 FROM useraction WHERE (duration > 1000 OR usersession.userActionCount > 4) ORDER BY c1 | |||
SELECT DATETIME(CONDITION(MIN(startTime ), WHERE useraction.application = "RUM Default Application" ), "yyyy-MM-dd" ) FROM usersession</code> | |||
==== ПРОЦЕНТИЛЬ ==== | |||
Представляет значение, ниже которого существует процент точек данных с более низким значением. Полезно для определения скорости вашего приложения для клиентов, которые получают самое медленное время отклика. | |||
Пример | |||
<code>SELECT name, usersession.country, usersession.browserFamily, | |||
AVG(duration), | |||
MEDIAN(duration), | |||
PERCENTILE(duration, 99) | |||
FROM useraction | |||
WHERE useraction.name = "easytravel/rest/login" | |||
GROUP BY usersession.country, usersession.browserFamily, name | |||
ORDER BY usersession.continent</code> | |||
==== КЛЮЧИ (пользовательское свойство) ==== | |||
Возвращает ключи действий пользователя или свойств сеанса пользователя в соответствии с типом данных свойства, определенным в аргументе. | |||
Проверьте таблицу ниже, чтобы понять, возвращаются ли ключи свойств действия пользователя или ключи свойств сеанса пользователя. | |||
{| class="wikitable" | |||
!КЛЮЧИ (пользовательское свойство) | |||
!Стол | |||
!Свойства действия | |||
!Свойства сеанса | |||
|- | |||
|<code>KEYS(<dataType>Properties)</code> | |||
|<code>useraction</code> | |||
|✔️ | |||
| | |||
|- | |||
|<code>KEYS(<dataType>Properties)</code> | |||
|<code>usersession</code> | |||
| | |||
|✔️ | |||
|- | |||
|<code>KEYS(useraction.<dataType>Properties)</code> | |||
|<code>useraction</code> | |||
|✔️ | |||
| | |||
|- | |||
|<code>KEYS(useraction.<dataType>Properties)</code> | |||
|<code>usersession</code> | |||
|✔️ | |||
| | |||
|- | |||
|<code>KEYS(usersession.<dataType>Properties)</code> | |||
|<code>useraction</code> | |||
| | |||
|✔️ | |||
|- | |||
|<code>KEYS(usersession.<dataType>Properties)</code> | |||
|<code>usersession</code> | |||
| | |||
|✔️ | |||
|} | |||
Часть <code><dataType></code>функции может принимать следующие значения: | |||
* <code>string</code> | |||
* <code>long</code> | |||
* <code>double</code> | |||
* <code>date</code> | |||
Пример 1 | |||
<code>SELECT KEYS(stringProperties) FROM useraction WHERE application = "easyTravel demo application" | |||
SELECT KEYS(useraction.longProperties) FROM usersession WHERE applicationType="WEB_APPLICATION" ORDER BY keys(useraction.longProperties) | |||
SELECT KEYS(usersession.stringProperties) FROM useraction WHERE usersession.city ="Berlin"</code> | |||
Для получения отдельных ключей действия или свойств сеанса используйте<code>DISTINCT KEYS(customProperty)</code> . | |||
Пример 2 | |||
<code>SELECT DISTINCT KEYS(stringProperties) FROM useraction WHERE useraction.application = "easyTravel demo application" ORDER BY keys(stringProperties) | |||
SELECT DISTINCT KEYS(doubleProperties) FROM usersession</code> | |||
== Математические операции == | |||
В составе запросов поддерживаются следующие операции: | |||
* операции над числами | |||
* операции с числовыми полями и полями dateTime | |||
* операции над некоторыми функциями, такими как <code>YEAR</code>, <code>MONTH</code>, <code>DAY</code>, <code>HOUR</code>,<code>MINUTE</code> | |||
* операции над числовыми значениями и отображение их в различных целях измерения | |||
=== Синтаксис === | |||
<code>Number/NumericField/DateTimeField/Function OPERATOR Number/NumericField/DateTimeField/Function</code> | |||
Функция: <code>YEAR</code>, <code>MONTH</code>, <code>DAY</code>, <code>HOUR</code>или <code>MINUTE</code> Оператор: <code>+</code>, <code>-</code>, <code>*</code>, <code>/</code>, <code>%</code>, или<code>MOD</code> | |||
Пример | |||
<code>SELECT 7 + 80 * 100, duration + startTime, MONTH(startTime) - 1 | |||
FROM usersession</code> | |||
== Условия == | |||
Все условия должны начинаться с идентификатора, например имени поля, и должны сравниваться со значением. Два поля нельзя сравнивать друг с другом. Примечание . Текст в кавычках всегда чувствителен к регистру. | |||
=== Основные операторы === | |||
Основные операторы сравнения: <code>=</code>, <code>!=</code>, <code><></code>, <code><</code>, <code>></code>, <code><=</code>, <code>>=</code>, <code>IS</code>, и<code>IS NOT</code> . | |||
Чтобы проверить, присутствует ли значение поля, сравните поле с <code>NULL</code>. | |||
Пример | |||
<code>SELECT userId FROM usersession WHERE userActionCount > 3</code> | |||
=== Диапазоны === | |||
Диапазоны обрабатываются ключевыми словами, такими как <code>BETWEEN</code>, <code><lowerLimit></code>и <code><upperLimit></code>. | |||
Пример | |||
<code>SELECT DISTINCT ip FROM usersession | |||
WHERE ip BETWEEN "192.168.0.0" AND "192.168.255.255"</code> | |||
=== Наборы === | |||
Можно <code>IN</code>использовать ключевое слово «укоротить» <code>"WHERE" <field> = val1 OR <field> = val2 OR <field> = val3</code>. | |||
Пример | |||
<code>SELECT userId FROM usersession WHERE city IN ("NEW YORK", "San Francisco")</code> | |||
=== Строковые условия === | |||
Строковое условие проверяет, начинается <code>"STARTSWITH"</code>ли строка или поле перечисления с указанного текста. | |||
Пример | |||
<code>SELECT city FROM usersession WHERE userId STARTSWITH "astromkey"</code> | |||
=== Значения даты и времени === | |||
Когда условия выполняются для поля даты и времени, поддерживаются следующие форматы значений: | |||
{| class="wikitable" | |||
!Формат | |||
!Описание | |||
!Пример | |||
|- | |||
|— | |||
|Временная метка Unix в виде числа в миллисекундах | |||
|<code>1514152800000</code> | |||
|- | |||
|<code>yyyy-MM-dd'T'HH:mm:ssZ</code> | |||
|Дата и время ISO с часовым поясом | |||
|<code>2017-12-24T21:00:00+01:00</code> | |||
|- | |||
|<code>yyyy-MM-dd HH:mm:ss</code> | |||
|Дата с необязательным временем | |||
|<code>2017-12-24 21:00</code> | |||
|- | |||
|<code>yyyy/MM/dd HH:mm:ss</code> | |||
|Дата с необязательным временем | |||
|<code>2017/12/24 21</code> | |||
|- | |||
|<code>MM/dd/yyyy HH:mm:ss</code> | |||
|Дата с необязательным временем | |||
|<code>12/24/2017</code> | |||
|- | |||
|<code>dd.MM.yyyy HH:mm:ss</code> | |||
|Дата с необязательным временем | |||
|<code>24.12.2017 21:00:00</code> | |||
|} | |||
Для форматов, в которых время является необязательным, поддерживаются следующие форматы времени: | |||
{| class="wikitable" | |||
!Формат | |||
!Пример | |||
|- | |||
|<code>HH:mm:ss</code> | |||
|<code>08:20:59</code> | |||
|- | |||
|<code>H:mm:ss</code> | |||
|<code>8:20:59</code> | |||
|- | |||
|<code>HH:mm</code> | |||
|<code>08:20</code> | |||
|- | |||
|<code>H:mm</code> | |||
|<code>8:20</code> | |||
|- | |||
|<code>HH</code> | |||
|<code>08</code> | |||
|- | |||
|<code>H</code> | |||
|<code>8</code> | |||
|} | |||
Если время отсутствует, <code>00:00:00</code>предполагается значение по умолчанию. | |||
Иногда запросы со значениями даты и времени могут давать неверные результаты из-за преобразования летнего времени. Если дата в запросе предшествует дате окончания перехода на летнее время (например, до 02:00 7 ноября 2021 г.), попробуйте использовать дату и время ISO со смещением времени, например, <code>2021-10-05T17:30:00+03:00</code>. | |||
Пример | |||
<code>SELECT starttime FROM usersession WHERE starttime > "8.8.2018 8:00"</code> | |||
== Расширенные синтаксические конструкции == | |||
=== Запрос диапазонов IP-адресов === | |||
В поле IP можно запросить диапазоны адресов. Оба <code>BETWEEN ip > <lower ipaddress range> AND ip < <upper ipaddress range></code>или <code>BETWEEN <lower ipaddress range> AND <lower ipaddress range></code>работа. | |||
Пример | |||
<code>SELECT * FROM usersession WHERE ip > '211.44.94.0' AND ip < '212.113.5.0' | |||
SELECT * FROM usersession WHERE ip BETWEEN '211.44.94.0' AND '212.113.5.0'</code> | |||
=== Селектор периода запроса === | |||
Вы можете использовать следующие ключевые слова, чтобы выбрать время начала и время окончания, как указано в селекторе таймфрейма. | |||
* <code>TIME_FRAME_START</code> | |||
* <code>TIME_FRAME_END</code> | |||
Пример | |||
<code>SELECT * FROM usersession WHERE startTime >= $TIME_FRAME_START AND endTime < $TIME_FRAME_END</code> | |||
=== Относительный период времени запроса === | |||
Вы можете выбрать временной интервал относительно времени выполнения запроса. Текущее время выражается с помощью <code>$NOW</code>переменной. | |||
<code>$NOW [+/-] DURATION("[number]TIME_UNIT")</code> | |||
Для выражения продолжительности поддерживаются следующие единицы времени: | |||
* <code>y</code>: год | |||
* <code>q</code>: четверть | |||
* <code>M</code>: месяц | |||
* <code>d</code>: день | |||
* <code>w</code>: неделя | |||
* <code>h</code>: час | |||
* <code>m</code>: минута | |||
* <code>s</code>: второй | |||
Пример | |||
<code>SELECT * FROM usersession WHERE startTime >= $NOW - DURATION("1q") AND endTime <= $NOW | |||
SELECT * FROM useraction WHERE startTime BETWEEN $NOW - DURATION("2h") AND $NOW | |||
SELECT * FROM useraction WHERE usersession.startTime >= $TIME_FRAME_START - DURATION("2h") AND $NOW - DURATION("1h")</code> | |||
Период времени, выбранный в веб-интерфейсе Dynatrace или API Dynatrace, по-прежнему применяется к результатам, даже если фильтрация на основе временных меток используется как часть вашего запроса. | |||
=== Вторичные таблицы для сеансов пользователей, действий пользователей и событий пользователей. === | |||
При использовании <code>SELECT</code>с <code>usersession</code>, <code>useraction</code>или <code>userevent</code>, можно получить доступ к столбцам из другой таблицы и включить их в результаты, добавив к именам столбцов префикс имени таблицы. | |||
Пример 1 | |||
Выбор логического представления таблицы <code>usersession</code>или . <code>useractions</code>Несколько значений объединяются в результирующем столбце при добавлении информации из <code>useraction</code>в запрос на <code>usersession</code>. | |||
<code>SELECT city, useraction.name FROM usersession | |||
SELECT usersession.city, name FROM useraction</code> | |||
Пример 2 | |||
Применяемые условия различаются по смыслу в зависимости от таблицы. Например, предположим, что вы хотите перечислить все сеансы пользователей, которые содержат действия пользователя <code>a</code>и <code>b</code>: | |||
<code>SELECT * FROM usersession | |||
WHERE useraction.name = "a" and useraction.name = "b"</code> | |||
Это означает, что сеанс должен содержать действие пользователя <code>"a"</code>и действие пользователя <code>"b"</code>. Выполнение одного и того же запроса к <code>useraction</code>таблице вернет пустой результат, поскольку одно и то же действие пользователя не может иметь два разных значения для одного и того же имени. | |||
Если вы хотите выбрать данные сеанса пользователя для определенного действия пользователя, соответствующего нескольким критериям, выполните следующий запрос: | |||
<code>SELECT usersession.*, * FROM useraction | |||
WHERE useraction.name = "a" and useraction.duration > 1000</code> | |||
В этом случае каждое действие пользователя в результате удовлетворяет обоим условиям. | |||
=== Фильтры для основных таблиц === | |||
Фильтры можно применять только к первичным таблицам. Рассмотрим следующий пример: | |||
Пример 1 | |||
<code>SELECT useraction.name FROM usersession WHERE useraction.name=”abc”</code> | |||
Этот запрос возвращает список всех действий пользователя только из тех пользовательских сеансов, которые содержат действия пользователя, называемые <code>abc</code>. Это происходит потому, что запрос применяется ко всем сеансам пользователей, которые соответствуют вашему фильтру (который является основной таблицей), а не действиям пользователя (которые формируют дополнительную таблицу). | |||
Пример 2 | |||
<code>SELECT name FROM useraction WHERE name=”abc”</code> | |||
Этот запрос извлекает список всех пользовательских действий, называемых «abc», из всех пользовательских сеансов (которые формируют основную таблицу). | |||
=== ВЫБЕРИТЕ * ИЗ таблицы === | |||
Пример | |||
<code>SELECT * FROM usersession | |||
SELECT useraction.* FROM usersession | |||
SELECT city, useraction.* FROM usersession | |||
SELECT *, useraction.* FROM usersession</code> | |||
Примечание . Звездочка <code>*</code>сама по себе выбирает столбцы из основной таблицы, а не из дополнительной таблицы. Например, поля из <code>useraction</code>не включаются в <code>SELECT * FROM usersession</code>, если вы не включите <code>useraction.*</code>. | |||
=== JSON-экспорт === | |||
Пример | |||
<code>SELECT usersessionId, browserFamily, useraction.name, useraction.duration, JSON | |||
FROM usersession LIMIT 5</code> | |||
=== Экранирование строк === | |||
Строковые литералы можно заключать в одинарные или двойные кавычки. Однако, если вы хотите использовать один и тот же знак кавычек внутри строки, просто удвойте его. | |||
Пример | |||
<code>SELECT * FROM usersession WHERE userId = "some 'custom' name for ""my user""" | |||
SELECT * FROM usersession WHERE userId = 'some <nowiki>''</nowiki>custom<nowiki>''</nowiki> name for "my user"'</code> | |||
=== Диаграмма воронки === | |||
Воронкообразные диаграммы позволяют отслеживать этапы работы вашего цифрового сервиса и исследовать области проблем, с которыми сталкиваются ваши пользователи. В сочетании с Session Replay эта функция позволяет вам увидеть, в какой момент ваш пользователь испытывает затруднения в вашем приложении. | |||
Пример | |||
<code>SELECT FUNNEL( | |||
useraction.name = "AppStart (easyTravel)" AS "Open easytravel", | |||
useraction.name = "searchJourney" AS "Search journey", | |||
useraction.name = "bookJourney" AS "Book journey", | |||
useraction.matchingConversionGoals = "Payment" OR useraction.matchingConversionGoals = "booking-finished" AS "Booked") | |||
FROM usersession</code> | |||
Вы также можете фильтровать для определенного сегмента. Примером этого является использование свойств сеанса для извлечения списка клиентов с высоким приоритетом. | |||
Пример | |||
<code>SELECT FUNNEL( | |||
useraction.name = "AppStart (easyTravel)" AS "Open easytravel", | |||
useraction.name = "searchJourney" AS "Search journey", | |||
useraction.name = "bookJourney" AS "Book journey", | |||
useraction.matchingConversionGoals = "Payment" OR useraction.matchingConversionGoals = "booking-finished" AS "Booked") | |||
FROM usersession | |||
WHERE stringProperties.memberstatus="GOLD"</code> | |||
== Доступные таблицы данных сеанса пользователя и поля == | |||
Для данных сеанса пользователя доступны таблицы , <code>usersession</code>и <code>useraction</code>. Вторичные таблицы для usersession, useraction и userevent содержат описание того, как данные в одной из этих таблиц доступны в другой.<code>userevent</code> | |||
Поля описаны в разделе API сеансов пользователей — Структура сеанса пользователя . | |||
Вы также можете проверить объект UserSession в API Explorer . | |||
== Выполнение запросов USQL для пользовательских отчетов == | |||
Интерфейс REST позволяет вам получать результаты для ваших пользовательских запросов. Все, что вам нужно, это создать уникальный токен API с привилегией языка запросов сеанса пользователя . Возможность запрашивать данные сеанса пользователя таким образом полезна при автоматизированном тестировании, проверке данных и других автоматизированных функциях. Он включает в себя следующие конечные точки: | |||
<code>/table</code>: возвращает данные в виде плоской таблицы даже при группировке по различным элементам и выполнении иерархических агрегаций по данным сеанса пользователя. | |||
<code>/tree</code>: возвращает данные в виде полного иерархического дерева на основе ввода. | |||
Доступны следующие параметры запроса: | |||
<code>query</code>: необходимо кодировать при вводе, например, в URL-адрес <code>%20</code>вместо пробелов. <code>startTimestamp/endTimestamp</code>: Позволяет вам определить моменты времени, прошедшие как количество миллисекунд с эпохи Unix. Если не указано, по умолчанию используются последние два часа. | |||
Примеры | |||
Этот код: | |||
<code>curl --location --insecure -H "Content-Type: application/json" -H "Authorization: Api-Token _token_" \ | |||
-XGET "<nowiki>https://{your-environment-id}.live.ruscomtech.ru/api/v1/userSessionQueryLanguage/table?query=select%20city,count(*)%20from%20usersession%20group%20by%20city</nowiki>"</code> | |||
дает следующий результат: | |||
<code>{ | |||
"columnNames": ["city", "count(*)"], | |||
"values": [ | |||
["Dublin", 23], | |||
["N. Virginia (Amazon)", 80], | |||
["Portland", 56] | |||
] | |||
}</code> | |||
Этот код: | |||
<code>curl --location --insecure -H "Content-Type: application/json" -H "Authorization: Api-Token _token_" \ | |||
-XGET "<nowiki>https://{your-environment-id}.live.ruscomtech.ru/api/v1/userSessionQueryLanguage/tree?query=select%20country,city,count(*)%20from%20usersession%20group%20by%20country,city</nowiki>"</code> | |||
дает следующий результат: | |||
<code>{ | |||
"branchNames": ["country", "city"], | |||
"leafNames": ["count(*)"], | |||
"values": { | |||
"United States": { | |||
"Portland": [56], | |||
"N. Virginia (Amazon)": [83] | |||
}, | |||
"Ireland": { | |||
"Dublin": [24] | |||
} | |||
} | |||
}</code> | |||
Подробнее об API сеансов пользователей . | |||
== Преобразование запросов в пользовательские показатели сеанса пользователя == | |||
Вы можете преобразовать некоторые запросы в пользовательские показатели сеанса пользователя для своих веб-приложений , мобильных и пользовательских приложений . | |||
# В меню Dynatrace выберите Запрос пользовательских сессий . | |||
# Введите запрос, а затем выберите Выполнить запрос . Список поддерживаемых полей, параметров и фильтров см. в подробных руководствах для веб-приложений , мобильных и пользовательских приложений . | |||
# Выберите Создать пользовательскую метрику . | |||
# Введите имя метрики, а затем просмотрите предлагаемые настройки. | |||
== Ограничения == | |||
* Dynatrace хранит данные реального мониторинга пользователей (действия пользователей и сеансы пользователей) в течение ограниченного периода времени. Дополнительные сведения см. в разделе Сроки хранения данных. | |||
* Набор результатов по умолчанию — 50, но количество результатов можно увеличить до 5000 с помощью <code>LIMIT</code>ключевого слова. | |||
* Количество возможных максимальных результатов с разбивкой по сегментам ограничено максимум 100 000. По умолчанию 10 000. Это влияет на то, как <code>TOP()</code>применяется, когда <code>DISTINCT</code>или <code>GROUP BY</code>используется. Если не <code>TOP()</code>указано, 10 000 возможных результатов равномерно распределяются по указанным столбцам. Эти значения по умолчанию можно перезаписать, указав a <code>TOP()</code>для каждого столбца. Умноженные <code>TOP()-</code>значения не могут превышать 100 000 результатов. Примеры | |||
** Функцию <code>TOP()</code>можно использовать для увеличения количества различных значений на агрегацию. | |||
** Максимальное количество различных результатов на агрегацию ограничено 1000. | |||
** В следующем запросе используется не более 10 000 теоретически возможных результатов: <code>select browserFamily, city, count * FROM usersession group by browserFamily, city</code> | |||
** Следующий запрос включает <code>TOP()</code>и поэтому может использовать до 100 000 (100 * 1000) теоретически возможных результатов: <code>select TOP(browserFamily, 1000), TOP(city, 100), count * FROM usersession group by browserFamily, city</code> | |||
* Соединения не допускаются. | |||
* Допускается только одна таблица на <code>SELECT</code>. | |||
* Поиск строковых значений с помощью регулярных выражений не поддерживается. | |||
* Два разных поля нельзя сравнивать. Например <code>WHERE field1 = field2</code>не работает. | |||
* <code>WHERE</code>условия работают только с полями, поэтому ни один из них <code>WHERE true</code>не <code>WHERE COUNT(*) > 3</code>поддерживается. | |||
* Можно запрашивать только закрытые сеансы пользователей. Сеансы пользователей в реальном времени не учитываются. | |||
* Заказ поддерживается частично. | |||
* Функции не допускаются в <code>GROUP BY</code>предложении. Поэтому, если вы хотите сгруппировать по месяцам, укажите псевдоним. | |||
* <code>FUNNEL</code>нельзя использовать с <code>SELECT *</code>функциями, ключевыми словами, такими как <code>JSON</code>, и операторы <code>GROUP BY</code>, и .<code>ORDERLIMIT</code> | |||
* Для математических операций поддержка <code>GROUP BY</code>, <code>ORDER BY</code>и других операций над функциями недоступна. | |||
* Максимум 10 условий могут быть применены к <code>FUNNEL</code>. |
Текущая версия на 16:42, 22 января 2023
Dynatrace собирает подробные данные о сеансе пользователя каждый раз, когда пользователь взаимодействует с вашим отслеживаемым приложением. Эти данные включают все действия пользователя и высокоуровневые данные о производительности. Используя API Dynatrace или язык запросов пользовательских сессий Dynatrace (USQL), вы можете легко выполнять мощные запросы, сегментацию и агрегирование этих захваченных данных. Чтобы помочь вам, в этом разделе приведены подробные сведения о ключевых словах и функциях, синтаксисе, работе с таблицами Real User Monitoring, автоматических запросах и многом другом.
Имейте в виду, что в Dynatrace версии 1.204 мы представили новые счетчики ошибок в USQL и экспорте сеансов для каждого действия пользователя, которые полностью согласуются с Dynatrace. В свою очередь, в Dynatrace версии 1.217 мы перестанем поддерживать следующие счетчики ошибок:
useraction.errorCount
— Включает только ошибки JavaScript.useraction.httpRequestsWithErrors
— Учитывает только ошибки на стороне сервера.useraction.failedXHRRequests
— Учитываются только неудачные вызовы XHR, сделанные в браузере вашего конечного пользователя.useraction.failedImages
— Будет включено в новыйrequestErrorCount
. Узнайте больше о том, как лучше всего заменить существующие счетчики ошибок новыми.
Язык запросов сеансов пользователей не является SQL , и Dynatrace не хранит данные сеансов пользователей в реляционной базе данных. Язык запросов сеансов пользователей — это язык запросов, специфичный для Dynatrace, хотя он опирается на некоторые концепции SQL, а его синтаксис аналогичен, что облегчает начало работы.
Выберите предпочтительный подход:
Запросы сеанса пользователя через веб-интерфейс Dynatrace
- В меню Dynatrace выберите Запрос пользовательских сессий .
- Введите запрос и выберите Выполнить запрос .
Селектор таймфрейма с USQL
С помощью селектора таймфрейма данные сеанса пользователя можно фильтровать на основе выбранного таймфрейма анализа. Выберите новый таймфрейм.
Элементы управления селектором таймфрейма
Селектор глобальных временных рамок служит временным фильтром, который в большинстве случаев позволяет выбрать конкретный временной отрезок для анализа, который сохраняется на всех страницах продукта и во всех представлениях по мере навигации по анализу.
- На вкладке Presets перечислены все доступные стандартные таймфреймы. Выберите один, чтобы изменить таймфрейм на этот пресет.
- На вкладке Custom отображается календарь. Щелкните день начала, щелкните день окончания, а затем нажмите Применить , чтобы выбрать этот диапазон дней в качестве временного интервала.
- Выбранные календарные интервалы устанавливаются так, чтобы заканчиваться в начале следующего дня (со временем, установленным на
00:00
). Например, если вы выберете период с 3 по 4 сентября в календаре, период времени начнется 3 сентября в момент времени00:00
и закончится 5 сентября в момент времени00:00
, поэтому вы никогда не пропустите последнюю минуту диапазона времени. Вы можете редактировать это отображаемое время.
- Выбранные календарные интервалы устанавливаются так, чтобы заканчиваться в начале следующего дня (со временем, установленным на
- На вкладке « Недавние » отображаются недавно использовавшиеся таймфреймы. Выберите один, чтобы вернуться к этому периоду времени.
- Элементы управления < и > сдвигают временной диапазон вперед или назад по времени. Приращение — это длина исходного временного диапазона. Например, если текущий временной диапазон равен
Last 2 hours
(двухчасовой диапазон, заканчивающийся сейчас), щелкните < , чтобы сдвинуть временной диапазон на два часа назад, к-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 среды Dynatrace
Вы можете выполнять вызовы API, используя предпочитаемый вами клиент. Найдите соответствующую документацию по API в User Sessions API . Кроме того, вы можете использовать API Explorer. Чтобы получить к нему доступ, выберите Environment API v1 в меню пользователя в правом верхнем углу.
Для выполнения этих вызовов вам необходимо разрешение сеансов пользователей ( DTAQLAccess
), назначенное вашему токену API. Чтобы узнать, как получить и использовать токен, см. раздел API Dynatrace — токены и аутентификация .
Таймфреймы в Environment 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>
.
Пример
Часто используемые ключевые слова
ВЫБРАТЬ<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
ВОРОНКА
Позволяет использовать предопределенный формат воронки для запроса. Может использоваться для отображения потока конкретных действий пользователя. Также можно комбинировать с настраиваемыми свойствами сеанса и другими условиями.
Он изменяет синтаксис любого запроса на следующий:
SELECT FUNNEL (<condition> AS <alias>, <condition>, ...) FROM <table> WHERE <condition>
Пример 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
Чтобы получить список пользователей, которые успешно забронировали путешествие:
SELECT FUNNEL (useraction.name="login", useraction.name = "searchJourney", useraction.name = "bookJourney")
FROM usersession
ИЗ<table>
Вы можете указать только одну таблицу. Таблицы для данных сеанса пользователя: usersession
, useraction
и userevent
.
Пример
SELECT country, city, browserfamily FROM usersession
SELECT name, starttime, endtime, duration FROM useraction ORDER BY duration DESC
КУДА<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)
ГРУППА ПО<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>
Позволяет ограничить количество возвращаемых результатов. Например, вы можете выбрать только 10 лучших результатов в сочетании с упорядочиванием.
Платформа всегда применяет верхний предел для предотвращения перегрузки системы. Если LIMIT
не используется, по умолчанию возвращается 50 результатов.
Пример
SELECT city, starttime FROM usersession ORDER BY starttime DESC LIMIT 10
LIMIT
также может использоваться для увеличения количества результатов в случаях, когда LIMIT
предложение отсутствует, потому что тогда применяется ограничение по умолчанию.
СОРТИРОВАТЬ ПО<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
.
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
КАК
Позволяет сравнивать данные с выражением, используя подстановочные знаки для соответствия заданному шаблону. Можно использовать следующие символы:
%
: соответствует любой строке из 0 или более символов*
: соответствует любой строке из 0 или более символов?
: Соответствует любому одиночному символу
Строковые значения чувствительны к регистру. Например, SELECT city FROM usersession WHERE userId LIKE "*astromkey*"
соответствует , me@ruscomtech.ru
но не me@ruscomTech.ru
. Чтобы избежать этого, используйте ?
подстановочный знак, как в этом примере:SELECT city FROM usersession WHERE userId LIKE "*ruscom?ech*"
ФИЛЬТР
Позволяет фильтровать функции с числовыми значениями, тем самым отображая только конкретные результаты агрегирования.
Пример
SELECT useraction.application,
AVG(usersession.doubleProperties.bookings)
FILTER > 1500
FROM usersession
WHERE usersession.doubleProperties.bookings IS NOT NULL
GROUP BY useraction.application
Функции WHERE
и FILTER
не являются взаимозаменяемыми. Хотя это предложение можно использовать WHERE
только для абсолютных значений, FILTER
функция работает и с агрегированными значениями.
Часто используемые функции
МИН(поле)
Запрашивает минимальное значение числового поля или поля даты.
Пример
SELECT MIN(duration), MAX(duration), AVG(duration), MEDIAN(duration)
FROM usersession
МАКС(поле)
Запрашивает максимальное значение числового поля или поля даты.
Пример
SELECT MIN(duration), MAX(duration), AVG(duration), MEDIAN(duration)
FROM usersession
СРЕДНЕЕ (поле)
Запрашивает среднее значение числового поля или поля даты. Может быть, NaN
если поле всегда null
.
Пример
SELECT MIN(duration), MAX(duration), AVG(duration), MEDIAN(duration)
FROM usersession
МЕДИАНА(поле)
Запрашивает среднее значение числового поля или поля даты.
Пример
SELECT MIN(duration), MAX(duration), AVG(duration), MEDIAN(duration)
FROM usersession
СУММ(поле)
Вычисляет сумму числового поля.
Пример
SELECT TOP(name, 20), SUM(duration) FROM useraction
GROUP BY name
COUNT(поле), COUNT(*), COUNT(DISTINCT поле)
Подсчитывает количество совпадающих строк.
COUNT(*)
: подсчитывает количество совпадающих элементов.
COUNT(<field>)
: подсчитывает количество совпадающих элементов, где \<field>
не является нулевым.
COUNT(DISTINCT <field>)
: подсчитывает количество различных значений для \<field>
выбранных элементов.
Dynatrace отклоняет и не выполняет запросы COUNT(DISTINCT <field>)
, которые могут занимать много памяти. Это происходит для всех полей чрезвычайно высокой кардинальности, например, для таких dateTime
полей, как usersession.startTime
, usersession.endTime
или useraction.networkTime
.
Поля с чрезвычайно высокой кардинальностью
Пример
SELECT country, COUNT(*), COUNT(city), COUNT(DISTINCT city)
FROM usersession
GROUP BY country
ВЕРХ(поле, n)
Возвращает лучшие \<n>
результаты из поля. По умолчанию 1
(верхнее значение), если n
не указано.
Пример
SELECT TOP(name, 20), SUM(duration)
FROM useraction
GROUP BY name
Если TOP(<field>, n)
выбрано и результаты сгруппированы, но <field>
не являются частью группировки, первые n элементов возвращаются в виде списка в одном поле.
SELECT TOP(country, 20), TOP(city, 3), COUNT(*)
FROM usersession
GROUP BY country
ГОД(поле даты), МЕСЯЦ(поле даты), ДЕНЬ(поле даты), ЧАС(поле даты), МИНУТЫ(поле даты)
Возвращает данный элемент, извлеченный из поля даты.
YEAR
: 4-значный год. MONTH
: Номер месяца от 1 до 12 DAY
: День месяца от 1 до 31. HOUR
: Значение часов от 0 до 23. MINUTE
: Значение минут от 0 до 59.
Пример
SELECT starttime,
DATETIME(starttime), YEAR(starttime), MONTH(starttime), DAY(starttime), HOUR(starttime), MINUTE(starttime)
FROM usersession
ORDER BY starttime
DESC
ДАТАВРЕМЯ(поле даты [, формат [, интервал]])
Форматирует выбранное поле даты с заданной строкой формата. Формат по умолчанию yyyy-MM-dd HH:mm
.
Допустимые буквы в строке формата:
y
: годM
: месяцd
: день месяцаH
: час (0-23)h
: час (1-12)m
: минутаs
: второйE
: день недели (пн-вс)
year
| _ month
| week
интервалы указаны для одного interval
. Для d
(дней), h
(часов), m
(минут) или s
(секунд) вы можете использовать число, за которым следует буква для строки формата, например 5m
. Например,SELECT DISTINCT DATETIME(starttime, 'HH:mm', '5m'), count(*) FROM usersession
подсчитывает сеансы в пятиминутных блоках.
Пример
SELECT DATETIME(starttime, 'yyyy-MM') FROM usersession
SELECT DISTINCT DATETIME(starttime, 'HH:mm', '5m'), count(*) FROM usersession
УСЛОВИЕ(функция, условие)
Позволяет комбинировать несколько функций с различными условиями.
В строке формата разрешены следующие функции:
MIN()
MAX()
AVG()
SUM()
PERCENTILE()
MEDIAN()
COUNT()
Вы можете комбинировать несколько условий, используя логическую логику и круглые скобки с CONDITION
функцией, например, CONDITION(COUNT(*), WHERE city = 'Barcelona' AND country = 'Spain')
включать только города с названием Барселона, которые находятся в Испании.
CONDITION(function, condition)
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> | ...
Вы также можете использовать FILTER
фильтр предложений для функций с числовыми значениями, тем самым отображая только конкретные результаты агрегирования.
SELECT CONDITION(COUNT(usersessionId), WHERE userActionCount > 2 AND useraction.name = "search.jsp") FILTER > 1000, city FROM usersession GROUP BY city
Пример
SELECT CONDITION(COUNT(usersessionId), WHERE userActionCount > 2 AND useraction.name = "search.jsp") FROM usersession
SELECT CONDITION(SUM(usersession.duration), WHERE name = "index.jsp") AS c1, CONDITION(SUM(usersession.duration), WHERE name = "search.jsp") AS c2, CONDITION(SUM(usersession.duration), WHERE name IS NOT "index.jsp" AND name IS NOT "search.jsp") AS c3 FROM useraction WHERE (duration > 1000 OR usersession.userActionCount > 4)
SELECT CONDITION(SUM(usersession.duration), WHERE name = "index.jsp") AS c1 FROM useraction WHERE (duration > 1000 OR usersession.userActionCount > 4) ORDER BY c1
SELECT DATETIME(CONDITION(MIN(startTime ), WHERE useraction.application = "RUM Default Application" ), "yyyy-MM-dd" ) FROM usersession
ПРОЦЕНТИЛЬ
Представляет значение, ниже которого существует процент точек данных с более низким значением. Полезно для определения скорости вашего приложения для клиентов, которые получают самое медленное время отклика.
Пример
SELECT name, usersession.country, usersession.browserFamily,
AVG(duration),
MEDIAN(duration),
PERCENTILE(duration, 99)
FROM useraction
WHERE useraction.name = "easytravel/rest/login"
GROUP BY usersession.country, usersession.browserFamily, name
ORDER BY usersession.continent
КЛЮЧИ (пользовательское свойство)
Возвращает ключи действий пользователя или свойств сеанса пользователя в соответствии с типом данных свойства, определенным в аргументе.
Проверьте таблицу ниже, чтобы понять, возвращаются ли ключи свойств действия пользователя или ключи свойств сеанса пользователя.
КЛЮЧИ (пользовательское свойство) | Стол | Свойства действия | Свойства сеанса |
---|---|---|---|
KEYS(<dataType>Properties)
|
useraction
|
✔️ | |
KEYS(<dataType>Properties)
|
usersession
|
✔️ | |
KEYS(useraction.<dataType>Properties)
|
useraction
|
✔️ | |
KEYS(useraction.<dataType>Properties)
|
usersession
|
✔️ | |
KEYS(usersession.<dataType>Properties)
|
useraction
|
✔️ | |
KEYS(usersession.<dataType>Properties)
|
usersession
|
✔️ |
Часть <dataType>
функции может принимать следующие значения:
string
long
double
date
Пример 1
SELECT KEYS(stringProperties) FROM useraction WHERE application = "easyTravel demo application"
SELECT KEYS(useraction.longProperties) FROM usersession WHERE applicationType="WEB_APPLICATION" ORDER BY keys(useraction.longProperties)
SELECT KEYS(usersession.stringProperties) FROM useraction WHERE usersession.city ="Berlin"
Для получения отдельных ключей действия или свойств сеанса используйтеDISTINCT KEYS(customProperty)
.
Пример 2
SELECT DISTINCT KEYS(stringProperties) FROM useraction WHERE useraction.application = "easyTravel demo application" ORDER BY keys(stringProperties)
SELECT DISTINCT KEYS(doubleProperties) FROM usersession
Математические операции
В составе запросов поддерживаются следующие операции:
- операции над числами
- операции с числовыми полями и полями dateTime
- операции над некоторыми функциями, такими как
YEAR
,MONTH
,DAY
,HOUR
,MINUTE
- операции над числовыми значениями и отображение их в различных целях измерения
Синтаксис
Number/NumericField/DateTimeField/Function OPERATOR Number/NumericField/DateTimeField/Function
Функция: YEAR
, MONTH
, DAY
, HOUR
или MINUTE
Оператор: +
, -
, *
, /
, %
, илиMOD
Пример
SELECT 7 + 80 * 100, duration + startTime, MONTH(startTime) - 1
FROM usersession
Условия
Все условия должны начинаться с идентификатора, например имени поля, и должны сравниваться со значением. Два поля нельзя сравнивать друг с другом. Примечание . Текст в кавычках всегда чувствителен к регистру.
Основные операторы
Основные операторы сравнения: =
, !=
, <>
, <
, >
, <=
, >=
, IS
, иIS NOT
.
Чтобы проверить, присутствует ли значение поля, сравните поле с NULL
.
Пример
SELECT userId FROM usersession WHERE userActionCount > 3
Диапазоны
Диапазоны обрабатываются ключевыми словами, такими как BETWEEN
, <lowerLimit>
и <upperLimit>
.
Пример
SELECT DISTINCT ip FROM usersession
WHERE ip BETWEEN "192.168.0.0" AND "192.168.255.255"
Наборы
Можно IN
использовать ключевое слово «укоротить» "WHERE" <field> = val1 OR <field> = val2 OR <field> = val3
.
Пример
SELECT userId FROM usersession WHERE city IN ("NEW YORK", "San Francisco")
Строковые условия
Строковое условие проверяет, начинается "STARTSWITH"
ли строка или поле перечисления с указанного текста.
Пример
SELECT city FROM usersession WHERE userId STARTSWITH "astromkey"
Значения даты и времени
Когда условия выполняются для поля даты и времени, поддерживаются следующие форматы значений:
Формат | Описание | Пример |
---|---|---|
— | Временная метка Unix в виде числа в миллисекундах | 1514152800000
|
yyyy-MM-dd'T'HH:mm:ssZ
|
Дата и время ISO с часовым поясом | 2017-12-24T21:00:00+01:00
|
yyyy-MM-dd HH:mm:ss
|
Дата с необязательным временем | 2017-12-24 21:00
|
yyyy/MM/dd HH:mm:ss
|
Дата с необязательным временем | 2017/12/24 21
|
MM/dd/yyyy HH:mm:ss
|
Дата с необязательным временем | 12/24/2017
|
dd.MM.yyyy HH:mm:ss
|
Дата с необязательным временем | 24.12.2017 21:00:00
|
Для форматов, в которых время является необязательным, поддерживаются следующие форматы времени:
Формат | Пример |
---|---|
HH:mm:ss
|
08:20:59
|
H:mm:ss
|
8:20:59
|
HH:mm
|
08:20
|
H:mm
|
8:20
|
HH
|
08
|
H
|
8
|
Если время отсутствует, 00:00:00
предполагается значение по умолчанию.
Иногда запросы со значениями даты и времени могут давать неверные результаты из-за преобразования летнего времени. Если дата в запросе предшествует дате окончания перехода на летнее время (например, до 02:00 7 ноября 2021 г.), попробуйте использовать дату и время ISO со смещением времени, например, 2021-10-05T17:30:00+03:00
.
Пример
SELECT starttime FROM usersession WHERE starttime > "8.8.2018 8:00"
Расширенные синтаксические конструкции
Запрос диапазонов IP-адресов
В поле IP можно запросить диапазоны адресов. Оба BETWEEN ip > <lower ipaddress range> AND ip < <upper ipaddress range>
или BETWEEN <lower ipaddress range> AND <lower ipaddress range>
работа.
Пример
SELECT * FROM usersession WHERE ip > '211.44.94.0' AND ip < '212.113.5.0'
SELECT * FROM usersession WHERE ip BETWEEN '211.44.94.0' AND '212.113.5.0'
Селектор периода запроса
Вы можете использовать следующие ключевые слова, чтобы выбрать время начала и время окончания, как указано в селекторе таймфрейма.
TIME_FRAME_START
TIME_FRAME_END
Пример
SELECT * FROM usersession WHERE startTime >= $TIME_FRAME_START AND endTime < $TIME_FRAME_END
Относительный период времени запроса
Вы можете выбрать временной интервал относительно времени выполнения запроса. Текущее время выражается с помощью $NOW
переменной.
$NOW [+/-] DURATION("[number]TIME_UNIT")
Для выражения продолжительности поддерживаются следующие единицы времени:
y
: годq
: четвертьM
: месяцd
: деньw
: неделяh
: часm
: минутаs
: второй
Пример
SELECT * FROM usersession WHERE startTime >= $NOW - DURATION("1q") AND endTime <= $NOW
SELECT * FROM useraction WHERE startTime BETWEEN $NOW - DURATION("2h") AND $NOW
SELECT * FROM useraction WHERE usersession.startTime >= $TIME_FRAME_START - DURATION("2h") AND $NOW - DURATION("1h")
Период времени, выбранный в веб-интерфейсе Dynatrace или API Dynatrace, по-прежнему применяется к результатам, даже если фильтрация на основе временных меток используется как часть вашего запроса.
Вторичные таблицы для сеансов пользователей, действий пользователей и событий пользователей.
При использовании SELECT
с usersession
, useraction
или userevent
, можно получить доступ к столбцам из другой таблицы и включить их в результаты, добавив к именам столбцов префикс имени таблицы.
Пример 1
Выбор логического представления таблицы usersession
или . useractions
Несколько значений объединяются в результирующем столбце при добавлении информации из useraction
в запрос на usersession
.
SELECT city, useraction.name FROM usersession
SELECT usersession.city, name FROM useraction
Пример 2
Применяемые условия различаются по смыслу в зависимости от таблицы. Например, предположим, что вы хотите перечислить все сеансы пользователей, которые содержат действия пользователя a
и b
:
SELECT * FROM usersession
WHERE useraction.name = "a" and useraction.name = "b"
Это означает, что сеанс должен содержать действие пользователя "a"
и действие пользователя "b"
. Выполнение одного и того же запроса к useraction
таблице вернет пустой результат, поскольку одно и то же действие пользователя не может иметь два разных значения для одного и того же имени.
Если вы хотите выбрать данные сеанса пользователя для определенного действия пользователя, соответствующего нескольким критериям, выполните следующий запрос:
SELECT usersession.*, * FROM useraction
WHERE useraction.name = "a" and useraction.duration > 1000
В этом случае каждое действие пользователя в результате удовлетворяет обоим условиям.
Фильтры для основных таблиц
Фильтры можно применять только к первичным таблицам. Рассмотрим следующий пример:
Пример 1
SELECT useraction.name FROM usersession WHERE useraction.name=”abc”
Этот запрос возвращает список всех действий пользователя только из тех пользовательских сеансов, которые содержат действия пользователя, называемые abc
. Это происходит потому, что запрос применяется ко всем сеансам пользователей, которые соответствуют вашему фильтру (который является основной таблицей), а не действиям пользователя (которые формируют дополнительную таблицу).
Пример 2
SELECT name FROM useraction WHERE name=”abc”
Этот запрос извлекает список всех пользовательских действий, называемых «abc», из всех пользовательских сеансов (которые формируют основную таблицу).
ВЫБЕРИТЕ * ИЗ таблицы
Пример
SELECT * FROM usersession
SELECT useraction.* FROM usersession
SELECT city, useraction.* FROM usersession
SELECT *, useraction.* FROM usersession
Примечание . Звездочка *
сама по себе выбирает столбцы из основной таблицы, а не из дополнительной таблицы. Например, поля из useraction
не включаются в SELECT * FROM usersession
, если вы не включите useraction.*
.
JSON-экспорт
Пример
SELECT usersessionId, browserFamily, useraction.name, useraction.duration, JSON
FROM usersession LIMIT 5
Экранирование строк
Строковые литералы можно заключать в одинарные или двойные кавычки. Однако, если вы хотите использовать один и тот же знак кавычек внутри строки, просто удвойте его.
Пример
SELECT * FROM usersession WHERE userId = "some 'custom' name for ""my user"""
SELECT * FROM usersession WHERE userId = 'some ''custom'' name for "my user"'
Диаграмма воронки
Воронкообразные диаграммы позволяют отслеживать этапы работы вашего цифрового сервиса и исследовать области проблем, с которыми сталкиваются ваши пользователи. В сочетании с Session Replay эта функция позволяет вам увидеть, в какой момент ваш пользователь испытывает затруднения в вашем приложении.
Пример
SELECT FUNNEL(
useraction.name = "AppStart (easyTravel)" AS "Open easytravel",
useraction.name = "searchJourney" AS "Search journey",
useraction.name = "bookJourney" AS "Book journey",
useraction.matchingConversionGoals = "Payment" OR useraction.matchingConversionGoals = "booking-finished" AS "Booked")
FROM usersession
Вы также можете фильтровать для определенного сегмента. Примером этого является использование свойств сеанса для извлечения списка клиентов с высоким приоритетом.
Пример
SELECT FUNNEL(
useraction.name = "AppStart (easyTravel)" AS "Open easytravel",
useraction.name = "searchJourney" AS "Search journey",
useraction.name = "bookJourney" AS "Book journey",
useraction.matchingConversionGoals = "Payment" OR useraction.matchingConversionGoals = "booking-finished" AS "Booked")
FROM usersession
WHERE stringProperties.memberstatus="GOLD"
Доступные таблицы данных сеанса пользователя и поля
Для данных сеанса пользователя доступны таблицы , usersession
и useraction
. Вторичные таблицы для usersession, useraction и userevent содержат описание того, как данные в одной из этих таблиц доступны в другой.userevent
Поля описаны в разделе API сеансов пользователей — Структура сеанса пользователя .
Вы также можете проверить объект UserSession в API Explorer .
Выполнение запросов USQL для пользовательских отчетов
Интерфейс REST позволяет вам получать результаты для ваших пользовательских запросов. Все, что вам нужно, это создать уникальный токен API с привилегией языка запросов сеанса пользователя . Возможность запрашивать данные сеанса пользователя таким образом полезна при автоматизированном тестировании, проверке данных и других автоматизированных функциях. Он включает в себя следующие конечные точки:
/table
: возвращает данные в виде плоской таблицы даже при группировке по различным элементам и выполнении иерархических агрегаций по данным сеанса пользователя.
/tree
: возвращает данные в виде полного иерархического дерева на основе ввода.
Доступны следующие параметры запроса:
query
: необходимо кодировать при вводе, например, в URL-адрес %20
вместо пробелов. startTimestamp/endTimestamp
: Позволяет вам определить моменты времени, прошедшие как количество миллисекунд с эпохи Unix. Если не указано, по умолчанию используются последние два часа.
Примеры
Этот код:
curl --location --insecure -H "Content-Type: application/json" -H "Authorization: Api-Token _token_" \
-XGET "https://{your-environment-id}.live.ruscomtech.ru/api/v1/userSessionQueryLanguage/table?query=select%20city,count(*)%20from%20usersession%20group%20by%20city"
дает следующий результат:
{
"columnNames": ["city", "count(*)"],
"values": [
["Dublin", 23],
["N. Virginia (Amazon)", 80],
["Portland", 56]
]
}
Этот код:
curl --location --insecure -H "Content-Type: application/json" -H "Authorization: Api-Token _token_" \
-XGET "https://{your-environment-id}.live.ruscomtech.ru/api/v1/userSessionQueryLanguage/tree?query=select%20country,city,count(*)%20from%20usersession%20group%20by%20country,city"
дает следующий результат:
{
"branchNames": ["country", "city"],
"leafNames": ["count(*)"],
"values": {
"United States": {
"Portland": [56],
"N. Virginia (Amazon)": [83]
},
"Ireland": {
"Dublin": [24]
}
}
}
Подробнее об API сеансов пользователей .
Преобразование запросов в пользовательские показатели сеанса пользователя
Вы можете преобразовать некоторые запросы в пользовательские показатели сеанса пользователя для своих веб-приложений , мобильных и пользовательских приложений .
- В меню Dynatrace выберите Запрос пользовательских сессий .
- Введите запрос, а затем выберите Выполнить запрос . Список поддерживаемых полей, параметров и фильтров см. в подробных руководствах для веб-приложений , мобильных и пользовательских приложений .
- Выберите Создать пользовательскую метрику .
- Введите имя метрики, а затем просмотрите предлагаемые настройки.
Ограничения
- Dynatrace хранит данные реального мониторинга пользователей (действия пользователей и сеансы пользователей) в течение ограниченного периода времени. Дополнительные сведения см. в разделе Сроки хранения данных.
- Набор результатов по умолчанию — 50, но количество результатов можно увеличить до 5000 с помощью
LIMIT
ключевого слова. - Количество возможных максимальных результатов с разбивкой по сегментам ограничено максимум 100 000. По умолчанию 10 000. Это влияет на то, как
TOP()
применяется, когдаDISTINCT
илиGROUP BY
используется. Если неTOP()
указано, 10 000 возможных результатов равномерно распределяются по указанным столбцам. Эти значения по умолчанию можно перезаписать, указав aTOP()
для каждого столбца. УмноженныеTOP()-
значения не могут превышать 100 000 результатов. Примеры- Функцию
TOP()
можно использовать для увеличения количества различных значений на агрегацию. - Максимальное количество различных результатов на агрегацию ограничено 1000.
- В следующем запросе используется не более 10 000 теоретически возможных результатов:
select browserFamily, city, count * FROM usersession group by browserFamily, city
- Следующий запрос включает
TOP()
и поэтому может использовать до 100 000 (100 * 1000) теоретически возможных результатов:select TOP(browserFamily, 1000), TOP(city, 100), count * FROM usersession group by browserFamily, city
- Функцию
- Соединения не допускаются.
- Допускается только одна таблица на
SELECT
. - Поиск строковых значений с помощью регулярных выражений не поддерживается.
- Два разных поля нельзя сравнивать. Например
WHERE field1 = field2
не работает. WHERE
условия работают только с полями, поэтому ни один из нихWHERE true
неWHERE COUNT(*) > 3
поддерживается.- Можно запрашивать только закрытые сеансы пользователей. Сеансы пользователей в реальном времени не учитываются.
- Заказ поддерживается частично.
- Функции не допускаются в
GROUP BY
предложении. Поэтому, если вы хотите сгруппировать по месяцам, укажите псевдоним. FUNNEL
нельзя использовать сSELECT *
функциями, ключевыми словами, такими какJSON
, и операторыGROUP BY
, и .ORDERLIMIT
- Для математических операций поддержка
GROUP BY
,ORDER BY
и других операций над функциями недоступна. - Максимум 10 условий могут быть применены к
FUNNEL
.