强制计算成员到整个多维数据集

Force calculated member to entire cube

我正在尝试向我的多维数据集添加一个计算成员,这将 return 第一个财政年度在特定度量中完全没有任何数据。

目的是抑制(即NULLify)当年为第一年的各种同比计算指标:当年与上一年的比较没有意义。

到目前为止我已经知道了:

WITH MEMBER Measures.DataStartYear_Sales
AS
HEAD(
    NONEMPTY([Calendar].[Fiscal Periods].[Fiscal Year].Members,[Measures].[QuantityOrdered])
    ,1).Item(0).Properties("NAME")

目前:

a. 这是一个查询范围的度量,因为它更容易试验。

b. return是元年的名字,这样比较容易看。最终我将 return 成员本身,并在其他计算的成员计算中与年份层次结构 .CurrentMember 进行 IS 比较。

我预料到的问题已经发生了,我只想在整个多维数据集上计算一次该度量。但是当我在查询中使用它时,它显然会对上下文做出反应。例如,如果我将 Products 维度贴在 ROWS 上,则每行的此度量值将不同,因为每个产品的最早订购日期不同。

那当然有用,但不是我想要的。有什么方法可以强制此度量忽略查询上下文,并且始终 return 相同的值?

我调查了 SCOPE_ISOLATION 和 SOLVE_ORDER,但他们没有做我在这里想做的事情。

我想我可以指定一个 Dimension1.All、Dimension2.All...DimensionN.All 的元组,覆盖立方体中的所有维度,但这看起来很乱而且很脆弱。

我认为您可以使用静态集来完成此操作。这是一个使用 Adventure Works 的示例,无论上下文如何,它都会生成相同的第一年:

WITH STATIC SET FirstYear AS
HEAD
    (
    NONEMPTY([Date].[Calendar Year].[Calendar Year].MEMBERS, [Measures].[Internet Sales Amount])
,   1
    )
    MEMBER FirstYearName AS
    FirstYear.ITEM(0).NAME
 SELECT
[Measures].[FirstYearName] ON COLUMNS
 ,  [Date].[Calendar Year].[Calendar Year].MEMBERS 
    //Add as many dimensions as you like here...for example
*    [Product].[Product].[Product].MEMBERS
 ON ROWS
 FROM
[Adventure Works]
;

示例输出:

这应该会让你走上正确的轨道。