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

时间:2016-05-05 09:55:01

标签: powerpivot powerbi dax ssas-tabular

我有一个事实表,其中包含人和&他们的资格。事实表有两个日期,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中为事实表添加了两列:

ActualStartDate

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

ActualEndDate

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

然后我写了一个测量,检查是否从DimDate中选择了一个日期,它获得所有不同的行,其中selectedDate是&lt; = ActualStartDate&amp;&amp; &gt; = 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体验也很轻松。

enter image description here

1 个答案:

答案 0 :(得分:0)

我会删除与DimDate的关系,然后使用类似以下模式的方法:

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