dax - 计算日期之间的行数

时间:2021-07-20 19:08:24

标签: powerbi dax

我有一张像

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 表本身派生,所以我创建了一个日期跨越多年的日期表。我添加了一列像

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

该公式似乎作为一个附加列工作,但由于日期表包含许多日期,因此计算时间非常长。所以我尝试使用该公式作为 DAX 度量,但似乎无法比较多个表之间的列:

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

完成对特定年份的活跃帐户数量进行计数的最简单方法是什么?这可以在没有日期表的情况下完成吗?

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

编辑:看起来这可以通过在date_table大于{{的情况下通过Account创建一个包含FILTERINGDate_table.Date的笛卡尔积来实现1}} 但小于 Open

1 个答案:

答案 0 :(得分:0)

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

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

Solution

该度量取决于具有最少列的日历表,例如以下和日历与事实无关

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