Sorting 按维度排序的MDX
在SQL端,我的数据如下所示: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
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
:它应该可以很好地工作。