我正在尝试跨标准偏差和平均值等一系列数据计算各种统计计算。
数据来自许多不同的“数据源”。这些都保存在一个维度中。
我尝试使用此示例STDDEVP
中所示的函数,该函数对度量进行操作。
但结果是错误的。我认为这是错误的,因为它处理的是总数而不是原始数据。[Sum of Values] 是对事实表中的数据求和的标准聚合度量。
按照格雷格提供的链接,我现在正在使用这个:
CREATE MEMBER CURRENTCUBE.[Measures].[Standard Deviation]
AS (([Measures].[Sum of Values]^2 - (([Measures].[Sum of Values]^2)/[Measures].[Count of Values])/[Measures].[Count of Values])^0.5),
FORMAT_STRING = "#,##0.00;-#,##0.00", VISIBLE = 1 , ASSOCIATED_MEASURE_GROUP = 'Fact TS Data';
这给了我这个:
这仍然是不正确的。
使用 SQL 如果我使用STDDEV
以下查询计算 Air Temp:
SELECT stdevp([Value])
FROM [EnvironmentalDataMart].[DDS_HILLTOP].[factTimeSeries]
where [DETL_DataSourceSurrogateKey] = 78
我得到:6.13770334742149
如何让 MDX 查询计算STDDEV
我的维度中的每个数据源?
我也尝试过使用“无聚合”的 Measure,但它没有返回任何内容。
根据您传入的第一个参数,StDev 函数确实以汇总粒度运行。如果您总是想在最低级别计算 StDev,那么您可以编写一些数学上等效的度量并避免使用 StDev MDX 函数。此处描述了此方法。让我知道这是否没有意义。MDX 将是:
有关他所采取步骤的完整解释,请参阅彼得的回答。
此外,如果您坚持使用当前使用的 MDX 方法,您将需要按如下方式修复第一个参数。您的代码将总计计入计算中。此 MDX 不会:
要使其正常工作,您需要:
在 DMV 中添加一列以生成原始值的平方。
对原始值求和的度量。
[Sum of Values]
对原始值的平方求和的度量。
[Sum of Square]
计数措施
[Count of Values]
计算的度量语法是:
如果你想在原始数据上使用它(也就是说,在整个 SQL 表上)它应该在 SQL 级别上运行,不需要为此进行聚合。所以代码 1 的标准偏差有效,所以我建议:在您的 DMV 中添加一个列,该列是针对[数据源名称]上的整个列的标准偏差计算的。