如何计算日期列和过滤器表达式之间的日期差

时间:2019-10-11 09:09:39

标签: dax datediff

我有一个包含两个日期列的案例事实表:startDate和endDate以及一个unitCount。我有一个不相关的日期维度,其中包含所有日期。

这样,我可以将案例数计算为:

Number of cases (Beginning of month) :=CALCULATE(
sum('Fact'[unitCount]),
FILTER('Fact',
'Fact'[endDate]>=MIN(Date[Date]) &&
'Fact'[startDate]<=MIN(Date[Date])
))

这很好,可以生成一个不错的列表:

Year-Month Number of cases(Beginning of month)
2018-01          2
2018-02          5
2018-03          3
... etc

我想添加一列,以衡量每个月初的案件平均持续时间。

我尝试过采取措施:

Average duration (Beginning of month):=calculate(AVERAGEX('Fact',
datediff('Fact'[startDate],
MIN('Date'[Date]),
MONTH)),
FILTER('Fact',
'Fact'[endDate]>=MIN('Date'[Date]) &&
'Fact'[startDate]<=MIN('Date'[Date])
))

但是,此代码失败并出现错误:在Datediff函数中,“开始日期”不能大于“结束日期”。这不是问题,因为过滤器阻止了这种情况的发生。我该如何解决?

1 个答案:

答案 0 :(得分:0)

我想我可能已经找到了解决方案:

Average duration :=
CALCULATE (
    AVERAGEX (
        'Fact',
        DATEDIFF (
            'Fact'[startDate],
            MINX ( FILTER ( 'Date', Date[Date] >= 'Fact'[startDate] ), 'Date'[Date] ),
            MONTH
        )
    ),
    FILTER (
        'Fact',
        'Fact'[endDate] >= MIN ( Date[Date] )
            && 'Fact'[StartDate] <= MIN ( Date[Date] )
    )
)

此代码似乎运行良好。太好了!