在 Power BI 中计算累计值
Calculating the cumulative values in Power BI
我有两个 table:
- 用户 table(包含:用户注册数据。列:user_id、create_date)
- 客户订单 table(包含:订单历史记录。列:user_id、order_date、order_id)
*用户和客户不一样。当用户注册他的第一笔订单时,他就成为了客户。
对于每年的每个月,我想要不同用户的累计数和不同客户的累计数,因为最后我想计算不同客户的累计数的比率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 看起来不错:
设置您的关系,如图所示,活动关系从 Calendar
到 user
- 否则这些措施将不起作用,除非您在代码中相应地更改关系!在我的数据模型中,非活动关系在 Calendar
和 customer 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]
)
这是你的结果:
我有两个 table:
- 用户 table(包含:用户注册数据。列:user_id、create_date)
- 客户订单 table(包含:订单历史记录。列:user_id、order_date、order_id)
*用户和客户不一样。当用户注册他的第一笔订单时,他就成为了客户。
对于每年的每个月,我想要不同用户的累计数和不同客户的累计数,因为最后我想计算不同客户的累计数的比率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 看起来不错:
设置您的关系,如图所示,活动关系从 Calendar
到 user
- 否则这些措施将不起作用,除非您在代码中相应地更改关系!在我的数据模型中,非活动关系在 Calendar
和 customer 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]
)
这是你的结果: