MDX排序:显示日期名称,但按天数排序

时间:2014-06-17 14:50:35

标签: sql sorting ssas mdx

我是MDX的新手,我正在努力进行排序/排序。我想比较一周中的销售情况(周一,周一,周二......)我有一个基于日常表格的日历维度设置加入(我使用的是SQL语言,不熟悉MDX (测量多维数据集)测量多维数据集的日期键。对于每个日期键,我有一个列,表示当天的日期,日期的名称,当天的#(1-7),月份#,周#,月份名称等。

我想显示当天的名字,但按当天的#排序。

我尝试了很多次迭代,但这是我正在使用的简单查询:

SELECT
{
  NONEMPTY([CAL Calendar].[Month Name].Members)
} ON COLUMNS,
{
  ORDER({NONEMPTY([CAL Calendar].[Week Day Name].Members)}, [CAL Calendar].[Week Day].CurrentMember.Member_Name, BDESC)
} ON ROWS
FROM [DEVICE_FACTS]
WHERE ([CAL Calendar].[Cal Date Key].[20140101]:[CAL Calendar].[Cal Date Key].[20140615], [Measures].[Widget_New % (Of AllWidgets)])

我收到错误

"The MDX Function CURRENTMEMBER failed because the coordinate for the "Week Day" attribute contains a set." 

我知道错误来自ORDER()函数[CAL Calendar].[Week Day]的第二个参数。如果第二个参数来自与第一个参数相同的字段,则查询将仅处理结果。但我不想按本周的NAME排序,我想按照一周中的日期顺序排序。

2 个答案:

答案 0 :(得分:0)

WHERE子句只接受元组。元组是多维数据集的一个单元格,意思是,它通过指定1给出,每个维度只有1个成员(如果没有指定成员,则假定为“All”成员。)

在您的查询中,您尝试按一个集合进行切片,这是一系列日期。这样做的方法是首先根据该集合的聚合定义一个成员,然后在元组上使用该新成员:

WITH MEMBER [CAL Calendar].[Current Period] as Aggregate([CAL Calendar].[Cal Date Key].[20140101]:[CAL Calendar].[Cal Date Key].[20140615] )
SELECT
{
  NONEMPTY([CAL Calendar].[Month Name].Members)
} ON COLUMNS,
{
  ORDER({NONEMPTY([CAL Calendar].[Week Day Name].Members)}, [CAL Calendar].[Week Day].CurrentMember.Member_Name, BDESC)
} ON ROWS
FROM [DEVICE_FACTS]
WHERE ([CAL Calendar].[Current Period], [Measures].[Widget_New % (Of AllWidgets)])

答案 1 :(得分:0)

这是您应该在SSAS多维模型中进行的更改。你有两个选择: