Power BI:使用过滤器但避免传播效应

PowerBI: Use filter but avoid propoagation effect

我正在尝试计算员工在实际项目上花费的时间:

'billability' = [total hours worked on projects] / [total hours that the employee was available]

我得到的架构如下:

Tornado = (employee_id, date, project_id, hours, ..)
'public employee_schedule' = (employee_id, date, hours, ..)

'Tornado' 是记录花费时间的 table。 'public employee_schedule' 是 table 记录每位员工每天的可用小时数。

所以为了计算可计费性,我在 Tornado 中有一个度量 table:

billability= Sum(Tornado.hours)/Sum('public employee_schedule'.hours)

在 powerBi 桌面中,我有一个页面,我在其中对 Tornado 进行了一系列分析,它包括一个与 Tornado.date

绑定的日期过滤器(时间轴控件)

问题:选择日期范围后,Tornado 上的行会被过滤,如果员工在这些日期没有完成任何工作,则不会选择任何内容(工作 0 小时),但过滤器也会传播到 'public employee_schedule' 可用小时数也为 0。

我应该在分母中使用 ALL 和 FILTER,但是如何访问在时间轴控件中选择的日期?

有关数据模型,请参见下面的屏幕截图。

我创建了一个新的 AllDates(id, date) table 与 Tornado 的关系为 1:* 并且日期列为 'public employee_schedule'。

在我的页面中,我使用 AllDates.date 进行过滤,它传播到 Tornado 和 public 'public employee_schedule'。

最后,我使用“格式”>“编辑交互”来避免任何其他不必要的 filters/slicers 影响我的衡量标准(显示在 KPI 卡中)。

另一个解决方案可能是沿着这条线(WorkDone 是 Tornado,HoursAvailable 是 'public employee_schedule'):

billability = 
VAR MinDate =
    CALCULATE ( MIN ( WorkDone[date] ), ALLSELECTED ( WorkDone ) )
VAR MaxDate =
    CALCULATE ( MAX ( WorkDone[date] ), ALLSELECTED ( WorkDone ) )
RETURN
    (
        SUM ( WorkDone[hours] )
            / CALCULATE (
                SUM ( HoursAvailable[available_hours] ),
                FILTER (
                    ALL ( HoursAvailable ),
                    HoursAvailable[date] >= MinDate
                        && HoursAvailable[date] <= MaxDate
                )
            )
    )