0

我构建了一个 MDX 查询,以从 OLAP Cube 中检索特定文章。基本上,它返回由特定制造商生产的特定文章类别节点下的文章:

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

现在我想增强这个查询以支持分页和排序。意思是我可以提供:

  • 页面索引(如 0)
  • 页面大小(如 30)
  • 排序列(如 Ar LongName)
  • 排序方向(如升序)

我应该采取什么方法?我查看了Subset and order子句。但是那些基本上限制了查询“层次化”部分的结果,这意味着它们切断了层次结构而不是最终结果。

谁能给我一个提示如何让分页和排序工作?

4

2 回答 2

1

在 MDX 中排序是一件很痛苦的事情,或者至少我一直是这么认为的。如果您的查询在行上只有一个维度,在列上只有一个维度,它将使生活变得更加简单。

ORDER 关键字可以应用于一个集合,您只需给它一个要排序的数字,并告诉它使用 ASC 或 DESC 的方式。

ASC 或 DESC 问题变得令人困惑,因为您也可以指定 BASC 或 BDESC。“B”表示“中断”,它表示您是否希望行(或列)在其层次结构组中进行排序,或者您是否希望在排序时完全打破层次结构,并对行进行完全重新排序。

这是一个简单的例子

ORDER({[Time].[Month].members}, [Measures].[Gross Sales], BASC)

这意味着您要按总销售额值的升序列出所有月份。您正在打破层次结构,以便月份不会在其父年份中保持分组,并且可以通过排序操作完全混合。

于 2009-05-19T11:23:12.990 回答
0

看看下面的例子

我已按销售额降序列出产品

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]

结果

在此处输入图像描述

于 2019-06-06T18:58:47.937 回答