带有icCube的MDX中的Histrogram

时间:2015-07-08 11:59:24

标签: mdx iccube

如何使用MDX进行动态组织图?

例如,我们的架构基于网络访问,我们的会话数量和点击次数。我们希望通过一次点击确定会话数量,考虑到这可能取决于其他维度(国家,小时,入口页面......)。

1 个答案:

答案 0 :(得分:1)

要解决这个问题,我们将使用两个不同的概念。首先创建一个新的层次结构,然后使用MDX +。

首先我们要创建一个新维度,[Histrogram]。这个新维度将包含具有两个成员属性的桶的定义:start-bucket和end-bucket。一个看起来像

的伪表
Name start-bucket end-bucket
0-1       0           1
1-2       1           2
2-3       2           3
...
10++     10   2147483647

此层次结构未链接到事实,并为每个成员定义了两个定义存储桶的属性。

让我们在MDX中使用它。

让我们假设我们有一个维度,[会话]和一个度量,[点击]。首先,我们将使用icCube的OO功能并创建一个向量,为每个会话计算[点击次数]

- > Vector([会话],[点击],EXCLUDEEMPTY)

Vector有一个函数hist(开始,结束),它完全符合我们的需要,并计算开始和结束之间的所有出现(排除)。

Vector( [Sessions], [click-outs], EXCLUDEEMPTY )->hist(0,1)

将它与我们新创建的层次结构放在一起允许自动化所有存储桶的计算。 const函数确保向量只计算一次,因为它可能很耗时。

最终的MDX看起来像(请注意,可以在架构脚本中创建函数和计算成员,每个架构一次):

WITH
 CONST FUNCTION ClicksBySession() AS Vector( [Sessions], [Measures].[click-outs], EXCLUDEEMPTY )
 MEMBER [Session/Clickout] AS  ClicksBySession()->hist( [Histogram].currentMember.properties("start-bucket", TYPED) , [Histogram].currentMember.properties("end-bucket", TYPED) 
SELECT
   {[Session/Clickout] } on 0,
  [Histogram].on 1
FROM [clickout]
--where  [Geography].[Europe]

你有一个动态计算的组织图,可以很容易地插入仪表板并重复使用。