dax - 计算日期之间的行数

dax - counting rows between dates

我有一个table喜欢

Account   Open        Close
1         01/01/2018  01/01/2019
2         01/01/2018  01/01/2020
3         01/01/2019  01/01/2021
4         01/01/2021  
5         01/01/2019  01/01/2020

我有兴趣统计每年年底仍然活跃的账户数量:

Year  Count
2018   2
2019   3
2020   1
2021   1

我不确定这是否可以从 Account table 本身推导出来,所以我创建了一个日期 table,日期跨越多年。我添加了一个列,如

active_accounts = countrows ( Accounts, FILTER ( Accounts[Open] >= Date_table[Date] && Date_table[Date] < Accounts[Close]

该公式似乎作为添加的列使用,但计算时间非常长,因为日期 table 包含许多日期。所以我尝试将该公式用作 DAX 度量,但似乎无法比较多个 table:

之间的列

a single value for column 'Date' in table 'date_table' can't be determined. This can happen when a measure refers to a column containing many values without specifying aggregation

计算特定年份的活跃帐户数量的最简单方法是什么?可以不用日期吗table?

编辑:用 min()max() 括起 date_table[date] 使措施有效,但数字不正确。 -进一步的研究表明这可能需要 CROSSJOIN()

编辑:看起来这可以通过在 Date_table.Date 所在的位置 FILTERING 创建笛卡尔积 b/w date_tableAccount 来完成大于 Open 但小于 Close

您已经创建了日历table,您可以通过以下措施实现最终目标

_mX:= 
VAR _1 =
    GENERATEALL (
        'fact',
        DATESBETWEEN ( 'Calendar'[Calendar_Date], 'fact'[Open], 'fact'[Close]-1 )
    )
VAR _2 =
    ADDCOLUMNS (
        _1,
        "Calendar_Year",
            CALCULATE (
                MAXX (
                    FILTER ( 'Calendar', 'Calendar'[Calendar_Date] = [Calendar_Date] ),
                    'Calendar'[Calendar_Year]
                ) + 0
            )
    )
VAR _3 =
    SUMMARIZE ( _2, [Calendar_Year], [Account] ) 
VAR _4 =
    GROUPBY ( _3, [Calendar_Year], "count", COUNTX ( CURRENTGROUP (), [Account] ) ) 
VAR _5 =
    ADDCOLUMNS (
        'Calendar',
        "ct",
            CALCULATE (
                MAXX (
                    FILTER ( _4, [Calendar_Year] = MAX ( 'Calendar'[Calendar_Year] ) ),
                    [count]
                )
            )
    )
RETURN
    MAXX ( _5, [ct] )

该度量取决于日历 table,具有最少的列,例如以下内容,并且日历与事实无关

| Calendar_Date | Calendar_Year |
|---------------|---------------|
| 1/1/2018      | 2018          |