Открыть меню
Открыть персональное меню
Вы не представились системе
Your IP address will be publicly visible if you make any edits.

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

Материал из Документация АппОптима

АппОптима собирает подробные данные сеанса пользователя каждый раз, когда пользователь взаимодействует с вашим контролируемым приложением. Эти данные включают все действия пользователя и данные о производительности высокого уровня. Используя Ключ-АТСРОМ 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@astromkey.com, но не me@asTromKey.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 .

FILTER

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

Пример

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 работает и для агрегированных значений.

Часто используемые функции

MIN(field)

Запрашивает минимальное значение числового поля или поля даты.

Пример

SELECT MIN(duration), MAX(duration), AVG(duration), MEDIAN(duration)

FROM usersession

MAX(field)

Запрашивает максимальное значение числового поля или поля даты.

Пример

SELECT MIN(duration), MAX(duration), AVG(duration), MEDIAN(duration)

FROM usersession

AVG(field)

Запрашивает среднее значение числового поля или поля даты. Может иметь значение NaN, если поле всегда null.

Пример

SELECT MIN(duration), MAX(duration), AVG(duration), MEDIAN(duration)

FROM usersession

MEDIAN(field)

Запрашивает медианное значение числового поля или поля даты.

Пример

SELECT MIN(duration), MAX(duration), AVG(duration), MEDIAN(duration)

FROM usersession

SUM(field)

Вычисляет сумму числового поля.

Пример

SELECT TOP(name, 20), SUM(duration) FROM useraction

GROUP BY name

COUNT(field), COUNT(*), COUNT(DISTINCT field)

Подсчитывает количество совпадающих строк.

  • COUNT(*): Подсчитывает количество совпадающих элементов.
  • COUNT(<field>): Подсчитывает количество совпадающих элементов, где <field> не равно нулю.
  • COUNT(DISTINCT <field>): Подсчитывает количество различных значений <field> в выбранных элементах.

Пример

SELECT country, COUNT(*), COUNT(city), COUNT(DISTINCT city)

FROM usersession

GROUP BY country

Результаты, возвращаемые функцией, COUNT(DISTINCT <field>)являются приблизительными, чтобы предотвратить высокое использование памяти. Если COUNT(DISTINCT <field>)используется в поле с высокой кардинальностью, результаты могут быть еще более грубыми. Поля с высокой кардинальностью — это те поля, которые имеют всего несколько дубликатов.

Поля с высокой кардинальностью

Table Fields
usersession ip , userSessionId , internalUserId , userId

АппОптима отклоняет и не выполняет запросы, COUNT(DISTINCT <field>) которые могут потреблять много памяти. Это происходит для всех полей с чрезвычайно высокой кардинальностью, например, для dateTime полей типа usersession.startTime, usersession.endTime или useraction.networkTime.

Поля с чрезвычайно высокой кардинальностью

Table Fields
usersession startTime , endTime , replayEnd , clientTimeOffset, duration , replayStart
useraction domContentLoadedTime , startTime , firstPartyBusyTime , documentInteractiveTime , navigationStart , totalBlockingTime deprecated, largestContentfulPaint , visuallyCompleteTime , cdnBusyTime , endTime , domCompleteTime , networkTime , loadEventStart , serverTime , firstInputDelay , responseStart , thirdPartyBusyTime , duration , loadEventEnd , responseEnd , frontendTime , requestStart
userevent startTime
usererror startTime

Пример

SELECT country, COUNT(*), COUNT(city), COUNT(DISTINCT city)

FROM usersession

GROUP BY country

