OBIEE 中的 TOPN 显示功能如何工作?以及如何使用 SQL Server 做到这一点?
where TOPN(N,10) <= 10)
这是我的查询
SELECT
N,
SUM(column),
REPORT_SUM(SUM(column) BY N)
FROM
TABLE
WHERE
(TOPN(N,10) <= 10)
OBIEE 中的 TOPN 显示功能如何工作?以及如何使用 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 表达式。
下面是输入公式的截图,以及从 OBIEE 为公式下发到数据库的物理 SQL:
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