MDX结果集过滤求助:仅保留Dimension A Value 1计数为1的行
MDX过滤:仅保留Dimension A Value 1对应的Count为1的行
我明白刚从SQL转MDX的痛苦——多维思维确实需要一点转换。你的需求是只保留那些**[Dimension A].[Value 1]对应的Count度量值等于1**的Entity行,完全忽略[Value 2]的Count数值,对吧?
先整理下你的结果集(修正了期望结果集中的笔误,核心逻辑不变):
原始结果集
| Dimension A Value 1 | Dimension A Value 2 | Entity ID | Count(Value1对应) | Count(Value2对应) |
|---|---|---|---|---|
| 11 | 1 | 78 | 1 | 90 |
| 1 | 101 | 1 | 114 | 1 |
| 118 | 1 | 125 | 1 | 134 |
| 1 | 140 | 1 | 161 | 1 |
| 169 | 1 | 186 | 1 | 2 |
期望过滤后的结果集
| Dimension A Value 1 | Dimension A Value 2 | Entity ID | Count(Value1对应) | Count(Value2对应) |
|---|---|---|---|---|
| 11 | 1 | 78 | 1 | 90 |
| 118 | 1 | 125 | 1 | 134 |
| 169 | 1 | 186 | 1 | 2 |
修改后的MDX语句
WITH SET [~COLUMNS] AS {[Dimension A].[Dimension A].[Value 1], [Dimension A].[Dimension A].[Value 2]} SET [~ROWS] AS {[Entity].[Entity].[Entity ID].Members} SELECT NON EMPTY CrossJoin([~COLUMNS], {[Measures].[Count]}) ON COLUMNS, NON EMPTY Filter( [~ROWS], -- 核心过滤条件:当前行的Entity在Value1维度下的Count等于1 ([Dimension A].[Dimension A].[Value 1], [Measures].[Count]) = 1 ) ON ROWS FROM [My Cube]
关键逻辑解释
- Filter函数的核心作用:MDX的
Filter是对集合(这里是所有Entity ID成员)逐行判断条件,只有符合条件的成员才会留在最终的行集中。 - 多维上下文的指定:
([Dimension A].[Dimension A].[Value 1], [Measures].[Count])是MDX的典型写法——它表示:针对当前行的Entity,计算当列维度固定为Value1时的Count值。这就是和SQL的核心区别:你需要明确指定要计算的维度上下文,而不是像SQL那样只写列名。 - 为什么之前的尝试失败:
NonEmpty只会过滤掉所有度量值都为空的行,无法按特定维度成员的度量值筛选;如果Filter的条件没指定Value1的上下文,就无法精准定位到你要判断的那个Count值。
内容的提问来源于stack exchange,提问作者nooboy
相关产品推荐
相关产品推荐

