Sorting 按维度排序的MDX

Sorting 按维度排序的MDX,sorting,mdx,pentaho,Sorting,Mdx,Pentaho,在SQL端,我的数据如下所示: Select f.id, f.TimeKey,t.CalendarYearMonth from FactSubmission f inner join DimTime t on t.TimeKey = f.TimeKey order by f.Id asc 从MDX排序我们有降序 SELECT NON EMPTY ORDER( [DimTime.CalendarYearMonth].[CalendarYearMonth].Members, [DimTim

在SQL端,我的数据如下所示:

Select f.id, f.TimeKey,t.CalendarYearMonth 
from FactSubmission f
inner join DimTime t on t.TimeKey = f.TimeKey
order by f.Id asc

从MDX排序我们有降序

SELECT
NON EMPTY ORDER(
 [DimTime.CalendarYearMonth].[CalendarYearMonth].Members,
 [DimTime.CalendarYearMonth].CurrentMember.Properties("MEMBER_KEY"), 
 DESC
 )  ON COLUMNS
FROM [PSE_FactSubmission]

上升

一月日期不在任何排序的顶部,这表明我是按
FactSubmission.ID
键排序,而不是按
DimTime.CalendarYearMonth

事情应该是这样的吗?我想从一月、二月、三月退后

DimTime.CalendarYearMonthNum是一个列,其数据格式为20150120150201503等。下面尝试使用此列对CalendarYearMonth数据进行排序

调试查询以选择键

非空查询

尝试使用其他属性进行排序:

SELECT
NON EMPTY ORDER(
 [DimTime.CalendarYearMonth].[CalendarYearMonth].Members,
 [DimTime.CalendarYearMonth].CurrentMember.Properties("MEMBER_Value"), 
 DESC
 )  ON COLUMNS
FROM [PSE_FactSubmission];
或者可能是这样:

SELECT
NON EMPTY ORDER(
 [DimTime.CalendarYearMonth].[CalendarYearMonth].Members,
 [DimTime.CalendarYearMonth].CurrentMember.MEMBERValue, 
 DESC
 )  ON COLUMNS
FROM [PSE_FactSubmission];
在上述情况下,您应该善于使用
DESC
——有时您需要通过添加
B
来打破底层的层次顺序,即
BDESC


从这里我看不到
成员值

…但是有一个函数
.VALUE
,因此可以尝试以下操作:

SELECT
NON EMPTY ORDER(
 [DimTime.CalendarYearMonth].[CalendarYearMonth].Members,
 [DimTime.CalendarYearMonth].CurrentMember.Value, 
 DESC
 )  ON COLUMNS
FROM [PSE_FactSubmission];

奇怪的是钥匙坏了。如果你运行这样的程序,你会得到什么值

WITH MEMBER [KEYcheck] AS
    [DimTime.CalendarYearMonth].CurrentMember.Properties("MEMBER_KEY")
    //[DimTime.CalendarYearMonth].CurrentMember.MEMBER_KEY
    //[DimTime.CalendarYearMonth].[CalendarYearMonth].CurrentMember.MEMBER_KEY
    //[DimTime].CurrentMember.MEMBER_KEY
SELECT
  [KEYcheck] ON 0,
  [DimTime.CalendarYearMonth].[CalendarYearMonth].Members ON 1
FROM [PSE_FactSubmission];

您正在按字母顺序排序February->January->March

要基于月份编号进行排序,需要有一个字段映射一月一日、二月二日、三月三日

如果多维数据集中有这样一列,请使用该列进行排序。如果没有,创建一个计算成员,如下所示-

WITH MEMBER Measures.CalendarMonth AS
CASE [DimTime.CalendarYearMonth].CurrentMember
 WHEN  [DimTime.CalendarYearMonth].&[January] THEN 1
 WHEN  [DimTime.CalendarYearMonth].&[February] THEN 2
 WHEN  [DimTime.CalendarYearMonth].&[March] THEN 3
END

SELECT
NON EMPTY ORDER(
 [DimTime.CalendarYearMonth].[CalendarYearMonth].Members,
 Measures.CalendarMonth, 
 DESC
 )  ON COLUMNS
FROM [PSE_FactSubmission]
为安德鲁编辑

with member Measures.[MonthNum] as
NonEmpty
    ( 
     [DimTime.CalendarYearMonthNum].[CalendarMonthNum].members,
     ([DimTime.CalendarYearMonth].[CalendarYearMonth].currentmember, Measures.foo)
    ).item(0).membervalue

select
non empty
order
  (
   [DimTime.CalendarYearMonth].[CalendarYearMonth].members,
   Measures.[MonthNum],
   desc
  ) on rows
from [PSE_FactSubmission]
编辑-存在带有

with member Measures.[MonthNum] as
EXISTS
      (
       [DimTime.CalendarYearMonthNum].[CalendarMonthNum].members,
       [DimTime.CalendarYearMonth].[CalendarYearMonth].currentmember,
       "SomeMeasureGroup"
      ).item(0).membervalue

它似乎对字符串进行了排序,这将根据
ASC
/
DESC
顺序产生这样的输出。也许您可以将值更改为月份数,例如:
2016-01
…@ConsiderMe我有点明白您的意思。如果我将第一个和第二个顺序参数切换为严格的数字值,排序将按预期工作。有没有办法选择字符串版本,并按相应的数值排序?非常感谢您回答我所有的MDX问题,查看此处记录的内在属性(),MEMBER\u VALUE可能与MEMBER\u KEY相同?MEMBER_值看起来不是我至少可以使用的属性。考虑到我对字符串与数字排序的问题有一个很好的评论,但是它似乎不允许我从一个不同的列进行排序,而不是我选择的集合。@安德鲁沃尔特看起来像<代码>成员值> <代码>在Modrian中没有实现。请尝试改为使用
.Value
。它看起来像是使用[DimTime.CalendarYearMonth].CurrentMember.Value作为第二个参数,排序方式与使用MEMBER\u键相同property@AndrewWalters除了使用参数
DESC
外,您是否尝试了
BDESC
?我很想知道您在多维数据集中为
CalendarYearMonth
使用了哪些值。Bdesc和Basc的行为方式相同。值应该位于问题的顶部(sql选择)。如果这不是您想要的,请告诉我。我有另一个字段CalendaryearMonthNum,看起来像201501、201502、201503等。我如何使用此字段对CalendarYearMonth值进行排序?非常好!请使用该字段。您能检查我的语法吗?我已经更新了底部的原始问题。在with语句中,Measures.foo应该是什么?@SouravA而不是将
NonEmpty
与度量一起使用,因为
[CalendarMonthNum]
[CalendarYearMonth]
是同一维度中的两个层次结构。您可以使用
EXISTS
函数而不是
NonEmpty
:它应该可以很好地工作。