计算列中的 DAX 分组和排名

DAX Grouping and Ranking in Calculated Columns

我的原始数据停止销售 - 寻找一些 DAX 帮助添加最后两个作为计算列。


  customer_id   order_id   order_date   sales   total_sales_by_customer   total_sales_customer_rank  
 ------------- ---------- ------------ ------- ------------------------- --------------------------- 
  BM                   1   9/2/2014       476                       550   1                          
  BM                   2   10/27/2016      25                       550   1                          
  BM                   3   9/30/2014       49                       550   1                          
  RA                   4   12/18/2017      47                       525   3                          
  RA                   5   9/7/2017       478                       525   3                          
  RS                   6   7/5/2015         5                         5   other                      
  JH                   7   5/12/2017        6                         6   other                      
  AG                   8   9/7/2015         7                         7   other                      
  SP                   9   5/19/2017       26                       546   2                          
  SP                  10   8/16/2015      520                       546   2                          

让我们从客户的总销售额开始:

total_sales_by_customer = 
var custID = orders[customer_id]
return CALCULATE(SUM(orders[sales], FILTER(orders, custID = orders[customer_id]))

首先我们得到 custID,根据这个 ID 筛选订单 table,然后将每个客户加在一起。

下一个排名:

total_sales_customer_rank = 
var rankMe = RANKX(orders, orders[total_sales_by_customer],,,Dense)
return if (rankMe > 3, "other", CONVERT(rankMe, STRING))

我们获取每个客户销售额的排名(从第一列获取),如果它大于 3,则替换为“其他”

关于您的第一个问题:DAX 不像一种编程语言。每一行都是单独评估的。让我们从第一行开始:您的 custID 将是“BM”。 接下来我们计算所有销售额的总和。我们过滤 custID 上的整个 table 并将其加在一起。所以在过滤器中我们实际上只有 3 行! 这对每一行重复,看起来很慢但我只是告诉你这样你就可以理解你得到的结果。实际上,return 数据的快速处理有巧妙的逻辑。 你想做的“Orders[Customer ID]=Orders[Customer ID]”是不可能的,因为你的 Orders[Customer ID] 在过滤器中并且将 运行 与行..

var custid = VALUES(Orders[Customer ID]) Values 是 returning 单个列 table,您不能在过滤器中使用它,因为您随后将单元格值与table.