创建一个 MDX 计算成员以使用包含总计和减少的数据制作堆积条形图

Posted

技术标签:

【中文标题】创建一个 MDX 计算成员以使用包含总计和减少的数据制作堆积条形图【英文标题】:Create an MDX calculated member to make a stacked bar chart using data with total and reductions 【发布时间】:2010-06-17 19:32:51 【问题描述】:

我们使用 SSAS 中内置的多维数据集,并希望显示增量对预测的影响。

所以,我们有这样的数据:

年份 类型 金额 ---- --------- --------- 2008 年预测 +1000 2008 年三角洲 1 - 100 2008 三角洲 2 - 200 2009年...

我们想做一个堆积条形图,所以我们需要这样的数据:

年份 类型 金额 ---- --------- --------- 2008 年结果 +700 2008 达美 1 +100 2008 达美 2 +200

您可以看到,“结果”等于特定粒度的预测和增量之和(在本示例中,只是时间,我们还将位置作为附加维度)。

关键是我们希望能够过滤掉一个增量并更新条形图,因此需要更改“结果”,以便总和仍然是该粒度的预测:

类型 金额 --------- --------- 结果 +900 三角洲 1 +100

我们可以在视图中执行此操作,但是我们必须为增量选择和取消选择的每一种可能性生成一个结果,这似乎不是最优的。

有没有办法在立方体中做到这一点?我们最好的猜测是某种 MDX 计算成员,但我们也对其他解决方案持开放态度。

谢谢!

更新 1: 我看到的计算字段的问题是它向多维数据集添加了一个成员(即一列),我们真正需要做的是添加带有 UNION 的行......但在多维数据集中。下面以一些伪 SQL 为例:

选择 年, '结果' AS 类型, SUM(Amount) 作为金额 从表 1 其中 1=1 --AND 输入“Delta 2” 按年份分组 联合所有 选择 年, 类型, -1*金额作为金额 从表 1 WHERE 类型如 'Delta%' --AND 输入“Delta 2” --请注意,如果需要,注释掉的 WHERE 子句是您可以取消选择增量的地方。

可以将其转换为 MDX 以进行动态计算吗?

更新 2:

这是迄今为止我得到的最接近的,但并不完美:

CREATE MEMBER CURRENTCUBE.[措施].[调整] AS CASE [Measure Type DEV].[Measure Type] /* 这是上面的“类型”列 */ WHEN [Measure Type DEV].[Measure Type].&[2] /* 预测是关键 2 */ THEN ([Measure Type DEV].[Measure Type].&[2], [时间].[年份].CURRENTMEMBER,[措施].[金额]) + ([Measure Type DEV].[Measure Type].&[3], /* Delta 是键 3 */ [时间].[年份].CURRENTMEMBER,[措施].[金额]) END

【问题讨论】:

【参考方案1】:

在 MDX 中没有真正的好方法可以做到这一点,但是当我必须创建预测时,我使用数据挖掘来完成这项任务,并以本文作为主要参考点:

http://cwebbbi.spaces.live.com/Blog/cns!7B84B0F2C239489A!2795.entry?a665aac0&wa=wsignin1.0

我希望这会有所帮助,它可能比尝试使用直接 MDX 解决它更快。

【讨论】:

非常有趣,这实际上涉及到我一直感兴趣的另一个问题:如何生成预测数据(而不是手动加载)?所以谢谢你的链接。我仍在寻找 MDX 来做本质上是“运行总和”的事情。感谢您的回答! @Stin:加载它不是一个选项吗?我认为从长远来看,将其加载到多维数据集中会更有益,所以这就是我建议查看那篇文章的原因 =)。 @ajadams:加载绝对是一个选项,实际上我们现在正在加载它(在上面的示例中,预测为 1000)。问题是我们有一系列可供选择的项目(上面的“增量”),并希望看到它们对我们在条形图中加载的预测的影响(这意味着预测必须在增量重新加载)。【参考方案2】:

在我对问题的最后一次更新(更新 2)中,我询问了如何在 MDX 中执行类似 SQL 的联合...这使我朝着正确的方向前进,但却是错误的思考方式(我还是新手到 MDX)。

要添加结果“行”,我需要添加一个计算维度(可以放在 ROWS 上),它返回所有级别,它执行我正在寻找的总和,并且我需要添加一个新的计算维度这将做 case 语句(在一种情况下翻转减少量,在另一种情况下从总数中减去减少量)。

【讨论】:

优秀。我读了几次,想知道如何做到这一点,很高兴你明白了。我很遗憾我只有 1 +1 可以给.. 太好了,很高兴听到它有帮助。我不知道您在 MDX 学习方面处于什么位置,但推荐 MDX Step by Step 这本书作为一本很好的初学者书籍,它帮助我转变心态来回答这个问题。

以上是关于创建一个 MDX 计算成员以使用包含总计和减少的数据制作堆积条形图的主要内容,如果未能解决你的问题,请参考以下文章

SSAS 多维数据集计算的成员无穷大总计值

在 MDX 中,如何对子成员执行计算然后聚合这些子成员?

MDX 计算成员 - 来自任何订单行的总订单金额

维度成员作为 MDX 中的计算度量

MDX IIF 语句根据度量和层次结构叶计算新成员

通过过滤度量值在 MDX 中定义计算成员