TOP(field, 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(datefield), MONTH(datefield), DAY(datefield), HOUR(datefield), MINUTE(datefield)

Возвращает заданный элемент, извлеченный из поля даты.

  • YEAR: Четырехзначный год.
  • 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

DATETIME(datefield [, format [, interval]])

Форматирует выбранное поле даты с заданной строкой формата. Формат по умолчанию — 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

Подобно другим функциям даты ( YEAR, MONTH, DAY, HOUR, и MINUTE), вы можете использовать его DATETIME для форматирования результата (даже результата других функций, таких как MAX, MIN, AVG, или CONDITION), создания гистограмм или получения списка временных меток, где есть результаты, например, дни недели, когда использовалось приложение.

Пример

SELECT application, DATETIME(MAX(starttime)) AS LastUsedTime FROM useraction GROUP BY application

SELECT DATETIME(starttime, "HH") AS hourOfDay, COUNT(*) FROM usersession GROUP BY hourOfDay

SELECT application, DATETIME(starttime, "E") AS daysOfWeek FROM useraction GROUP BY application

SELECT DATETIME(CONDITION(MAX(startTime), WHERE name = "index.jsp")) FROM useraction

CONDITION(function, condition)

Позволяет комбинировать несколько функций с различными условиями.

Допустимые функции в строке формата следующие:

  • 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

PERCENTILE

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

Пример

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(customProperty)

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

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

KEYS(customProperty) Table Action properties Session properties
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 или NOT BETWEEN, <lowerLimit> и <upperLimit>.

Пример 1

SELECT DISTINCT ip FROM usersession

WHERE ip BETWEEN '192.168.0.0' AND '192.168.255.255'

Пример 2

SELECT startTime FROM useraction

WHERE NOT startTime BETWEEN $NOW - DURATION("2h") AND $NOW

Пример 3

SELECT ip, browserType, userId, city

FROM usersession

WHERE NOT ip BETWEEN '52.179.11.1' AND '52.179.11.255'

Сеты

Строковое "STARTSWITH" условие проверяет, начинается ли строка или поле перечисления с указанного текста.

Пример

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 datetime с часовым поясом 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.

Иногда запросы со значениями datetime могут давать неверные результаты из-за преобразования летнего времени. Если дата в запросе предшествует дате окончания летнего времени (например, до 7 ноября 2021 г. 02:00), попробуйте использовать ISO datetime со смещением времени, например, 2021-10-05T17:30:00+03:00.

Пример

SELECT starttime FROM usersession WHERE starttime > "8.8.2018 8:00"

Оптимизация условий

IN

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

Пример ДО

SELECT COUNT(*) FROM userevent

WHERE pageReferrer = "/some/page/referrer/1"

  OR pageReferrer = "/some/page/referrer/2"

  OR pageReferrer = "/some/page/referrer/3"

  OR pageReferrer = "/some/page/referrer/4"

  OR pageReferrer = "/some/page/referrer/5"

Пример ПОСЛЕ

SELECT COUNT(*) FROM userevent

WHERE pageReferrer IN ("/some/page/referrer/1",

  "/some/page/referrer/2",

  "/some/page/referrer/3",

  "/some/page/referrer/4",

  "/some/page/referrer/5")

NOT IN

Чтобы оптимизировать скорость выполнения запросов, используйте массивы для запросов: вместо использования нескольких операторов NOT, <> или != используйте оператор NOT IN .

Пример ДО

SELECT useraction.name, usersession.userId

FROM useraction

WHERE name = "loading of page /"

  AND usersession.userId IS NOT NULL

    AND usersession.userId <> "Speed Travel Agency"

    AND usersession.userId <> "some user"

    AND usersession.userId <> "easyTravel - One step to happiness"

    AND usersession.userId <> "easyTravel - Booking - Finish"

Пример ПОСЛЕ

SELECT useraction.name, usersession.userId

FROM useraction

WHERE name = "loading of page /"

  AND usersession.userId IS NOT NULL

    AND NOT usersession.userId IN ("Speed Travel Agency",

    "some user",

    "easyTravel - One step to happiness",

    "easyTravel - Booking - Finish")

Расширенные синтаксические конструкции

Запрос диапазонов 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

Селекторы таймфреймов можно использовать для ограничения таймфреймов запросов, которые выполняются на вторичных таблицах (useraction). По умолчанию фильтр таймфрейма применяется к таблице usersession , даже если запрос выполняется на любой вторичной таблице. Чтобы применить фильтр также и к вторичной таблице, можно использовать селектор таймфреймов для добавления условия к полю вторичной таблицы startTime . См. следующий пример для извлечения nameи durationдействий пользователя, которые произошли только в течение таймфрейма запроса:

Пример

SELECT name, duration FROM useraction

WHERE startTime BETWEEN $TIME_FRAME_START and $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")

Вторичные таблицы для usersession, useraction, userevent, и usererror

При использовании SELECT с usersession, useraction, userevent, или usererror столбцы из другой таблицы могут быть доступны и включены в результаты путем добавления к именам столбцов префикса имени таблицы.

Пример 1

Выбор логического представления usersession или useraction таблицы. Несколько значений объединяются в результирующем столбце при добавлении информации из useraction в запрос по usersession.

SELECT city, useraction.name FROM usersession

SELECT usersession.city, name FROM useraction

Вы можете использовать другие вторичные таблицы userevent таким usererror же образом.

SELECT usersession.country, name, page FROM userevent

SELECT usersession.country, name, type FROM usererror

SELECT country, userevent.name, usererror.name FROM usersession


При запросе из usersession первичной таблицы можно комбинировать поля из других вторичных таблиц (useraction, userevent, и usererror). В условии можно использовать WHERE также поля из вторичных таблиц.


Пример 2

SELECT city, useraction.name, userevent.page, usererror.type FROM usersession

SELECT city, usererror.name, userevent.page, useraction.duration FROM usersession WHERE usererror.name IS NOT NULL


Пример 3

Перечисление всех сеансов пользователей, содержащих пользовательское событие или действие пользователя из одного и того же приложения.

SELECT * FROM usersession

WHERE userevent.application = "a" OR useraction.application="a"


При запросе из любой из вторичных таблиц (useraction, userevent, или usererror) вы можете использовать поля только из usersession первичной таблицы; вы не можете использовать поля из других вторичных таблиц. Например, запрос ниже не выполняется, так как выбрана таблица , что означает, что можно выбрать userevent только поля из userevent или .usersession

SELECT usersession.city, useraction.name, userevent.page, usererror.type FROM userevent

Такое же ограничение применяется к другим вторичным таблицам — useraction и usererror.


Пример 4

Следующие запросы не будут выполнены, поскольку используются только поля из выбранной вторичной таблицы и из первичной таблицы.

SELECT usersession.userId, name, duration FROM useraction

SELECT usersession.userId, name, type FROM usererror


Применяемые условия различаются по значению в зависимости от таблицы. Например, предположим, что вы хотите перечислить все сеансы пользователя, которые содержат действия пользователя с именами a и b:

SELECT * FROM usersession

WHERE useraction.name = "a" AND useraction.name = "b"

Это означает, что сеанс должен содержать действие пользователя с именем "a" и действие пользователя с именем "b". Выполнение того же запроса в useraction таблице возвращает пустой результат, поскольку одно и то же действие пользователя не может иметь два разных значения для имени.

Если вы хотите выбрать данные сеанса пользователя для определенного действия пользователя, которое соответствует нескольким критериям, выполните следующий запрос к useraction таблице.

SELECT usersession.*, * FROM useraction

WHERE useraction.name = "a" AND useraction.duration > 1000

В этом случае каждое действие пользователя в результате удовлетворяет обоим условиям.

Давайте рассмотрим другой запрос.

SELECT COUNT(usersession.userSessionId)

FROM usersession

WHERE userevent.name = 'Page change'

  AND userevent.pageGroup = '/Booking'

  AND userevent.type = 'UserTag'

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

Если вы запустите тот же запрос в userevent таблице, условия будут применены к каждому отдельному событию пользователя. Это означает, что только сеансы пользователя, которые имеют хотя бы одно событие пользователя, удовлетворяющее всем условиям, будут отражены в подсчете.

SELECT COUNT(usersession.userSessionId)

FROM userevent

WHERE userevent.name = 'Page change'

  AND userevent.pageGroup = '/Booking'

  AND userevent.type = 'UserTag'

Фильтрация с использованием полей вторичной таблицы

Будьте осторожны при фильтрации с использованием полей одной из вторичных таблиц. Рассмотрим примеры ниже.

Пример 1

SELECT useraction.name FROM usersession WHERE useraction.name="abc"

Этот запрос возвращает список всех сеансов пользователя, которые содержат хотя бы одно действие пользователя с именем abc. Результат содержит список всех действий пользователя для каждого сеанса, поскольку запрос выполняется на usersession уровне.

Пример 2

SELECT name FROM useraction WHERE name="abc"

Этот запрос извлекает список только тех действий пользователя, которые имеют имя abc.

SELECT * FROM table

Пример

SELECT * FROM usersession

SELECT useraction.* FROM usersession

SELECT city, useraction.* FROM usersession

SELECT *, useraction.* FROM usersession

Звездочка * сама по себе выбирает столбцы из основной таблицы, а не из вторичной. Например, поля из useractionне включены в SELECT * FROM usersession, если только вы не включите useraction.*.

Экспорт JSON

Ключевое JSON слово добавляет дополнительный столбец, содержащий данные о запрошенной записи (сеанс пользователя, действие пользователя, событие пользователя или ошибка пользователя) в формате JSON.

Если выбрать usersession основную таблицу, будут возвращены полные строки JSON для соответствующих сеансов пользователей независимо от выбранных столбцов.

Пример 1

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

SELECT usersessionId, browserFamily, useraction.name, useraction.duration, JSON

FROM usersession LIMIT 5


Если выбрана вторичная таблица ( useraction, userevent, или usererror), возвращаются полные строки JSON для соответствующей подзаписи (действие пользователя, событие пользователя или ошибка пользователя).

Пример 2

SELECT name, duration, JSON

FROM useraction LIMIT 5

Экранирование строк

Строковые литералы можно заключать в одинарные или двойные кавычки. Однако, если вы хотите использовать одну и ту же кавычку внутри строки, просто удвойте ее.

Пример

SELECT * FROM usersession WHERE userId = "some 'custom' name for ""my user"""

SELECT * FROM usersession WHERE userId = 'some ''custom'' name for "my user"'

Funnel charting

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

Пример

RE userISELECT 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"

  • FUNNEL не поддерживает упорядочивание. Нет гарантии, что useraction1 произошло раньше useraction2 для SELECT FUNNEL (useraction.name = "useraction1", useraction.name = "useraction2") FROM usersession запроса. Этот запрос является эквивалентом только двух операторов SELECT.

Доступные таблицы и поля данных сеанса пользователя

Для данных сеансов пользователей доступны следующие таблицы.

  • usersession содержит информацию о сеансах пользователей .
  • useraction хранит данные о действиях пользователя .
  • userevent предоставляет информацию о событиях пользователя , таких как изменение страницы или события ярости.
  • usererror содержит больше данных о событиях ошибок , т.е. об ошибках и сбоях.

Вторичные таблицы для usersession, useraction, userevent, и usererror включают описание того, как данные в одной из этих таблиц доступны в другой.

Выполнение запросов 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.astromkey.com/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.astromkey.com/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]

        }

    }

}

