2017-10-02 3 views
1

POST-Test & PRE-Tes​​tの2つの部分に分割された患者データがあるwebiでレポートを作成しました。各部分には複数のDrawn DTTM(複数の結果)と1つのDispense Event DTTMがあります。テーブルにブレークがある場合、BusinessObject Web IntelligenceのテーブルでMINおよびMAXの日付を取得する方法は?

ビジネスユーザーは、描画された日付時刻または結果をすべては必要としませんが、PRE-Tes​​tの場合はPOST-Testの最小描画日時と最大描画日時が必要です。添付された写真では、残りの情報ではなく、黄色で強調表示されている行だけが必要です。

enter image description here

私も宇宙レベルでの解決のために開いています - インフォメーションデザインツール。

環境:Web Intelligenceの4.1 SP 8、IDT 4.1、&データベースOracle

+0

データは「2つの部分」に分かれていますか? (POST-テストとPRE-テスト?)POST-テストとPRE-テストのどちらかとして行を分類する別の列はありますか? 「テスト」はディスペンスイベントとマークされた1行と同じですか? – mathguy

+0

私は、要件ごとのデータを、ディスペンスイベントdttmに基づいて変数を作成することによって、2つのPOSTテスト&プレテストに分けました(ディスパッチイベントdttm object =([Drawn Datetime] <[Disp Event Datetime]、[PRE]、[POST]の場合)、それぞれに複数の描画日付があり、それぞれから1つだけをキャプチャしようとしています。はい、ポストとプレを示す別の列があります。テストは同じでも異なっていてもかまいません。あなたの最後の質問については不明です。事前に感謝します – Ahmed

答えて

1

状況の解決策を見つけました。次のようにここにある:

私は三つの変数を作成:(これは、その後2、最大に、最小受託に1を与える

  1. Max Accession: =Max([Accession]) Where ([Variables].[Pre/Post] = "PRE") In ([Patient Birth Date])

  2. Min Accession: =Min([Accession]) Where ([Variables].[Pre/Post] = "POST") In ([Patient Birth Date])

  3. Accession Min/Max= If ([Accession]=[Min accession])Then 1 ElseIf ([Accession] = [Max accession]) Then 2 Else 0をし、最終的に0〜残りの部分)

最終ステップ:

  1. 前と後の休憩でアクの少ない数の一種である:私は0より大きい

    注意がされているすべてを選択することが条件で、テーブルに3番目の変数を適用高い

  2. DEV環境で患者名やMRNがないので、患者さんの生年月日を指定しました。患者名はPRODの患者名に置き換えられます。
2

あなたがこのようなものが必要と思われます。私はいくつかのシミュレートされた入力を作成したWITH句に注目してください - あなたの入力ではなく、性質上似ています。計算は各patient_idに対して個別に行われることに注意してください。入力には1人の患者しかシミュレートしませんでしたが、すべてのケースで同じように動作します。ベースデータの1回のパスでは、2つのグループ(PREとPOST)の条件付き解析minとmaxを使用します。MINとMAX内のcase式は2つのグループに分離します。その後、外側のクエリでは、各患者に対して2つの行だけを選択します。出力を見て、入力と比較して、実際の表と列の名前に合わせます。

未処理左: "描画された"日時と "分注"日時が正確に等しい場合はどうなりますか?それがあなたのデータでは起こり得ない場合、明らかに、それは処理する必要はありません。

with 
    inputs (patient_id, dta, drawndttm, dispdttm) as (
     select 1001, 'xhg', date '2017-03-23', date '2017-04-15' from dual union all 
     select 1001, 'abc', date '2017-03-30', date '2017-04-15' from dual union all 
     select 1001, 'xhg', date '2017-03-31', date '2017-04-15' from dual union all 
     select 1001, 'zz3', date '2017-04-22', date '2017-04-15' from dual union all 
     select 1001, 'ab3', date '2017-04-28', date '2017-04-15' from dual 
    ) 
-- End of SIMULATED inputs (for testing only, not part of the solution). 
-- SQL query begins BELOW THIS LINE. Use your actual table and column names. 
select patient_id, dta, drawndttm, dispdttm, 
      case when drawndttm < dispdttm then 'PRE' else 'POST' end as classif 
from  (
      select patient_id, dta, drawndttm, dispdttm, 
        max(case when drawndttm < dispdttm then drawndttm end) 
         over (partition by patient_id) as max_pre, 
        min(case when drawndttm > dispdttm then drawndttm end) 
         over (partition by patient_id) as min_post 
      from inputs 
     ) 
where drawndttm in (max_pre, min_post) 
order by patient_id, drawndttm  -- if needed 
; 

PATIENT_ID DTA DRAWNDTTM DISPDTTM CLASSIF 
---------- --- --------- --------- ------- 
     1001 xhg 31-Mar-17 15-Apr-17 PRE 
     1001 zz3 22-Apr-17 15-Apr-17 POST 
+0

あなたの寛大な時間と努力のおかげで本当に感謝しています。私はBusinessObjects Web Intelligenceツールで答えを探していました。 – Ahmed

+0

@Ahmed - OK、分かりました - 心配する必要はありません。他の誰かが同様の問題を抱えているがSQLで解決する必要がある場合に備えて、私はここに答えを残しています。私はあなたがBWIツールでそれを解決できることを願っています。申し訳ありませんが、私はそれを助けることができません(私はそれが何であるか分かりません)。がんばろう! – mathguy

+0

@Ahmed:答えがよく見えたら、それを_upvote_することを忘れないでください(答えに隣接する上のボタンをクリックすることによって)。それは、誰かに感謝し、マテリアルを参考にする良い方法です。あなたは好きなだけ多くの答えでこれを行うことができます(必須ではありません)。隣接するチェックマーク/チェックマークをクリックすることで、1つの回答を受け入れることをお勧めします(必要に応じて、あなた自身の回答を受け入れることもできます)。ありがとう! – halfer

2

これは、SQLまたはユニバースを変更することなく、レポートで簡単に実行できます。

私は、最初の列(Patient ABO/RH)で識別される各患者の前と後が必要だと仮定していますので、私の下の式で使用しました。それが正しくない場合は、それらの参照を適切なキーに置き換えます。

これを行うにはいくつかの方法があります。私がここで提案しているのは、ポストとして分類された行の最小描画日とPreとして分類された行の最大描画日を単純に取得することです。レポートのブロックに

=If ([Drawn date] = Min([Drawn date]) In ([Patient ABO/RN]) Where ([PrePost] = "POST")) 
Or ([Drawn date] = Max([Drawn date]) In ([Patient ABO/RN]) Where ([PrePost] = "PRE") ) 
Then "Y" Else "N" 

ドロップこれとあなたの黄色の列の両方が「Y」、および残りの「N」を取得する必要があります。まず、その条件を満たした行を識別するための指標を作成します。ブロックに「Y」値のみのフィルタを適用してから、列を削除しても表示されません。

+0

ジョーは何かを試してみました。すべてのあなたの助けを感謝します。 – Ahmed

関連する問題