Как работает функция отображения TOPN в OBIEE? И как я могу сделать это с SQL Server?
where TOPN(N,10) <= 10)
это мой запрос
SELECT
N,
SUM(column),
REPORT_SUM(SUM(column) BY N)
FROM
TABLE
WHERE
(TOPN(N,10) <= 10)
Как работает функция отображения TOPN в OBIEE? И как я могу сделать это с SQL Server?
where TOPN(N,10) <= 10)
это мой запрос
SELECT
N,
SUM(column),
REPORT_SUM(SUM(column) BY N)
FROM
TABLE
WHERE
(TOPN(N,10) <= 10)
См. http://gerardnico.com/wiki/dat/obiee/topn.
Функция topn используется в формуле столбца критериев, но имеет результат меньшего набора данных. Если вы используете topn(column, 10), ваш результирующий набор будет состоять только из 10 строк.
Функция topn не передается обратно в базу данных, но в базу данных будет отправлен соответствующий запрос. Например, в Oracle RDBMS подзапрос содержит функцию ранжирования и внешние фильтры запроса на основе ранга.
Какой запрос он отправляет на SQLServer? Я не знаю, и, возможно, кто-то другой сможет ответить.
С точки зрения OBIEE функция TOPN позволяет OBIEE выполнять анализ TOPN. Анализ Top 'N' относится к получению первых n строк из набора результатов (например, найти трех лучших сотрудников по зарплате). Когда вы добавляете TOPN в качестве столбца формулы в ответ, данные автоматически фильтруются. Вам не нужно добавлять какой-либо специальный фильтр TOPN.
Выражение выглядит следующим образом:
TOPN (n_expression, n)
куда:
Обратите внимание: запрос может содержать только одно выражение TOPN.
Ниже приведен снимок экрана с введенной формулой и физический SQL, выданный базе данных из OBIEE для этой формулы:
SELECT DISTINCT D1.c1 AS c1, D1.c2 AS c2, D1.c3 AS c3
FROM (SELECT DISTINCT
0 AS c1,
D1.c1 AS c2,
CASE
WHEN CASE
WHEN D1.c2 IS NOT NULL
THEN
RANK () OVER (ORDER BY D1.c2 DESC NULLS LAST)
END <= 8
THEN
CASE
WHEN D1.c2 IS NOT NULL
THEN
RANK () OVER (ORDER BY D1.c2 DESC NULLS LAST)
END
END
AS c3
FROM ( SELECT SUM (T428861.POUND_AMT) AS c1,
T428861.PURCH_ORDER_NUM AS c2
FROM WC_ASN_SHIP_F T428861
WHERE (T428861.FINAL_SAMPLE_FLG = 'Y'
AND T428861.DELETE_FLG = 'N')
GROUP BY T428861.PURCH_ORDER_NUM) D1) D1
WHERE (D1.c3 <= 8)
ORDER BY c1
http://gerardnico.com/wiki/dat/obiee/topn