Я пытаюсь использовать конструктор запросов WebI для достижения чего-то, чего я уже могу достичь, написав чистый SQL-запрос.
Требование: подсчитать процентную долю билетов, для которой конкретная группа заняла больше времени, чем произвольный предел времени, для передачи заявки в любую группу второй линии по отношению ко всем заявкам, проходящим через эту группу.
Для этого я выбираю конкретные строки из таблицы аудита и использую функцию T-SQL LAG (), чтобы получить время предыдущего изменения группы (для этого уже есть объект в юниверсе). Из-за того, как работает LAG (), я выбираю все строки изменения группы (и запись создания) в качестве промежуточных результатов, чтобы можно было рассчитать время, в течение которого билет находился в любой группе (ticket = '...'
просто ограничить). время выполнения при разработке):
SELECT
ticket,
change_date,
LAG(change_date) OVER (PARTITION BY ticket ORDER BY change_date) 'change_date_prev',
CASE
WHEN LAG(change_date) OVER (PARTITION BY ticket ORDER BY change_date) IS NULL THEN 0
ELSE change_date-LAG(change_date) OVER (PARTITION BY ticket ORDER BY change_date)
END AS duration,
group_before,
group_after
FROM audit_log
WHERE
ticket = 'cr:2792293'
AND (
aud_opr = 'create'
OR changed_attr ='group'
)
В результате получается что-то вроде этого:
ticket change_date change_date_prev duration group_before group_after
------ ----------- ---------------- -------- ------------ -----------
cr:2792293 1554802730 NULL 0
cr:2792293 1554802808 1554802730 78 SUP-GroupA OtherGroupA
cr:2792293 1554805870 1554802808 3062 OtherGroupA OtherGroupB
cr:2792293 1554806322 1554805870 452 OtherGroupB OtherGroupC
cr:2792293 1555319896 1554806322 513574 OtherGroupC SUP-GroupA
cr:2792293 1555341997 1555319896 22101 SUP-GroupA OtherGroupA
cr:2792293 1555343530 1555341997 1533 OtherGroupA SUP-GroupA
cr:2792293 1555343625 1555343530 95 SUP-GroupA SUP-GroupB
cr:2792293 1555344681 1555343625 1056 SUP-GroupB OtherGroupA
cr:2792293 1555346162 1555344681 1481 OtherGroupA SUP-GroupA
cr:2792293 1555346629 1555346162 467 SUP-GroupA OtherGroupB
cr:2792293 1555346961 1555346629 332 OtherGroupB OtherGroupC
cr:2792293 1555417764 1555346961 70803 OtherGroupC SUP-GroupA
cr:2792293 1555419234 1555417764 1470 SUP-GroupA SUP-GroupC
cr:2792293 1555424241 1555419234 5007 SUP-GroupC SUP-GroupA
cr:2792293 1555513936 1555424241 89695 SUP-GroupA SUP-GroupC
Теперь мне нужно уточнить этот набор результатов, чтобы получить два числа:
- Количество билетов, где
group_before
SUP-GroupA. На чистом SQL я бы использовал базовый запрос в качестве подзапроса для части FROM следующим образом (для визуализации отчета нужны оставшиеся столбцы), а затем просто подсчитал тикет в отчете:
SELECT
*
FROM ( <base query> ) AS transfers
WHERE
transfers.group_before = 'SUP-GroupA'
- Количество билетов, где
group_before
- это SUP-GroupA, group_after
- это какая-то другая группа SUP- *, а продолжительность больше некоторого произвольного значения (опять же, оставляя счет для отчета):
SELECT
*
FROM ( <base query> ) AS transfers
WHERE
transfers.group_before = 'SUP-GroupA'
AND transfers.group_after LIKE 'SUP-%'
AND transfers.duration > 1234
Эти запросы отлично работают при выполнении их для БД, но независимо от того, какое колдовство я пытаюсь использовать в Web Intelligence и в юниверсе, я не могу заставить построитель запросов генерировать аналогичный запрос. Функции подзапроса в WebI, которые мне известны, делают подзапрос в предложении WHERE, но это не сработает для меня, так как функция LAG () работает со строками возвращаемого набора результатов, поэтому, если я отфильтрую их по простой запрос change_date_prev
получит change_date
из предыдущей возвращенной строки, а не из предыдущего изменения группы.
Я знаю, что есть грязный способ обойти это вручную, написав запрос в просмотрщике сценариев запросов в построителе запросов, но я стараюсь избегать этого, как чумы, из-за того, что ручной запрос перезаписывается, если кто-то даже смотрит на запрос Строитель позже.
Нарушаю ли я ограничения Web Intelligence или есть способ обойти это без жесткого кодирования большого количества одноразовых объектов во вселенной?