我有一个 MDX 查询,它返回 2 个不同的值,查找总数和查找失败的次数(以及其他一些东西,但这是重要的部分)。
with
member [Pct Success] as 'iif(isempty([Num Lookup]) or [Num Lookup]=0, null,
100 * (coalesceempty([Num Lookup] - [Num Failed], 0) / [Num Lookup]))'
select
{
[Measures].[Pct Success],
[Measures].[Num Lookup],
[Measures].[Num Failed]
} on 0,
[Calendar].[Date].children on 1
from
[Cube]
现在我要做的是获得另一个成功测量,但我希望这个测量能够抑制任何低于特定阈值的 [Num Failed] 单元格。具体来说,如果我至少有 4 次成功查找(Num Lookup - Num Failed > 3 && Num Lookup > 4),那么我想让该单元格的 [Num Failed] = 0(或者更确切地说,我想复制 [Num Failed] = 0,因为我仍然需要显示原始的 % Success 度量)。
基本事实看起来像这样(只是列的相关子集 - Line 列是为了便于参考,它不在实际事实中):
线 | 日历键 | 数失败 | 号码查找 1 | 20130601 | 2 | 8 2 | 20130601 | 5 | 8 3 | 20130601 | 1 | 8 4 | 20130601 | 0 | 7 5 | 20130601 | 7 | 8 6 | 20130602 | 2 | 6 7 | 20130602 | 1 | 7 8 | 20130602 | 5 | 10 9 | 20130602 | 7 | 9 等等
基于上述事实,我期望看到的结果是:
| % 成功 | % 过滤成功 | 数字过滤失败 | 数失败 | 号码查找 20130601 | 61.53 | 69.23 | 12 | 15 | 39 20130602 | 53.13 | 71.88 | 9 | 15 | 32
在上述事实样本中,第 1、3、4、7 和 8 行的过滤失败值均为 0,这为我们提供了上面列出的样本输出。
我最初的想法是使用 with 子句中的另一个成员作为 [Num Failed] 的副本,然后使用单元格计算来进行抑制,但我无法让单元格计算正常工作 - 它要么不修改值,或者在评估过程中出错。
这是“应该”返回我正在寻找的内容的非工作版本,但没有:
with
member [Measures].[Num Threshold Failure] AS [Num Failed]
Cell Calculation [Data Filter] For '[Measures].[Num Threshold Failure]' AS 'NULL', Condition = 'CalculationPassValue((([Measures].[Num Lookup] - [Measures].[Num Failure]) < 4) AND ([Measures].[Num Lookup] > 4), 1)'
member [Pct Success] as 'iif(isempty([Num Lookup]) or [Num Lookup]=0, null, 100 * (coalesceempty([Num Lookup] - [Num Failed], 0) / [Num Lookup]))'
member [Pct Filtered Success] as 'iif(isempty([Num Lookup]) or [Num Lookup]=0, null, 100 * (coalesceempty([Num Lookup] - [Num Threshold Failure], 0) / [Num Lookup]))'
select
{
[Measures].[Pct Success],
[Measures].[Pct Filtered Success],
[Measures].[Num Threshold Failure],
[Measures].[Num Failed],
[Measures].[Num Lookup]
} on 0,
{ [Calendar].[Date].children } on 1
from
[Cube]