我有一个包含每个事务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