过滤所选日期之间的开始和结束日期
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])
))
我有一个事实 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])
))