我想要统计每个国家/地区的"重新激活"客户的数量,这些国家/地区在前一个月(例如2014年9月)下了订单,但在前6个月(2014年3月->8月)内没有下订单。
将高度赞赏具有CCD_ 1的示例。我在列上有日历年的客户计数。如何统计2008年有销售额但2006年没有销售额的"重新激活"客户(行中的国家/地区)->2007年?!
冒险作品示例http://de.tinypic.com/r/125q7hi/8
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];
这是您最初问题的一个更一般的版本。它不是命名年份,而是查看表中当前年份的客户,这些客户在前2年中没有找到:
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年发生了什么?!