繁体   English   中英

根据多维属性计算的SSAS成员

[英]Calculated SSAS Member based on multiple dimension attributes

我正在尝试创建一个基于2个不同属性的新计算度量。 我可以直接查询数据以查看值是否存在,但是当我创建计算成员时,它总是返回null。

这是我到目前为止的内容:

CREATE MEMBER CURRENTCUBE.[Measures].[Absorption]
 AS sum
(

    Filter([Expense].MEMBERS, [Expense].[Amount Category] = "OS"
           AND ([Expense].[Account Number] >= 51000 
           AND [Expense].[Account Number] < 52000))
    ,

    [Measures].[Amount - Expense]
), 
VISIBLE = 1 ,  ASSOCIATED_MEASURE_GROUP = 'Expense';     

最终,我需要多次重复相同的模式。 特定的会计“类型”(吸收,销售和营销,管理,R&D等)基于类别和一系列帐号的组合。

我尝试了Sum,Aggregate,Filter,IIF等几种组合,但是没有运气,该值始终为null。

但是,如果我不使用Filter而是仅创建具有2个值的元组,它确实会为我提供期望的数据,如下所示:

CREATE MEMBER CURRENTCUBE.[Measures].[Absorption]
 AS sum
(

    {( [Expense].[Amount Category].&[OS], [Expense].[Account Number].&[51400]  )}
    ,

    [Measures].[Amount - Expense]
), 
VISIBLE = 1 ,  ASSOCIATED_MEASURE_GROUP = 'Expense';  

但是,我需要指定多个帐号,而不仅仅是一个。

通常,仅在需要根据某些度量值(例如,销售额> 10.000的所有销售订单)过滤事实表时,才应使用FILTER函数。 它并非旨在根据尺寸属性来过滤成员(尽管可能会起作用,但性能可能会受到影响)。

如果要按一个或多个维度属性的成员进行过滤,请使用元组和集合来表示过滤:

CREATE MEMBER CURRENTCUBE.[Measures].[Absorption]
AS 
    Sum( 
       {[Expense].[Account Number].&[51000]:[Expense].[Account Number].&[52000].lag(1)} *
       [Expense].[Amount Category].&[OS],
       [Measures].[Amount - Expense]
    ), 
VISIBLE = 1 ,  ASSOCIATED_MEASURE_GROUP = 'Expense';

在这里,我使用的范围内操作:构建一套包含所有的[Account Number]至51000且小于52000。然后我交叉联接成员大于或等于*这一套有关[Amount Category]属性,以获得相关的成员集,我想总结一下自己的度量。

请注意,这仅在您的“支出”维度中确实有一个帐号为51000和52000的成员时有效(请参阅注释)。

完全不同的方法是在ETL过程中执行此逻辑。 例如,您可能有一个帐号范围表,该表映射到特定的会计类型(吸收,销售和营销等)。 然后,您可以在费用维度中添加一个新属性,以保留每个帐户的会计类型,并使用动态SQL和上述映射表填充该属性。

我不去接近立方体脚本,但你并不需要通过创造一些背景currentmember功能,也反对不平等的运营商(例如,对于正确评价返回一些值>通过使用说的) membervalue功能?

CREATE MEMBER CURRENTCUBE.[Measures].[Absorption]
 AS sum
(
    [Expense].[Amount Category].&[OS]
    *
    Filter(
       [Expense].[Account Number].MEMBERS,
       [Expense].[Account Number].currentmember.membervalue >= 51000 
       AND 
       [Expense].[Account Number].currentmember.membervalue < 52000
    )
    ,

    [Measures].[Amount - Expense]
), 
VISIBLE = 1 ,  ASSOCIATED_MEASURE_GROUP = 'Expense';  

编辑

Dan使用范围运算符: 请确保正确排序您的层次结构,并确保您实际使用此运算符使用的成员。 如果它们不存在,那么它们将被评估为null

针对AdvWks多维数据集:

SELECT 
  {} ON 0
 ,{
      [Date].[Calendar].[Month].&[2008]&[4]
    : 
      [Date].[Calendar].[Month].&[2009]&[2]
  } ON 1
FROM [Adventure Works];

返回以下内容:

在此处输入图片说明

如果多维数据集中不存在左手成员,则将其评估为null ,因此在该侧打开结束:

SELECT 
  {} ON 0
 ,{
      [Date].[Calendar].[Month].&[2008]&[4]
    : 
      [Date].[Calendar].[Month].&[1066]&[2] //<<year 1066 obviously not in our cube
  } ON 1
FROM [Adventure Works];

返回:

在此处输入图片说明

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM