我是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
排序,我想按照一周中的日期顺序排序。
答案 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多维模型中进行的更改。你有两个选择: