首页 > 解决方案 > 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

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

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

编辑:看起来这可以通过创建一个笛卡尔积来完成 b/wdate_table并且Account通过FILTERINGwhereDate_table.Date大于Open但小于Close

标签: powerbidax

解决方案


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

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

解决方案

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

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

推荐阅读