DAX - 使用多个过滤器在行级别 (SUMX) 进行计算

DAX - Calculating at the Line Level (SUMX) with Multiple Filters

我想让 DAX 做的是:

  1. 查看 table HR 数据中的每一行。
  2. 确定员工的开始日期 ("employee a")
  3. 应用以下筛选器对 table 中的其他员工人数求和:
    一种。成功完成任务
    b.在开始日期 + 31
    之前结束分配 C。在开始日期之后结束他们的分配 - 31(也就是说在员工 a 的开始日期的一个月内)
    d.在员工 a 之前开始(不计算员工 a 或他们队列中的任何人)
    e.与雇员 a 具有相同的职位。

这基本上是用普通英语问问题 "for each of my employees, how many other employees with the same job title ended their assignments successfully within a month of that employee starting?" 而在 DAX 中基本上只是 "how do I apply multiple filter criteria to a SUMX or COUNTAX measure/calculated column?"

我已经尝试过的措施是:

Contractors Available = COUNTAX(
'BAT VwRptMspAssignment',
    CALCULATE(
        DISTINCTCOUNT('BAT VwRptMspAssignment'[assignmentgk]),
        FILTER(
            FILTER(
                FILTER(
                    FILTER(
                        FILTER(ALL('BAT VwRptMspAssignment'),
                        'BAT VwRptMspAssignment'[End.Date]<EARLIER('BAT VwRptMspAssignment'[Start.Date])+31),
                    'BAT VwRptMspAssignment'[End.Date]>EARLIER('BAT VwRptMspAssignment'[Start.Date])-31),
                'BAT VwRptMspAssignment'[Start.Date]<EARLIER('BAT VwRptMspAssignment'[Start.Date])),
            'BAT VwRptMspAssignment'[EoaReason]="Successful Completion"),
        'BAT VwRptMspAssignment'[JobPostingTitle.1]=EARLIER('BAT VwRptMspAssignment'[JobPostingTitle.1]))
        )
    )

我试过的计算列是:

Contractors Available.1 = SUMX(
FILTER(
        FILTER(
            FILTER(
                FILTER(
                    FILTER(
                        FILTER(ALL('BAT VwRptMspAssignment'),
                            'BAT VwRptMspAssignment'[customergk]=EARLIER('BAT VwRptMspAssignment'[customergk])),
                        'BAT VwRptMspAssignment'[JobPostingTitle.1]=EARLIER('BAT VwRptMspAssignment'[JobPostingTitle.1])),
                        'BAT VwRptMspAssignment'[End.Date]<EARLIER('BAT VwRptMspAssignment'[Start.Date])+31),
                    'BAT VwRptMspAssignment'[End.Date]>EARLIER('BAT VwRptMspAssignment'[Start.Date])-31),
                'BAT VwRptMspAssignment'[Start.Date]<EARLIER('BAT VwRptMspAssignment'[Start.Date])),
            'BAT VwRptMspAssignment'[EoaReason]="Successful Completion"),

'BAT VwRptMspAssignment'[FinishFlag])

但这些解决方案均无效。
有谁知道为什么或我还能尝试什么来实现这一目标?数据格式示例,导出为Excel:

"Contractors Available.2"是计算出来的列。 请注意第一行中的 521。如果我在 Excel 中应用所有这些过滤器,它应该为零,这个职位在数据集中是唯一的。它说 107 "Technical Writer - Expert" 行应该在 2017 年 9 月 26 日的一个月内结束,但这些是数据集中仅有的 3 位技术作家,其他两人中有零人在 9 月 30 日的一个月内结束了他们的任务/2016:

对计算列尝试这样的操作:

Contractors Available.1 =
VAR StartDate = 'BAT VwRptMspAssignment'[Start.Date]
VAR JobTitle = 'BAT VwRptMspAssignment'[JobPostingTitle.1]
RETURN
    COUNTROWS (
        FILTER (
            'BAT VwRptMspAssignment',
            'BAT VwRptMspAssignment'[End.Date] < StartDate + 31
                && 'BAT VwRptMspAssignment'[End.Date] > StartDate - 31
                && 'BAT VwRptMspAssignment'[Start.Date] < StartDate
                && 'BAT VwRptMspAssignment'[EoaReason] = "Successful Completion"
                && 'BAT VwRptMspAssignment'[JobPostingTitle.1] = JobTitle
        )
    )

EARLIER 函数不是必需的,因为变量将保留定义它们的上下文,即行上下文。

编辑: 我用您提供的数据测试了我的公式,它似乎有效。我更改了第二行中的 [End.Date],以在第一行中获得结果。