带冰块的 MDX 中的直方图

Histrogram in MDX with icCube

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

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

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

首先我们要创建一个新维度,[直方图]。这个新维度将包含具有两个成员属性的桶的定义:开始桶和结束桶。一个看起来像

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

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

让我们在 MDX 中使用它。

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

的数量

-> Vector( [会话], [点击次数], 排除)

Vector 有一个函数 hist(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]

您有一个动态计算的直方图,可以轻松插入仪表板并重复使用。