我有一张像
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
创建一个包含FILTERING
和Date_table.Date
的笛卡尔积来实现1}} 但小于 Open
答案 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] )
该度量取决于具有最少列的日历表,例如以下和日历与事实无关
| Calendar_Date | Calendar_Year |
|---------------|---------------|
| 1/1/2018 | 2018 |