【问题标题】:Creating a RANKX() calculated column which obeys filter context创建一个遵循过滤器上下文的 RANKX() 计算列
【发布时间】:2015-10-03 07:43:48
【问题描述】:

我正在对我们的客户进行一些分析,并且我有一个现有的列,它按订购日期对每个客户下的订单数量进行“排名”。我的意思是,如果客户在 4 个不同的日期下了 4 个订单,我的“PersistantOrderCount”列将显示如下:

订单ID |订购日期 |客户ID | PersistantOrderCount

101 | 2015 年 1 月 1 日 | 1 | 1

102 | 2012 年 1 月 2 日 | 1 | 2

103 | 2015 年 1 月 3 日 | 1 | 3

104 | 2015 年 1 月 4 日 | 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 月的月份,我希望看到以下内容:

订单ID |订购日期 |客户ID | PersistantOrderCount

103 | 2015 年 1 月 3 日 | 1 | 1

104 | 2015 年 1 月 4 日 | 2 | 1

105 | 2015 年 1 月 5 日 | 3 | 1

106 | 2015 年 1 月 6 日 | 1 | 2

注意顺序 103106,之前分别排名 34,现在排名12,因为在选定的日期期间,他们是客户的第一和第二订单。

谁能帮我做这件事?

我尝试重新组织我的公式以使用 CALCULATE() 并考虑使用其上下文敏感过滤器,但这不起作用。这对我来说非常令人沮丧,因此非常感谢您的帮助。

谢谢。

【问题讨论】:

    标签: excel powerpivot dax


    【解决方案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 月月份时,结果如下:

    【讨论】:

    • 嗨,戈登,我要到周五才会回到我的电脑前测试这个,但是,从你的方法来看,我认为这是一个更好的选择。感谢您的详细解释,这非常有帮助。我现在将标记为答案,如果我有任何 cmets,我会在星期五回来。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-10-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-10
    • 2020-01-30
    • 2012-10-18
    相关资源
    最近更新 更多