创建一个遵循过滤器上下文的 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
注意103和106的排序方式,之前是3和4 现在分别排名 1 和 2 因为在选定的日期范围内他们是第一和第二客户命令。
谁能帮我做这个?
我曾尝试重组我的公式以使用 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 个月的三月、四月、五月和六月时,这个结果是:
我正在对我们的客户进行一些分析,并且我有一个现有的列,其中 '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
注意103和106的排序方式,之前是3和4 现在分别排名 1 和 2 因为在选定的日期范围内他们是第一和第二客户命令。
谁能帮我做这个?
我曾尝试重组我的公式以使用 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 个月的三月、四月、五月和六月时,这个结果是: