【问题标题】:Calculating the cumulative values in Power BI在 Power BI 中计算累积值
【发布时间】:2021-09-17 08:09:59
【问题描述】:

我有两张桌子:

  • 用户表(包含:用户注册数据。列:user_id、create_date)
  • 客户订单表(包含:订单历史记录。列:user_id、order_date、order_id)

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

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

我不知道如何使用 DAX 计算累积值和我所说的比率。

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

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

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

用户表:

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

客户订单表:

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

【问题讨论】:

  • 请为两个表添加数据样本(作为文本)
  • 我添加了两个表。 @RADO

标签: powerbi dax etl cumulative-sum measure


【解决方案1】:

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

我看到不同表中的 user_id 不一样,在这种情况下,您可以省略表之间的关系,Calendar 表中的两个关系都将处于活动状态 - 无需更改 @987654328 中的关系语义@ 措施。

日历表很重要,因为我们不能依赖单个日期列来聚合来自不同表的数据,因此我们使用此示例 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 列进行排序,以便您的表格看起来不错:

将您的关系设置为从Calendaruser 的活动关系 - 如果不是,除非您在代码中相应地更改关系,否则这些措施将不起作用!在我的数据模型中,非活动关系位于 Calendarcustomer order 之间。

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

count_of_users = COUNTROWS ( user )

然后我们计算订单表中不同的用户ID来计算客户,这里我们需要使用Calendarcustomer order之间的inactive关系,为此我们必须调用@987654339 @:

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] 
)

这是你的结果:

【讨论】:

  • 你说:“不同表中的user_id不一样”。你什么意思?请注意,并非所有用户都是客户。但所有的客户都是用户。 @马库斯
  • 如果我使用日历表,我会在其他报告中看到与日期相关的错误。 @马库斯
  • 不确定您希望我如何处理您的整个报告?如果您还没有使用日期表,那么现在是开始的好时机。
猜你喜欢
  • 2022-11-07
  • 2020-07-30
  • 2022-01-02
  • 2020-10-16
  • 2019-06-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多