1

我有一个业务需求,即为了保密而隐藏低数字。

我一直在尝试使用隐藏的度量和计算来做到这一点。隐藏的度量名为“Encounters_Count”,我用于计算的 MDX 是:

CREATE MEMBER CURRENTCUBE.[Measures].[Number of Encounters]
    AS IIF( [Measures].[Encounters_Count] <= 5, "<hidden>", [Measures].[Encounters_Count] ),
FORMAT_STRING = "#,##0", NON_EMPTY_BEHAVIOR = { [Encounters_Count] }, VISIBLE = 1;

除了在某些情况下可以从组总数中计算出隐藏的数字之外,这是可行的。

我尝试使用 IsLeaf() 编写递归计算,通过应用不同的规则从总数中排除“<hidden>”结果,具体取决于它是父级还是子级,但我无法弄清楚如何正确执行此操作。

这就是我一直在尝试做的事情:

...
IIF( IsLeaf( [Measures].[Encounters_Count] ),
    IIF( [Measures].[Encounters_Count] <= 5, "<hidden>", [Measures].[Encounters_Count] ),
    SUM( IIF( [Measures].[Number of Encounters] <> "<hidden>", [Measures].[Number of Encounters], NULL ) )
),
...

 

编辑:这是我要避免的屏幕截图,在这种情况下,您可以计算出 <hidden> 数字是 4。总计最好显示 31,163,因为这是可见的总数数字。

Excel 截图

4

3 回答 3

1

据我了解,您需要的是,如果数字较低或接近总数,则必须将其隐藏。

CREATE MEMBER CURRENTCUBE.[Measures].[Number of Encounters] AS
    IIF( ([Measures].[Encounters_Count] <> 0 AND [Measures].[Encounters_Count] <= 5)
      OR (    ([Measures].[Encounters_Count], [Dim1].[Hier1].[All]) - [Measures].[Encounters_Count] > 0
          AND ([Measures].[Encounters_Count], [Dim1].[Hier1].[All]) - [Measures].[Encounters_Count] <= 5)
      OR (    ([Measures].[Encounters_Count], [Dim1].[Hier2].[All]) - [Measures].[Encounters_Count] > 0
          AND ([Measures].[Encounters_Count], [Dim1].[Hier2].[All]) - [Measures].[Encounters_Count] <= 5)
      OR (    ([Measures].[Encounters_Count], [Dim2].[Hier1].[All]) - [Measures].[Encounters_Count] > 0
          AND ([Measures].[Encounters_Count], [Dim2].[Hier1].[All]) - [Measures].[Encounters_Count] <= 5)
      OR // add all 'All' members of all hierarchies here
       , "<hidden>", [Measures].[Encounters_Count] ),
    FORMAT_STRING = "#,##0", NON_EMPTY_BEHAVIOR = { [Encounters_Count] }, VISIBLE = 1;

会隐藏这些。这是一个相当长的语句,一旦更改多维数据集中的任何层次结构,就需要仔细维护。

对于一个完美的解决方案,还必须处理多个All成员的组合,但这可能导致组合爆炸,我不确定您是否可以使用不允许您编写您的标准客户端工具来获得这些组合拥有 MDX。但是 - 老实说 - 我并没有考虑太多。

Abs()如果可能出现负数,您可能希望使用这些值来避免出现问题。

于 2013-08-28T16:44:59.080 回答
0

我想知道是否可以接受使原始度量不可见并创建另一个度量来显示值并在需要时保护/抑制它。这样立方体可以像往常一样聚合/计算事物。

于 2013-09-02T13:20:57.970 回答
0

一旦您开始隐藏数字并摆弄总数,报告就会变得不那么准确......所以......如果您的业务用户说他们对不准确感到满意,为什么不考虑其他方法来实现您的目标(在考虑 MDX 之前) ?

您可以将 5% 添加到所有总数/用“8”替换最右边的数字/四舍五入到最接近的 100...

对所有总计执行此操作,MDX 不必担心 IsLeaf() 或某些总计是否有隐藏值而有些则没有。

WITH MEMBER [Measures].[Obscured Values] AS
IIF([Measures].[Encounters_Count] <= 5, "<hidden>", 
  IIF([Measures].[Encounters_Count] > 100, VBA!round([Measures].[Encounters_Count]*1.1, 0), [Measures].[Encounters_Count])
)
于 2013-08-28T12:47:01.480 回答