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_table
和 Account
来完成大于 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 |
我有一个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_table
和 Account
来完成大于 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 |