在 Power BI 中计算累计值

Calculating the cumulative values in Power BI

我有两个 table:

*用户和客户不一样。当用户注册他的第一笔订单时,他就成为了客户。

对于每年的每个月,我想要不同用户的累计数和不同客户的累计数,因为最后我想计算不同客户的累计数的比率customers 每个月不同用户的累计数

我不知道如何使用DAX.

计算我所说的累计值和比率

请注意,如果客户在一个月内注册了多个订单,我想在该月只计算他一次,如果他在接下来的几个月注册了一个新订单,我也会在每个新月中计算他。

也许这些图片可以帮助您更好地理解我的问题。

-我的 table 中没有 count_of_users 和 count_of_customers 列。我应该计算它们。

用户table:

user_id create_date
1 2017-12-03
2 2018-01-01
3 2018-01-01
4 2018-02-04
5 2018-03-10
6 2018-04-07
7 2018-04-08
8 2018-09-12
9 2018-10-02
10 2018-10-02
11 2018-10-09
12 2018-10-11
13 2018-10-12
14 2018-10-12
15 2018-10-20

客户订单table:

user_id order_date order_id
1 2018-03-28 120
1 2018-03-28 514
1 2018-03-30 426
2 2018-02-11 125
2 2018-03-01 547
3 2018-02-10 588
3 2018-04-03 111
4 2018-02-10 697
5 2018-04-02 403
5 2018-04-05 321
6 2018-04-09 909
11 2018-10-25 8401

为此您需要一些构建基块。这是我使用的数据模型:

<编辑> 我看到不同的table中的user_id是不一样的,那你可以省略table中的关系和Calendar中的两个关系table 都将处于活动状态 - 无需更改 count_of_customer 度量中的关系语义。

日历 table 很重要,因为我们不能依赖一个单一的日期列来聚合来自不同 table 的数据,因此我们创建了一个通用日历 table示例 DAX 代码:

Calendar = 
ADDCOLUMNS (
    CALENDARAUTO () ,
    "Year" , YEAR ( [Date] ) ,
    "Month" , FORMAT ( [Date] , "MMM" ) ,
    "Month-Year" , FORMAT ( [Date] , "MMM")&"-"&YEAR ( [Date] ) ,
    "YearMonthNo" , YEAR ( [Date] ) * 12 + MONTH ( [Date] ) - 1
)

确保按 YearMonthNo 列对 Month-Year 列进行排序,以便您的 table 看起来不错:

设置您的关系,如图所示,活动关系从 Calendaruser - 否则这些措施将不起作用,除非您在代码中相应地更改关系!在我的数据模型中,非活动关系在 Calendarcustomer order.

之间

接下来是我们将为此使用的措施。首先我们计算用户数,一个简单的行数:

count_of_users = COUNTROWS ( user )

然后我们按照table的顺序统计不同的user id来统计客户,这里需要用到Calendar和[=之间的inactive关系23=] 并为此我们必须调用 CALCULATE:

count_of_customers = 
CALCULATE (
    DISTINCTCOUNT ( 'customer order'[user_id] ) ,
    USERELATIONSHIP (
        'Calendar'[Date] ,
        'customer order'[order_date]
    )
)

我们可以使用这个度量来累计用户数:

cumulative_users = 
VAR _maxVisibleDate = MAX ( 'Calendar'[Date] ) 
RETURN
CALCULATE ( 
    [count_of_users] , 
    ALL ( 'Calendar' ) , 
    'Calendar'[Date] <= _maxVisibleDate
)

这个计算每月累计客户的措施:

cumulative_customers = 
VAR _maxVisibleDate = MAX ( 'Calendar'[Date] ) 
RETURN
CALCULATE ( 
    SUMX ( 
        VALUES ( 'Calendar'[YearMonthNo] ) ,
        [count_of_customers] 
    ),
    ALL ( 'Calendar' ) , 
    'Calendar'[Date] <= _maxVisibleDate
)

最后我们想要这些最后累积指标的比率:

cumulative_customers/users = 
DIVIDE (  
    [cumulative_customers] , 
    [cumulative_users] 
)

这是你的结果: