2017-03-31 9 views
1

質問の多くは、2つのイベントの間にどのくらいの時間が経過したかに関連しています(例:入院しました。いくつかのイベントは複数回発生します。患者の訪問ごとにイベントが発生した最初の日時をどのように見つけることができますか?グループ内からの最初の日時を取得

このモデルでは、Clinical Queriesというテーブルがあります。そのテーブルには、Activity Date Timeという列があります。 Dateと呼ばれる計算列と、Activity Date Timeを基にしたTimeという列があります。これらは、日付ディメンション表および時間ディメンション表に関連しています。

私は最も早い日付を与えるクエリを作成することができました。そして、それは私に最も早い時間を与えます。ただし、日付に関係なく最も早い時刻を返します。たとえば、患者が2つの評価を行った場合、1つは2011年1月1日23:59に、もう1つは2011年1月2日00:01に実行され、クエリは00:01に1/1/2017を返します。

WITH 
MEMBER [Measures].[FirstInterventionDate] AS (
    NonEmpty(existing{[Date].[Fiscal].[Date].MEMBERS}, {[Measures].[Clinical Queries Interventions Performed]}).Item(0).Name 
) 

MEMBER [Measures].[FirstInterventionTime] AS (
    NonEmpty(existing{[Time].[Time].[Time].MEMBERS}, {[Measures].[Clinical Queries Interventions Performed]}).Item(0).Name 
) 

SELECT {[Measures].[Clinical Queries Interventions Performed], [Measures].[FirstInterventionDate], [Measures].[FirstInterventionTime]} on 0, 
    NON EMPTY([Clinical Queries].[Account Number].Children) ON 1 
FROM (
SELECT { [Clinical Queries].[InterventionID].&[3000195], 
    [Clinical Queries].[InterventionID].&[3000186], 
    [Clinical Queries].[InterventionID].&[3000184], 
    [Clinical Queries].[InterventionID].&[3000182], 
    [Clinical Queries].[InterventionID].&[3000184] } ON 0 
FROM (
SELECT { [Clinical Queries].[Account Number].&[ACCT992], 
    [Clinical Queries].[Account Number].&[ACCT064] } ON 0 
FROM [Model] 
)) 

最も早い日付の最も早い日付と時刻を返すためには、何を変更する必要がありますか?上記の例では、23:59の1/1/2017になります。

+2

パフォーマンスを向上させるには、ActivityDateTime列をファクトテーブルに追加し、AggregateFunction = Min値をその値に設定します。可能なMDXオプションより効率的です。 – GregGalloway

+0

私はあなたとDanyloの両方が示唆したように、最小の集計指標を追加しました。私はまだ多次元的な概念を取り巻くSQLの心を得ようとしています。あなたがた両方に感謝します。 – buck

答えて

2

次のコードを試してみてください:2017年3月30日(201703301020のような対策のフィールドを追加します。あなたは、パフォーマンスについては非常に満足していないかもしれので、私は強くDWHレベルでロジックを移動することをお勧めいたします

select 
    {[Clinical Queries].[Account Number].&[ACCT992], 
    [Clinical Queries].[Account Number].&[ACCT064]} * 
    {[Measures].[Clinical Queries Interventions Performed]} on 0, 
    Generate(
     {[Clinical Queries].[InterventionID].&[3000195], 
     [Clinical Queries].[InterventionID].&[3000186], 
     [Clinical Queries].[InterventionID].&[3000184], 
     [Clinical Queries].[InterventionID].&[3000182], 
     [Clinical Queries].[InterventionID].&[3000184]}, 
     Head(
      NonEmpty(
       [Clinical Queries].[InterventionID].CurrentMember * 
       [Date].[Fiscal].[Date].Members * 
       [Time].[Time].[Time].Members, 
       [Measures].[Clinical Queries Interventions Performed] 
      ), 
      1 
     ) 
    ) on 1 
from [Model] 

を10:20)をMinアグリゲーションで使用する場合は、left()right()関数と組み合わせたMDX計算メジャーを使用して値を解析できます。

関連する問題