2017-07-04 83 views
0

我有一個包含每個事務1行中的事實表。交易由客戶在特定的月費(簡化)上訂購服務。客戶可以有很多服務。SSAS多選用假尺寸

我想客戶之所組新的客戶(開始他們的第一個服務),現有和終止(當他們最後的服務結束)。同樣,他們也希望以相同的方式對服務進行限定。新建(服務在此期間開始),已存在並終止(服務在本月結束)。當客戶或服務是新的或終止時,我們在事實表中設置一個位標誌來表明這一點。

他們希望有新的,現有的和終止的客戶和服務之間挑選一樣,你會從一個維度選擇的能力。他們希望根據他們的選擇來分攤費用。

爲方便起見,我創建了事實表的頂視圖,它使用了標誌位的費用拆分爲新的,終止或現有的(在不新或終止)。我們爲客戶和服務做到這一點。

視圖的代碼:

SELECT 
    monthID 
    , customerID 
    , serviceID 
    , newCustomer 
    , terminatedCustomer 
    , newService 
    , terminatedService 
    , monthlyFee 
    , CASE WHEN newCustomer <> 0 THEN customerID END AS newCustomerID 
    , CASE WHEN terminatedCustomer <> 0 THEN customerID END AS terminatedCustomerID 
    , CASE WHEN newCustomer = 0 AND terminatedCustomer = 0 THEN customerID END AS existingCustomerID 
    , CASE WHEN newCustomer <> 0 THEN monthlyFee END AS newCustomerIDmonthlyFee 
    , CASE WHEN terminatedCustomer <> 0 THEN monthlyFee END AS terminatedCustomerIDmonthlyFee 
    , CASE WHEN newCustomer = 0 AND terminatedCustomer = 0 THEN monthlyFee END AS existingCustomerIDmonthlyFee 
    , CASE WHEN newService <> 0 THEN serviceID END AS newServiceID 
    , CASE WHEN terminatedService <> 0 THEN serviceID END AS terminatedServiceID 
    , CASE WHEN newService = 0 AND terminatedService = 0 THEN serviceID END AS existingServiceID 
    , CASE WHEN newService <> 0 THEN monthlyFee END AS newServiceIDmonthlyFee 
    , CASE WHEN terminatedService <> 0 THEN monthlyFee END AS terminatedServiceIDmonthlyFee 
    , CASE WHEN newService = 0 AND terminatedService = 0 THEN monthlyFee END AS existingServiceIDmonthlyFee 
FROM 
    [dbo].[myFactTable] 

現有的,新的或終止客戶的服務也使用視圖之間進行挑選的能力。例如:

CREATE VIEW dimCustomerSelection AS 
SELECT 1 AS customerSelectionID, 'New customer' AS customerSelectionName 
UNION ALL 
SELECT 2 AS customerSelectionID, 'Existing customer' AS customerSelectionName 
UNION ALL 
SELECT 3 AS customerSelectionID, 'Terminated customer' AS customerSelectionName 

在SSAS中,我然後想要採取措施,使用選擇來顯示正確的價格。我用SCOPEs做到這一點:

/* single select new */ 
SCOPE ([Customer Selection].[Customer Selection ID].&[1]); 
    [Measures].[Customer MRC] = [Measures].[New Customer MRC]; 
END SCOPE; 
/* single select existing */ 
SCOPE ([Customer Selection].[Customer Selection ID].&[2]); 
    [Measures].[Customer MRC] = [Measures].[Existing Customer MRC]; 
END SCOPE; 
/* single select terminated */ 
SCOPE ([Customer Selection].[Customer Selection ID].&[3]); 
    [Measures].[Customer MRC] = [Measures].[Terminated Customer MRC]; 
END SCOPE; 

這可以創造奇蹟,並顯示與客戶的分類選擇去的費用。然而,當我試圖挑選組合(即我想看到的在一個月內通過新的和現有的客戶產生費用的總和),該措施,而不是結束了總結,月值的值。

我試過類似如下:

/* multi-select New + terminated */ 
SCOPE ({[Customer Selection].[Customer Selection ID].&[1],[Customer Selection].[Customer Selection ID].&[2]}); 
    [Measures].[Customer MRC] = [Measures].[New Customer MRC] - [Measures].[Terminated Customer MRC]; 
END SCOPE; 

但具有同樣的效果。能夠得到這個正常工作將是關鍵,以幫助我建立了客戶需要的措施,其餘部分(這基本上是組合,平均值等的負荷)。

我之前也使用了CASE聲明,但是我的同事建議使用SCOPE來代替。

有沒有人對我怎樣才能實現這種方式多選一個建議?

謝謝。

回答

0

我必須失去了一些東西,但是,你已經有了一個月租費的措施,並推出了新的層面由切客戶類型和服務。

所以,如果你多上新的維度選擇,你會得到費用的總和?

MrHH

+0

棘手的部分是他們不希望看到的措施,因爲「新的客戶服務費」或「現有客戶服務費」,而是「客戶服務費」。什麼也於事無補是,他們希望平均值(幾個)和物聯網等奇怪的組合。我必須創建的措施越少,編碼和維護越容易。 – SchmitzIT