Функция отображения OBIEE TOPN

Как работает функция отображения 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)

person QAIS    schedule 22.09.2014    source источник


Ответы (2)


См. http://gerardnico.com/wiki/dat/obiee/topn.

Функция topn используется в формуле столбца критериев, но имеет результат меньшего набора данных. Если вы используете topn(column, 10), ваш результирующий набор будет состоять только из 10 строк.

Функция topn не передается обратно в базу данных, но в базу данных будет отправлен соответствующий запрос. Например, в Oracle RDBMS подзапрос содержит функцию ранжирования и внешние фильтры запроса на основе ранга.

Какой запрос он отправляет на SQLServer? Я не знаю, и, возможно, кто-то другой сможет ответить.

person jackohug    schedule 24.09.2014

С точки зрения OBIEE функция TOPN позволяет OBIEE выполнять анализ TOPN. Анализ Top 'N' относится к получению первых n строк из набора результатов (например, найти трех лучших сотрудников по зарплате). Когда вы добавляете TOPN в качестве столбца формулы в ответ, данные автоматически фильтруются. Вам не нужно добавлять какой-либо специальный фильтр TOPN.

Выражение выглядит следующим образом:

TOPN (n_expression, n)

куда:

  • n_expression — это любое выражение, результатом которого является числовое значение.
  • n — это N из TopN, которое представляет собой любое положительное целое число. Представляет максимальное количество рейтингов, отображаемых в наборе результатов, где 1 — самый высокий рейтинг.

Обратите внимание: запрос может содержать только одно выражение TOPN.

Ниже приведен снимок экрана с введенной формулой и физический SQL, выданный базе данных из OBIEE для этой формулы:

Изображение используемой формулы TOPN

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

person Mark P.    schedule 22.09.2014
comment
Я не думаю, что функция TOPN OBIEE такая же, как TOP() в SQL! - person QAIS; 22.09.2014
comment
@mark-p Это запрос, который OBI генерирует для SQLServer? Ваш ответ показывает, как функция TOP работает на SQLServer, но не указывает, является ли это функцией, которую вызывает OBI. - person jackohug; 24.09.2014
comment
Исправлено с помощью примера Physical SQL от OBIEE - person Mark P.; 26.09.2014