簡體   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