前期的股票计算

时间:2015-03-20 12:09:06

标签: sql-server sql-server-2008 ssas mdx

我有一个库存分析的立方体。

在多维数据集中有一个名为[Qta Finale]的度量,它是项目的最后一个库存级别。

然后我有一个名为[Data]的维度,其中有日历。

在维度[Data]中,有一个名为[Anno Mese]的层次结构为[Anno]

[Mese]
[Anno] is the year
[Mese] is the month

所以我做了一个计算

Tail(
 NONEMPTY(
 {EXISTING   [Data].[Anno Mese].[Mese].MEMBERS} * [Measures].[Qta Finale]
) ,1).ITEM(0)

工作正常。我获得了当年和所有月份的最后一个非空库存水平。因此,日历中excel中的所有过滤器都可以正常工作。

现在我需要用上一年的库存水平创建一个新计算。

我试过但没有成功,有什么想法吗?

2 个答案:

答案 0 :(得分:0)

如果您的月 - 年等级是标准的,您可以使用滞后来回溯12个月。

Tail(
 NONEMPTY(
 {EXISTING   [Data].[Anno Mese].[Mese].MEMBERS} * [Measures].[Qta Finale]
) ,1).ITEM(0).lag(12)

答案 1 :(得分:0)

可能需要额外的物品吗?

Tail(
 NONEMPTY(
 {EXISTING   [Data].[Anno Mese].[Mese].MEMBERS} * [Measures].[Qta Finale]
) ,1).ITEM(0).ITEM(0).lag(12)

这个版本有用吗?

Tail
 (
   EXISTING NONEMPTY([Data].[Anno Mese].[Mese].MEMBERS * [Measures].[Qta Finale])
 ).ITEM(0).ITEM(0).lag(12)

Edit1

你为什么要在NonEmpty中进行交叉连接?也许只使用该度量作为第二个参数:

Tail(
 NONEMPTY(
 {EXISTING   [Data].[Anno Mese].[Mese].MEMBERS}, [Measures].[Qta Finale]
) ,1).ITEM(0).ITEM(0).lag(12)

Edit2

如果你仍然得到一个空的结果,没有任何错误,那么该集合中最后一个现有的非空成员实际上是空的。 您可以通过以下方式进行检查:

 SELECT
   {} ON 0,
   [Data].[Anno Mese].[Mese].MEMBERS * [Measures].[Qta Finale] ON 1
 FROM CubeName;

 SELECT
   {} ON 0,
   NONEMPTY([Data].[Anno Mese].[Mese].MEMBERS * [Measures].[Qta Finale]) ON 1
 FROM CubeName;

 SELECT
   {} ON 0,
   {NONEMPTY([Data].[Anno Mese].[Mese].MEMBERS * [Measures].[Qta Finale]).ITEM(0).ITEM(0).lag(12)} ON 1
 FROM CubeName;

然后尝试将*更改为,