Преобразование запросов в пользовательские метрики USQL

Вы можете преобразовать некоторые запросы в пользовательские метрики USQL для своих веб-приложений , мобильных приложений и пользовательских приложений .

Пользовательские метрики USQL доступны как пользовательские метрики сеанса пользователя (USCM) и пользовательские метрики действий пользователя (UACM). Пользовательские метрики действий пользователя поддерживаются с АппОптима версии 1.260.

  1. Перейдите в раздел SQL-запросы сессий.
  2. Введите запрос, а затем нажмите на кнопку Выполнить запрос .
  3. Выберите Создать пользовательскую метрику .
  4. Введите название метрики, а затем просмотрите предлагаемые настройки.

Ограничения

  • АппОптима сохраняет и сохраняет Real User Monitoring (действия и сеансы пользователя) в течение ограниченного периода времени. Подробности см. в разделе Периоды хранения данных .
  • По умолчанию возвращается 50 результатов, но количество результатов можно увеличить до 5000 с помощью ключевого слова LIMIT.
  • Количество потенциальных максимальных результатов в сегментах ограничено максимумом в 100 000. Значение по умолчанию — 10 000. Это влияет на то, как TOP()применяется при использовании DISTINCTили GROUP BY. Если не указаноTOP(), 10 000 возможных результатов равномерно распределяются по указанным столбцам. Эти значения по умолчанию можно перезаписать, указав для каждого столбца TOP(). Умноженные значения 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 не поддерживаются.
  • Запросить можно только закрытые сеансы пользователей. Сеансы активных пользователей не учитываются.
  • Заказ поддерживается частично. Например, сортировка по математической операции не поддерживается. SELECT endTime - startTime AS duration FROM usersession ORDER BY duration
  • Для обширных временных рамок и высоконагруженных сред мы можем экстраполировать данные из выборочного подмножества (уровень экстраполяции). Это происходит независимо от того, используете ли вы API АппОптима или веб-интерфейс АппОптима. Если вам нужны 100% точные данные, уменьшите временные рамки или добавьте дополнительные условия для дальнейшей фильтрации запрашиваемых данных.
  • Функции в предложении не допускаются GROUP BY. Поэтому, если вы хотите сгруппировать по месяцам, укажите псевдоним.
  • FUNNELнельзя использовать с SELECT *функциями, ключевыми словами, такими как JSON, и операторами GROUP BY, ORDERи LIMIT.
  • Для математических операций поддержка GROUP BY, ORDER BYи других операций над функциями недоступна.
  • К . можно применить максимум 10 условий FUNNEL.
  • Некоторые поля, такие как duration, всегда возвращают целые значения вместо десятичных, когда над ними выполняются математические операции, такие как деление. Это происходит потому, что эти поля хранятся и отображаются как целые значения. Например, SELECT duration FROM usersessionвозвращает длительность 4800, а SELECT duration/1000 FROM usersessionвозвращает длительность 5.
Содержание