【发布时间】:2015-04-08 17:21:34
【问题描述】:
以下查询具有不同的结果集,具体取决于我在 WHERE 子句中使用的 [Measures]。 激活 [Measures].[MetricFormula] 而不是 [Measures].[Actual],查询会提供不同的(和预期的)结果。
WITH
MEMBER [Measures].[MetricFormula] AS Measures.[Downloads]
MEMBER [Measures].[Actual] AS [Measures].[MetricFormula], LANGUAGE = 1031,FORMAT_STRING='#,##0'
SET [mySet] as
topcount(
nonempty(
filter(
distinct descendants({[AppPackages].[AppPackages].&[F_TAAM00000069]}),
[Measures].[MetricFormula] <> 0 AND ([AppPackages].[AppPackages].PROPERTIES('AppTypeID') = 'DETAIL')
),
[Time].[Calendar].[Date].&[2015-03-22T00:00:00]:[Time].[Calendar].[Date].&[2015-03-31T00:00:00]
)
,6
,aggregate([Time].[Calendar].[Date].&[2015-03-22T00:00:00]:[Time].[Calendar].[Date].&[2015-03-31T00:00:00], [Measures].[MetricFormula]))
select
([Time].[Calendar].[Date].&[2015-03-22T00:00:00]:[Time].[Calendar].[Date].&[2015-03-31T00:00:00]) ON COLUMNS,
([mySet]) ON ROWS
FROM [Facts]
WHERE (
--([Measures].[MetricFormula]),
([Measures].[Actual]),
{[DownloadTypes].[DownloadTypes].&[New]}
)
([Measures].[Downloads] 是多维数据集中定义的真正度量。)
问题:为什么它会产生不同的结果? 我使用这个结构(以各种形式)来简化基于代码的查询生成。 在开始重新设计查询生成器之前,我想了解这些差异。
背景: 该查询应该根据给定的度量计算给定时间范围内给定 AppPackage 的前 6 个后代。我首先找到时间范围的(非空)后代,在其上添加顶部计数,确保时间聚合度量值驱动顶部计算。最后,我将评估集放在行上,将时间放在列上,指定在哪里看什么。除了所描述的效果之外,它的效果很好。
【问题讨论】:
-
有趣的问题 - 我将针对 AdvWks 进行测试。如果你简化这个集合,它的行为是否仍然相同?
-
好点。我删除了 topcount 并保留了其他所有内容 (nonempty(filter(..)) => 集合没有改变。嗯......要考虑的事情......
-
Measures.[Downloads]是直接来自 RDBMS 吗?如果是,该列的数据类型是什么?如果没有,您如何在多维数据集中创建此度量? -
@Sourav_Agasti:是的,它来自 RDBMS,Cube 中的类型是货币。
-
@whytheq:我刚刚用一个简单的(r)topcount 进行了测试:问题仍然存在 => 我会看看 topcount 在做什么。