2016-05-05 18 views
0

私には、人々が含まれているファクトテーブル&の資格があります。ファクトテーブルには2つの日付、StartStudyDate & EndStudyDateがあります。これは学生が勉強していた期間を表しています。 私はPerson Dimension、Qualification Dimension、グループ化次元&の日付次元を持っています。フィルタリング開始日と終了日選択した日付の間の日付

特定の日付に積極的に勉強していた学生の数を調べようとしています。その比較的単純な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におけるファクトテーブルに2つの列を追加することによって始まった:

ActualStartDate

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

ActualEndDate

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

私は、1つの日付がDimDateから選択されるかどうかを確認する措置を書きましたselectedDateが< = ActualStartDate & &> = ActualEndDateのすべての異なる行を取得します。

問題は、これは絶対的な犬のように動作するということです。データを破壊するための属性を追加しようとすると、メモリが不足しています(少なくとも32bit Excelで)。私は64ビットエクセルを試すことができると知っていますが、私のデータセットは小さいので、メモリは問題ではありません。私も、特定の資格のための計算にフィルタを追加する前に、これは次のとおりです。

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

Idはイムは明らかに&私のDAXの経験も非常に軽い問題について、ここで何かが欠けているように正しく問題を理解する上で助けに感謝します。

enter image description here

答えて

0

私はDimDateとの関係を削除してから対策のために、以下のパターンのようなものを使用します。

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

完璧に働いたこと! Imは実際にdimdateとfactテーブルの間に別の「ジャンク」関係を追加し、USERELATIONSHIP経由で使用することを考えていたので、StartDateとEndDateでDimDateを使用することができます。 また、より良い全体的な解決策は、セレクションされた日付が行の開始日と終了日の間にあるかどうかに基づいて、ActiveまたはNotActiveというCalc列になると考えています。これにより、選択した日付の外にいる従業員も表示されます。 –

+0

計算された列は機能しません。リフレッシュ時にのみ評価されます。おそらくCOUNTROWS( 'Person') - [EmployeeCount]などの指標ですか? –

関連する問題