我有一個包含每個事務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
來代替。
有沒有人對我怎樣才能實現這種方式多選一個建議?
謝謝。
棘手的部分是他們不希望看到的措施,因爲「新的客戶服務費」或「現有客戶服務費」,而是「客戶服務費」。什麼也於事無補是,他們希望平均值(幾個)和物聯網等奇怪的組合。我必須創建的措施越少,編碼和維護越容易。 – SchmitzIT