在日期范围之间使用 TOPCOUNT 的 MDX 查询返回带有一些空值的顶部

Posted

技术标签:

【中文标题】在日期范围之间使用 TOPCOUNT 的 MDX 查询返回带有一些空值的顶部【英文标题】:MDX query with TOPCOUNT between date range returning a top with some empty values 【发布时间】:2014-05-14 13:49:46 【问题描述】:

我正在使用 MDX 查询来获取两个日期之间最喜欢的 10 个产品。奇怪的是,结果是由一些在该日期范围内点赞的产品组成的,而有些则根本没有任何点赞。这是查询:

SELECT
 [Measures].[Likes]  ON COLUMNS,
 TOPCOUNT([Products].[Name].Members, 10, [Measures].[Likes])  ON ROWS
FROM [Likes]
WHERE ( [Date].[2014].[3].[29]:[Date].[2014].[4].[5] )

结果如下:

               [Measures].[Likes]
[Product].[XX]
[Product].[XX]
[Product].[XX]          139
[Product].[XX]
[Product].[XX]           1
[Product].[XX]
[Product].[XX]
[Product].[XX]          125
[Product].[XX]          111
[Product].[XX]           1

如果我将上限更改为 20,例如,结果将有更多的产品有喜欢但也有更多的空产品,并且没有排序(就像顶部通常那样)。

使用 NON EMPTY 使查询只返回 5 个结果而不是 10 个,并且仍然没有排序。

谢谢!

【问题讨论】:

【参考方案1】:

试试这个查询

SELECT [Measures].[Likes] ON 0, Head(ORDER([Products].[Name].Members,[Measures].[Likes], DESC), 10) ON 1 FROM [Likes] WHERE ( [Date].[2014].[3].[29]:[Date].[2014].[4].[5] )

【讨论】:

哇,这行得通,谢谢!但我不明白为什么 TOPCOUNT 没有。有什么线索吗?还有,HEAD(ORDER 的表现是不是和 TOPCOUNT 差不多? 与 BottomCount 函数一样,TopCount 函数总是会破坏层次结构。来源technet.microsoft.com/en-us/library/ms144792.aspx 头部更快(来源social.msdn.microsoft.com/Forums/sqlserver/en-US/…) 如果我做对了,这意味着它不会正确考虑层次结构,而是按指定的数值表达式排序。但在我的示例中,它不是按数字表达式排序的。我在这里想念什么?只有当日期在不同月份时才会发生这种情况。

以上是关于在日期范围之间使用 TOPCOUNT 的 MDX 查询返回带有一些空值的顶部的主要内容,如果未能解决你的问题,请参考以下文章

使用 MDX 查询从日期范围中获取特定日期的时间表

MDX 查询以对具有特定日期范围的日期维度进行分组

具有两个或多个日期范围的 MDX 查询

MDX StrToMember 日期范围问题

如何编写按日期范围和维度成员值进行切片的 mdx 查询

用 MDX 查询的日期范围子句中的现有成员替换不存在的成员