我正在对我们的客户进行一些分析,并且我有一个现有的列,它按照订购日期对每个客户的订单数量进行“排名”。我的意思是,如果客户在4个不同的日期下了4个订单,我将会显示“PersistantOrderCount”列,如下所示:
OrderID | OrderDate |客户ID | PersistantOrderCount
101 | 01/01/2015 | 1 | 1
102 | 01/02/2012 | 1 | 2
103 | 2015年1月3日| 1 | 3
104 | 01/04/2015 | 2 | 1
105 | 2015年1月5日| 3 | 1
106 | 2015年1月6日| 1 | 4
正如您可以在此示例中看到的那样,客户订单根据订单日期进行排名,其第一个订单为1,而在客户'1'的情况下,他们的最后订单为4.
我使用的公式是:
=
RANKX (
FILTER (
'DataSet',
[CustomerID] = EARLIER ( [CustomerID] )
),
[OrderID],
[OrderID],
1,
DENSE
)
根据我选择的任何过滤器,使用此公式的订单排名不会改变。
我现在需要的是类似的列,但排名是基于我应用的过滤器,特别是我需要能够按日期过滤。例如,如果我使用完全相同的数据,但只过滤了3月,4月,5月,6月,我希望看到以下内容:
OrderID | OrderDate |客户ID | PersistantOrderCount
103 | 2015年1月3日| 1 | 1
104 | 01/04/2015 | 2 | 1
105 | 2015年1月5日| 3 | 1
106 | 2015年1月6日| 1 | 2
请注意,目前排名 103 和 106 的排名 3 和 4 1 和 2 因为在所选日期期间,他们是客户的第一和第二个订单。
任何人都可以帮我这样做吗?
我尝试重新组织我的公式以使用CALCULATE()来使用其上下文敏感的过滤器,但这不起作用。这对我来说非常令人沮丧,所以任何帮助都表示赞赏。
感谢。
答案 0 :(得分:1)
而不是通过添加列来实现这一点,我的方法是为您需要的每个字段添加度量:
[PersistantOrderCount]:=RANKX(FILTER(ALL('Dataset'),'Dataset'[CustomerID]=MAX('Dataset'[CustomerID])),FIRSTDATE('Dataset'[OrderDate]),,1,DENSE)
和
[FilteredOrderCount]:=RANKX(FILTER(ALLSELECTED('Dataset'),'Dataset'[CustomerID]=MAX('Dataset'[CustomerID])),FIRSTDATE('Dataset'[OrderDate]),,1,DENSE)
这为未过滤的数据集提供了以下结果:
当您选择3月,4月,5月和6月时的结果: