测量计算速度非常慢

问题描述 投票:0回答:2

我有一个包含 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
powerbi dax
2个回答
0
投票

我会避免使用 MAXX(),它的计算成本可能很高

CustomerCountOptimized = 
VAR CurrentDate = MAX('Calendar'[Date])
RETURN
    CALCULATE(
        COUNTROWS('Customers'),
        'Customers'[start_date] <= CurrentDate,
        'Customers'[end_date] >= CurrentDate
    )

您仅考虑每月第一天所做的事情可能会减少计算负载,但也会将您的见解的粒度限制为每月而不是每天。您可能需要一个汇总表而不是度量。


0
投票

尝试加入“客户”和“日历”表的代码

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
    )
© www.soinside.com 2019 - 2024. All rights reserved.