我有业务要求隐藏保密性较低的数字。
我一直在尝试使用隐藏的度量和计算来做到这一点。隐藏的度量名为'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()编写递归计算以排除“&lt; hidden&gt;”通过应用不同的规则来计算总数,这取决于它是父母还是孩子,但我无法弄清楚如何正确地做到这一点。
这就是我一直在尝试做的事情:
...
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 ) )
),
...
编辑:以下是我要避免的截图,在这种情况下,您可以计算出&lt; hidden&gt;数字是4.总计最好显示31,163,因为这是可见数字的总和。
答案 0 :(得分: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
成员的组合,但这可能导致combinatorial explosion,我不确定您是否可以使用这些组合标准客户端工具,不允许您编写自己的MDX。但是 - 说实话 - 我没想太多。
您可能希望在值周围使用Abs()
,以避免出现负数问题。
答案 1 :(得分: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])
)
答案 2 :(得分:0)
我想知道是否可以使原始度量不可见并创建另一个度量来显示值并在需要时保护/抑制它。这样,立方体可以照常聚合/计算事物。