过滤所选日期之间的开始和结束日期

filtering where start & end Dates between selected Date

我有一个事实 Table 包含人员和他们的资格。事实上 table 有两个日期,StartStudyDate 和 EndStudyDate。这代表学生学习的时期。 然后我有一个人维度、资格维度、一个分组维度和一个日期维度。

我正在尝试查找在特定日期积极学习的学生人数。

在SQL中比较简单:

  select a.PaygroupDescription, a.[Qualification], count(a.[PersonID])
 from  (
  select   distinct p.[PersonID], PaygroupDescription, q.[Qualification]
  from [hr].[Appointment Detail] ad
  join hr.Paygroup pg on ad.PaygroupID = pg.PaygroupID
  join hr.Qualification q on q.QualificationID = ad.QualificationID
 join hr.Person p on p.PersonID = ad.PersonID
 join dimdate sd on sd.DateID = ad.StartDateID
 join dimDate ed on ed.DateID = ad.EndDateID
  where sd.date <= 20150101 and ed.date >= 20150101
  ) as a
  group by a.PaygroupDescription, a.[Qualification]

问题是我不知道如何在 dax 中执行此操作。 我首先在 TabularModel:

中向事实 table 添加两列

实际开始日期

    =LOOKUPVALUE(
'Date'[Date], 
'Date'[DateID],
'Appointment Detail'[StartDateID])

实际结束日期

=LOOKUPVALUE(
'Date'[Date], 
'Date'[DateID],
'Appointment Detail'[EndDateID])

然后我编写了检查是否从 DimDate 中选择了一个日期的度量,它获取了所有不同的行,其中 selectedDate 是 <= ActualStartDate && >= ActualEndDate。

问题是它的行为就像一只绝对的狗。如果我尝试添加任何属性来分解数据,我 运行 内存不足(至少在 32 位 excel 中)。我知道我可以尝试 64 位 excel,但我的数据集很小,所以内存应该不是问题。这是在我什至为特定资格的计算添加过滤器之前:

EmployeeCount:=if(HASONEVALUE('Date'[Date]),
CALCULATE
(distinctcount('Appointment Detail'[PersonID]), 
DATESBETWEEN('Date'[Date], min('Appointment Detail'[ActualStartDate]),Max( 'Appointment Detail'[ActualEndDate]))
)
,BLANK())

感谢您帮助我正确理解问题,因为我显然遗漏了一些关于该问题的信息,而且我的 dax 经验也很浅薄。

我会删除与 DimDate 的关系,然后使用类似于以下模式的内容来衡量:

EmployeeCount := CALCULATE( COUNTROWS ( 'Person' ),
 FILTER('Appointment Detail',
 'Appointment Detail'[ActualStartDate] <= MAX(DimDate[Date])
 && 'Appointment Detail'[ActualEndDate] >= MIN(DimDate[Date])
))