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

Creating a RANKX() calculated column which obeys filter context

我正在对我们的客户进行一些分析,并且我有一个现有的列,其中 'ranks' 每个客户在订购日期之前所下的订单数量。我的意思是,如果客户在 4 个不同的日期下了 4 个订单,我的 'PersistantOrderCount' 列将显示如下:

OrderID | OrderDate | CustomerID | PersistantOrderCount

101 | 01/01/2015 | 1 | 1

102 | 01/02/2012 | 1 | 2

103 | 01/03/2015 | 1 | 3

104 | 01/04/2015 | 2 | 1

105 | 01/05/2015 | 3 | 1

106 | 01/06/2015 | 1 | 4

正如您希望在此示例中看到的那样,客户订单根据订单日期进行排名,他们的第一个订单是 1,对于客户“1”,他们的最后一个订单是 4。

我使用的公式是:

=
RANKX (
    FILTER (
        'DataSet',
        [CustomerID] = EARLIER ( [CustomerID] )
    ),
    [OrderID],
    [OrderID],
    1,
    DENSE
)

根据我选择的任何过滤器,使用此公式不会更改订单排名。

我现在需要的是一个类似的列,但排名是基于我应用的过滤器,特别是我需要能够按日期进行过滤。例如,如果我使用完全相同的数据,但只过滤了 3 月、4 月、5 月、6 月的数据,我希望看到以下内容:

OrderID | OrderDate | CustomerID | PersistantOrderCount

103 | 01/03/2015 | 1 | 1

104 | 01/04/2015 | 2 | 1

105 | 01/05/2015 | 3 | 1

106 | 01/06/2015 | 1 | 2

注意103106的排序方式,之前是34 现在分别排名 12 因为在选定的日期范围内他们是第一和第二客户命令。

谁能帮我做这个?

我曾尝试重组我的公式以使用 CALCULATE() 以及使用其上下文敏感过滤器的想法,但这没有用。这让我非常沮丧,因此非常感谢您的帮助。

谢谢。

我的方法不是通过添加列来完成此操作,而是为您需要的每个字段添加一个度量:

[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)

对于未过滤的数据集,它会给出以下结果:

当你 select 个月的三月、四月、五月和六月时,这个结果是: