我构建了一个 MDX 查询,以从 OLAP 多维数据集检索特定文章。基本上,它返回由特定制造商生产的特定文章类别节点下方的文章:
SELECT NON EMPTY
(
Hierarchize
(
{
DrilldownLevel
(
{
[T DAT Article].[Ar ID].[All]
}
)
}
)
)
DIMENSION PROPERTIES PARENT_UNIQUE_NAME,
[T DAT Article].[Ar ID].[Ar ID].[Ar Key],
[T DAT Article].[Ar ID].[Ar ID].[Ar LongName]
ON COLUMNS
FROM [Catalog_2009]
WHERE
(
[T DAT Structure].[St St ID FK].&[193066], -- specific article-category node
[T DAT Firm].[Fi ID].&[86] -- specific manufacturer
)
CELL PROPERTIES VALUE, FORMAT_STRING, LANGUAGE, BACK_COLOR, FORE_COLOR, FONT_FLAGS
现在我想增强这个查询以支持分页和排序。这意味着我可以提供:
我应该采取什么方法?我查看了 Subset 和 order 子句。但这些基本上限制了查询的“层次化”部分的结果,这意味着它们切断了层次结构而不是最终结果..
有人可以给我提示如何让分页和排序工作吗?
排序在 MDX 中是一种痛苦,或者至少我一直这么认为。如果您的查询只有行上的一维和列上的一维,这将使生活变得更加简单。
ORDER 关键字可以应用于集合,您只需给它一个要排序的数字,并告诉它按 ASC 或 DESC 走哪条路。
ASC 或 DESC 问题会变得令人困惑,因为您也可以指定 BASC 或 BDESC。 “B”的意思是“打破”,它表示您是否希望行(或列)在其层次结构组内排序,或者您是否希望在排序时完全打破层次结构,并完全重新排序行。
这是一个简单的例子
ORDER({[Time].[Month].members}, [Measures].[Gross Sales], BASC)
这意味着您想要按总销售额升序列出所有月份。您正在破坏层次结构,因此月份不会在其父年中保持分组,并且可以通过排序操作完全混合。
看下面的例子
我已按销售额降序列出产品
select
{[Measures].[Internet Sales Amount]}on 0,
order ({[Product].[Product].[Product]},
[Measures].[Internet Sales Amount],desc
)on 1
from
[Adventure Works]
结果
现在让我们寻呼他们。我正在创建一个 10 行页面,第 1 页是
select
{[Measures].[Internet Sales Amount]}
on 0,
subset(
order
(
{
[Product].[Product].[Product]
},[Measures].[Internet Sales Amount],desc
)
,0,10)
on 1
from
[Adventure Works]
结果
现在第2页
select
{[Measures].[Internet Sales Amount]}
on 0,
subset(
order
(
{
[Product].[Product].[Product]
},[Measures].[Internet Sales Amount],desc
)
,10,10)
on 1
from
[Adventure Works]
结果