创建一个遵循过滤器上下文的RANKX()计算列

时间:2015-07-14 15:12:47

标签: excel powerpivot dax

我正在对我们的客户进行一些分析,并且我有一个现有的列,它按照订购日期对每个客户的订单数量进行“排名”。我的意思是,如果客户在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()来使用其上下文敏感的过滤器,但这不起作用。这对我来说非常令人沮丧,所以任何帮助都表示赞赏。

感谢。

1 个答案:

答案 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)

这为未过滤的数据集提供了以下结果: enter image description here

当您选择3月,4月,5月和6月时的结果: enter image description here