1

如何使用 MDX 制作动态直方图?

例如,我们的模式是基于网络访问的,我们有会话数和点击次数。考虑到这可能取决于其他维度(国家、小时、入口页面......),我们希望获得一次点击的会话数。

4

1 回答 1

1

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

首先我们要创建一个新维度,[直方图]。这个新维度将包含具有两个成员属性的存储桶的定义: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 中使用它。

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

-> 向量([Sessions]、[click-outs]、EXCLUDEEMPTY)

Vector 有一个函数 hist(start,end),它完全符合我们的需要,并计算 start 和 end 之间的所有发生(排除)。

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]

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

于 2015-07-10T12:47:20.243 回答