我希望"重新激活"每个国家的客户,在上个月(例如2014年9月)下订单,但在过去的6个月(2014年8月)中没有订单。
AdventureWorks
的示例将受到高度赞赏。我在列上的日历年份有客户计数。如何获得重新激活"重新激活"客户(行上的国家/地区)在2008年销售,但2006年没有销售 - > 2007年?
Adventure Works示例 http://de.tinypic.com/r/125q7hi/8
答案 0 :(得分:1)
Except
可以很快适应这种情况。查找2008年销售的所有客户,然后排除2006/2007年销售额中的任何客户。这使得在2008年但未在2006/2007年销售的客户离职。
我使用Filter
功能,但速度非常慢。
使用带有IIF
值的null
作为返回值之一的解决方案会很快,但我无法理解。
WITH
MEMBER MEASURES.[Returning Customers] AS
Count
(
Except
(
NonEmpty
(
[Customer].[Customer].[Customer].MEMBERS
,
{[Measures].[Internet Sales Amount]}*
{[Date].[Calendar Year].&[2008]}*
[Customer].[Customer Geography].CurrentMember
)
,NonEmpty
(
[Customer].[Customer].[Customer].MEMBERS
,
{[Measures].[Internet Sales Amount]}*
{
[Date].[Calendar Year].&[2006]
,[Date].[Calendar Year].&[2007]
}*
[Customer].[Customer Geography].CurrentMember
)
)
)
SELECT
[Date].[Calendar].[Calendar Year].MEMBERS
*
MEASURES.[Returning Customers] ON 0
,{[Customer].[Customer Geography].[Country].MEMBERS} ON 1
FROM [Adventure Works]
WHERE
[Date].[Calendar Year].&[2008];
您的情况非常具体 - 因此除了2008年之外,没有任何一年能显示出来。
这是一个很好的参考,作为开始调查返回客户脚本的地方: http://cwebbbi.wordpress.com/2010/10/08/counting-new-and-returning-customers-in-mdx/
我认为,就性能而言,应该谨慎使用命名集,但是当使用基于集合的函数时,它们实际上可以提高性能,因此我们使用Except
命名集可能会加快速度:
WITH
SET [2008customers] AS
NonEmpty
(
[Customer].[Customer].[Customer].MEMBERS
,
{[Measures].[Internet Sales Amount]} * {[Date].[Calendar Year].&[2008]}
)
SET [20062007customers] AS
NonEmpty
(
[Customer].[Customer].[Customer].MEMBERS
,
{[Measures].[Internet Sales Amount]}
*
{
[Date].[Calendar Year].&[2006]
,[Date].[Calendar Year].&[2007]
}
)
MEMBER MEASURES.[Returning Customers] AS
Count
(
Except
(
[2008customers] * [Customer].[Customer Geography].CurrentMember
,
[20062007customers] * [Customer].[Customer Geography].CurrentMember
)
)
SELECT
[Date].[Calendar].[Calendar Year].MEMBERS
*
{
MEASURES.[Returning Customers]
,[Measures].[Customer Count]
} ON 0
,{[Customer].[Customer Geography].[Country].MEMBERS} ON 1
FROM [Adventure Works]
WHERE
[Date].[Calendar Year].&[2008];
这是原始问题的更一般版本。而不是命名年份,它会查看表格中当前年份中过去两年未找到的客户:
WITH
MEMBER MEASURES.[Returning Customers] AS
Count
(
Except
(
NonEmpty
(
[Customer].[Customer].[Customer].MEMBERS
,
{[Measures].[Internet Sales Amount]}*
{[Date].[Calendar Year].CurrentMember}*
[Customer].[Customer Geography].CurrentMember
)
,NonEmpty
(
[Customer].[Customer].[Customer].MEMBERS
,
{[Measures].[Internet Sales Amount]}*
(
[Date].[Calendar Year].CurrentMember.Lag(1)
:
[Date].[Calendar Year].CurrentMember.Lag(2)
)*
[Customer].[Customer Geography].CurrentMember
)
)
)
SELECT
[Date].[Calendar].[Calendar Year].MEMBERS
*
{
[Measures].[Customer Count]
,MEASURES.[Returning Customers]
} ON 0
,{[Customer].[Customer Geography].[Country].MEMBERS} ON 1
FROM [Adventure Works]
WHERE
NULL : [Date].[Calendar Year].&[2008];
试图找出2006年发生的事情?!