过滤度量(或删除异常值)

时间:2009-11-20 15:37:04

标签: mdx cube cubes

假设我在多维数据集中有一个度量foo,并且我有一个报告要求,用户希望在报告中看到以下度量:

total foo
total foo excluding instances where foo > 10
total foo excluding instances where foo > 30

处理此问题的最佳方法是什么? 在过去,我添加了命名计算,如果NULL则返回foo > 10,否则返回foo。 我觉得必须有一种方法可以在MDX中实现这一点(类似于Filter([Measures].[foo], [Measures].[foo] > 10)),但我不能为我的生活做出任何贡献。

有什么想法吗?

3 个答案:

答案 0 :(得分:3)

诀窍是你需要在你的套装上应用滤镜,而不是你的尺度。

例如,使用通常的Microsoft“仓库和销售”演示多维数据集,以下MDX将显示销售额超过2000美元的所有商店的销售额。

SELECT Filter([Store].[Stores].[Store].members, [Unit Sales] > 2000) ON COLUMNS,
[Unit Sales] ON ROWS
FROM [Warehouse and Sales]

答案 1 :(得分:0)

我认为你有两个选择:

1-在您的事实中添加列(或在基于事实表的数据源视图上查看),如:

case when unit_Price>2000 then 1 
     else 0  
end as Unit_Price_Uper_Or_Under_10 

并根据此列值添加虚构的Dimension。 并为New Dimension添加命名查询(比如datasourceview中的Range_Dimension:      选择1作为范围     联合所有     选择0作为范围

之后你不能像其他维度和属性一样使用这个过滤器。

 SELECT [Store].[Stores].[Store].members ON COLUMNS,
[Unit Sales] ON ROWS
FROM [Warehouse and Sales]
WHERE [Test_Dimension].[Range].&[1]

问题在于您必须添加When条件的每个范围,并且只有当范围是静态时,此解决方案才是一个很好的解决方案。 对于动态范围,最好配制范围(基于消除方法)

2-基于事实表在事实表附近添加粒度尺寸 例如,如果我们有主键Sale_id的事实表。我们可以添加 基于事实表的维度,只有一列sale_Iddimension Usage tab 我们可以将此new dimensionmeasure group与关系类型Fact相关联 之后在mdx中我们可以使用类似的东西:

filter([dim Sale].[Sale Id].[Sale Id].members,[Measures].[Unit Price]>2000)

答案 2 :(得分:0)

我在使用saiku(后端与Mondrain)时遇到了类似的问题,因为我没有找到任何明确的“添加过滤器测量”的解决方案,我在这里添加了它,这可能对其他人有用。

在Saiku3.8中,您可以在UI上添加过滤器:“column” - >“filter” - >“custom”,然后您可能会看到Filter MDX Expression。

我们假设我们希望Ad中的点击次数大于1000,然后在那里添加以下行:

[Measures].[clicks] > 1000

保存并关闭,然后该过滤器对于点击次数大于1000的查找元素有效。

MDX喜欢以下(假设dt为尺寸和点击次数,我们希望找到点击次数超过1000的dt)

WITH
SET [~ROWS] AS
    Filter({[Dt].[dt].[dt].Members}, ([Measures].[clicks] > 1000))
SELECT
NON EMPTY {[Measures].[clicks]} ON COLUMNS,
NON EMPTY [~ROWS] ON ROWS
FROM [OfflineData]