我有一个包含 2 个表的 Power BI 数据模型。
客户:
客户 ID | 开始日期 | 结束日期 |
---|---|---|
1 | 2023-01-01 | 2024-01-01 |
2 | 2023-04-09 | 2023-09-08 |
3 | 2024-01-05 | 2024-03-02 |
日历:
日期 |
---|
2023-01-01 |
2023-01-02 |
... |
2023-01-03 |
我想计算每天活跃的客户数量。以下措施有效,但由于数据模型有数百万行,因此速度非常慢。有没有更有效的方法来做到这一点?
customer_count =
var calendar_filtered = filter('calendar', day('calendar'[Date]) == 1) -- for speed, only use the first day of each month
var customer_count =
CALCULATE(
COUNTA(customers[customer_id]),
FILTER(
customers,
maxx(calendar_filtered, [Date]) >= customers[start_date] &&
maxx(calendar_filtered, [Date]) <= customers[end_date]
)
)
return
customer_count
我会避免使用 MAXX(),它的计算成本可能很高
CustomerCountOptimized =
VAR CurrentDate = MAX('Calendar'[Date])
RETURN
CALCULATE(
COUNTROWS('Customers'),
'Customers'[start_date] <= CurrentDate,
'Customers'[end_date] >= CurrentDate
)
您仅考虑每月第一天所做的事情可能会减少计算负载,但也会将您的见解的粒度限制为每月而不是每天。您可能需要一个汇总表而不是度量。
尝试加入“客户”和“日历”表的代码
customer_count =
VAR CustomerDates =
ADDCOLUMNS (
CROSSJOIN ( 'Customers', 'Calendar' ),
"Active",
IF (
'Customers'[start_date] <= 'Calendar'[Date]
&& 'Customers'[end_date] >= 'Calendar'[Date],
1,
BLANK ()
)
)
RETURN
CALCULATE (
COUNTROWS ( 'CustomerDates' ),
'CustomerDates'[Active] = 1
)