我正在尝试形成一个MDX查询,使其只返回度量符合特定条件的两个维度的组合。我认为使用FILTER功能非常简单,即
SELECT
NON EMPTY FILTER({[Program].[ByRegion].[Program] * [Performance Metric].[Metric].CHILDREN }, [Measures].[Point Percentage] < .95) ON ROWS,
NON EMPTY ( HIERARCHIZE([Calendar Period].[Y-Q-M].[Month of Quarter].&[3]&[1]&[2009]) , [Measures].[Point Percentage] )ON COLUMNS
FROM [QEP Revenue]
然而,在运行查询之后,很容易看出我有一个错误,因为第一个结果的点百分比为1.5172,显然超过.95。
如果我完全删除过滤器:
SELECT
--NON EMPTY FILTER({[Program].[ByRegion].[Program] * [Performance Metric].[Metric].CHILDREN }, [Measures].[Point Percentage] < .95) ON ROWS,
NON EMPTY ({[Program].[ByRegion].[Program] * [Performance Metric].[Metric].CHILDREN }) ON ROWS,
NON EMPTY ( HIERARCHIZE([Calendar Period].[Y-Q-M].[Month of Quarter].&[3]&[1]&[2009]) , [Measures].[Point Percentage] )ON COLUMNS
FROM [QEP Revenue]
我得到一个类似的结果集,包括0.95以上的值。我是否完全忽略了过滤器的要点,或者是否存在尝试一次过滤两个维度的问题?
答案 0 :(得分:3)
我没有你的数据源,但是这个MDX适用于AS2000样本多维数据集,Foodmart(Sales cube)。
SELECT
NON EMPTY
{{[Time].[Quarter].MEMBERS}} ON COLUMNS
,NON EMPTY
Filter
(
CrossJoin
(
{[Customers].[State Province].&[CA]}
,[Promotions].[All Promotions].Children
)
,
(
[Customers].[State Province].&[CA]
,[Time].&[1997].&[Q1]
,[Measures].[Unit Sales]
)
> 300
) ON ROWS
FROM [Sales]
WHERE
[Measures].[Unit Sales];
答案 1 :(得分:0)
我搞砸了。
正在将过滤器正确应用于“程序”和“性能指标”维度。问题是过滤器是与“日历周期”维度分开应用的。因此,允许显示1.5172的点百分比,因为在另一个月有一个点百分比满足过滤器要求。
我能够重写查询,以获得所需的结果:
SELECT
NON EMPTY
Filter
(
{
[Program].[ByRegion].[Program]*
[Performance Metric].[Metric].Children*
[Calendar Period].[Y-Q-M].[Month of Quarter].&[3]&[1]&[2009]
}
,
[Measures].[Point Percentage] < 0.95
) ON ROWS
,NON EMPTY
[Measures].[Point Percentage] ON COLUMNS
FROM [QEP Revenue];
幸运的是,此查询正用于报告服务,因此将日历周期移动到ROWS是合适的。但是,如果我想将日历周期保留在COLUMNS中,我不知道如何解决这个问题,因为不能在两个轴上使用相同的尺寸。