我正在努力获得MDX查询以从子级别中选择TOP N.
在下面的数据集中,我试图每天获得销售员和最高销售额(突出显示) - 请注意" Ben"在最后一天之前没有任何销售数据: -
所以我希望看到的是: -
我查看了这篇文章" Generate, TopCount, and All Others"并创建了这个查询: -
WITH
SET [DateTime2Set] AS ([Time].[Day].&[20171101]:[Time].[Day].&[20171106])
SET [Sales Guys] AS [Sales Persons].MEMBERS
SET [TopSales] AS
GENERATE(
DateTime2Set,
TopCount(
EXISTING [Sales Guys],
1,
[Sales Amount]
)
)
SELECT
{
[Sales Amount]
}
ON 0,
{
NonEmpty(
(
[DateTime2Set],
[TopSales]
)
,[Sales Amount]
)
}
ON 1
FROM [Cube]
当我运行查询时,我得到以下结果,带有意外的项目(突出显示)
所以正在发生的事情是每天的最高项目被添加到整个集合中,然后加入到日期中。
这不是我要求的。 我尝试添加交叉连接,如MSDN documentation for the MDX Generate function中所述: -
SET [TopSales] AS
GENERATE(
DateTime2Set,
TopCount(
[Time].[Day].CURRENTMEMBER * [Sales Guys],
1,
[Sales Amount]
)
)
但是得到错误: -
在Crossjoin函数中多次使用Day层次结构
如何更改查询以获得我需要的结果?
答案 0 :(得分:1)
好的,我终于解决了。
SET [TopSales] AS
GENERATE(
DateTime2Set,
TopCount(
DateTime2Set.CURRENTMEMBER * EXISTING Tags,
1,
[Sales Amount]
)
)
SELECT
{
[Sales Amount]
}
ON 0,
{
NonEmpty(
(
[TopSales]
)
,[Sales Amount]
)
}
ON 1
FROM [EventsCube]
我刚刚从列中删除了DateTime2Set,并在[Top Sales]计算成员中交叉加入了DateTime2Set