跳到主要内容

🧮计算成员

本文介绍如何为多维数据集创建计算成员. 在语义模型中,计算成员(Calculated Members)是一种由用户定义的、基于已有数据和计算逻辑生成的虚拟成员。计算成员允许用户在数据模型中执行自定义计算和聚合操作,以提供更丰富和灵活的分析和洞察。

信息

在多维表达式(MDX)中,计算成员是通过计算一个MDX表达式以返回一个值而解析出来的成员。在MDX查询中构建和使用计算成员的能力为多维数据提供了很大的操纵能力。

您可以在层次结构中的任何位置创建计算成员。您还可以创建依赖于多维数据集中现有成员以及同一MDX表达式中定义的其他计算成员的计算成员。

创建计算成员

计算成员(Calculated Member)使用计算公式计算出需要查询的度量字段或者维度成员. 这里我们以多维数据集中创建的销售(Sales)模型为例, 为其创建一个利润(Profit)的计算成员:

  1. 在多维模型编辑界面计算成员区域点击新增图标,新建一个计算成员;
  2. 选中此计算成员, 在右边的计算成员属性编辑界面输入以下信息:
    1. 名称(Name): Profit
    2. 标签(Caption): 利润
    3. 维度(Dimension): Measures
    4. 是否显示(Visible): ✅
    5. 公式(Formula): [Measures].[Sales] - [Measures].[Cost]
  3. 保存

这里使用的计算公式是 Multidimensional Data Expressions (MDX) 的语法. 其中计算成员的表达式可以参考 MDX Calculated MembersAS 关键字后的表达式写法.

验证新建的计算成员效果, 可以转到 计算页面 在预览区域进行查询, 在行区域选择维度 Time, 选择层级字段 Year, 在列区域添加三个度量字段 Sales, Cost, Profit, 然后点击菜单栏中刷新按钮, 等待数据展示并进行验证结果.

创建复杂公式

除了可以使用简单的基本数学运算, MDX 还有丰富函数帮助数据分析计算复杂业务场景. 下面我们创建两个复杂点的计算公式: 上期利润和本期相对上期的增长率.

MDX 函数在不同平台实现有所差异, 具体以实际运行结果为准.

上期利润

首先我们创建一个计算上期利润(Profit)的公式, 这里就用到了一个 MDX 函数 PrevMember 来计算出上一个期间的成员, 然后再合并上利润(Profit)度量本身就能表达出上一期间利润的公式:

(Measures.[Profit], [Time].PrevMember)

这个上期利润会被用在后续公式去计算增长率, 会被用在除法分母上, 所以当此计算公式结果为空时需要转换为当期的数值, 防止除法错误. 这里就用到另外一个函数 CoalesceEmpty 最终表达式为

CoalesceEmpty((Measures.[Profit], [Time].PrevMember), Measures.[Profit])

保存为计算成员 Profit last Period 后我们可以单独对这个计算成员进行验证.

如果计算成员只想要当作中间结果, 并不想展示出来用于查询, 那么可以设置计算成员的是否显示属性为 false, 这样此计算成员将不会出现在模型的输出度量列表里.

增长率

有了上期利润和本期利润, 下面我们计算本期的利润增长率. 增长率公式就比较简单了

([Measures].[Profit] - [Measures].[Profit last Period]) / [Measures].[Profit last Period]

保存为 Profit Growth

再次验证 Profit Growth 等字段, 由于本期上期和增长率需要用在某个维度上下文中, 所以在查询时需要在行上指定一个维度如日历.