臨床クエリ言語 (CQL) リファレンス
Veeva 臨床データベース (CDB) の臨床データへのアクセス、検索、対話に、臨床クエリ言語 (CQL) を使用することができます。このガイドでは、CQL の活用方法について、その構文、構造、句、演算子の概要について説明しています。CQL クエリは多くの構文要素において構造化照会言語 (SQL) と共通ですが、CQL ステートメントでは合理化され、臨床に焦点を当てた構文を使用して、EDC データ専用のクエリを実行することができます。
可用性: 臨床データベース (CDB) は CDB ライセンスを保有するお客様のみにご利用いただけます。詳細は Veeva のサービス担当者までお問い合わせください。
CDB ワークベンチでデータを照会すると、CQL ステートメントが渡されます。CQL ステートメントでは FROM 句で照会するオブジェクトが指定され、SELECT 句で取得するフィールドが指定され、WHERE 句で適用する任意のフィルタが指定されます。
次のクエリの例は、スタディ「Cholecap 2019 フェーズ 1」のフォーム Demographics および Inclusion Criteria からすべてのデータ項目を返すものです。
SELECT *
FROM F.Demographics, F.Inclusion_Criteria
CQL の臨床コンテンツ
CQL は、一般的な臨床データのパターンと関係性を認識します。この「コンテキスト」は、SQL などの汎用クエリ言語よりもシンプルな言語構文を提供します。CQL は、次の定義済みオブジェクトと関係性を認識します:
コンテキスト要素 | 説明 | 例 |
---|---|---|
スタディ | すべての臨床データは、事前定義されたタイムポイントとデータの構造、およびそのデータの収集、レビュー、クリーニング、ロックするための事前定義されたワークフローを持つスタディのコンテキスト内で収集されます。 |
IMG-0314-A、TEL2019-1 |
施設 | 臨床データの収集施設。 |
101 |
国 | 施設の設置国 (Vault EDC のスタディ実施国オブジェクトで表されます) |
USA、UK |
症例 | スタディ内のすべての臨床データは、そのスタディに登録された被験者について収集されます。 |
1001、1002 |
事象 | すべてのデータは、特定の収集ポイントのコンテキスト内で収集されます。この収集ポイントは「イベント」です。これは多くの場合「来院」に対応します。 |
来院、来院 1、来院 2 に登録 |
ヘッダー | 特定の収集ポイント (イベント) で特定の被験者に対して収集されたすべてのフォームは、同じコンテキストを共有します。ヘッダーを使用して、このコンテキストを照会することができます。ヘッダーを使用すると、ワークベンチのオブジェクト階層内のフォームの上に存在するすべてのコンテキストオブジェクトを素早く返すことができます。 |
@HDR |
フォーム | フォームで収集されたデータ項目のコレクション。 |
バイタルサイン、受療歴 |
データ項目 | スタディの特定の収集ポイントで被験者について収集された特定のデータ要素 (項目)。 |
生年月日、収縮期血圧、瞳の色 |
プロパティ | 上記のすべてのコンテキスト要素には、要素のさまざまな側面を記述する追加のプロパティがあります。これらのプロパティを使用して、オブジェクトの状態、項目名、最終更新日などの基本情報を表すことができます。要素のほとんどのプロパティは関数() で返すことができますが、名前、ID などの基本的なプロパティはドット表記を使用して返すことができます。 |
ロック済み (イベント 1)、項目 1.ID |
照会可能なデータ
CQL でクエリを作成するには、照会可能なデータとそのデータの構造を理解することが重要です。DESCRIBE
キーワードと SHOW
キーワードを使用すると、CQL で照会可能なデータのリストを返すことができます。
Describe
DESCRIBE
キーワードを使用してスキーマに関する詳細を返すクエリを作成することができます。
CQL は、次のデータ要素のDESCRIBE
をサポートしています:
ヘッダー
フォーム
項目グループ
項目
REFERENCE_OBJECT
DESCRIBE
を呼び出すと、CQL はそのテーブルまたはオブジェクト内のすべてのフィールドを返します。
DESCRIBE フォーム
フォームに対して DESCRIBE を呼び出すと、フォームに含まれるすべての項目 (名前とデータ型を含む) のリストが返されます。
DESCRIBE Form VITALS
このクエリは、スタディ「Cholecap 2019-フェーズ 1」の Vitals フォームにあるすべての項目のリストを返します。
名前 | データタイプ | |
---|---|---|
フォーム | Form.Name | テキスト (100) |
Form.SeqNbr | Int | |
項目グループ | ItemGroup.Name | テキスト (100) |
ItemGroup.SeqNbr | Int | |
項目 | 脈拍 | Int |
項目 | Systolic_Blood_Pressure | テキスト (255) |
項目 | Diastolic_Blood_Pressure | テキスト (255) |
項目 | 体温 | Int |
表示
また、SHOW
キーワードを使用してクエリを作成すると、可能な値のリストを返すこともできます。イベントグループ、イベント、フォーム、コードリストの各項目に SHOW
を適用することができます。SHOW
を使用して、現在の Vault 内のスタディのリストを返すこともできます。
SHOW Studies
SHOW
を使用して、現在の Vault 内のスタディのリストを返すことができます:
SHOW STUDIES
SHOW EVENTGROUPS
SHOW
を使用して、現在のスタディ内のイベントグループのリストを返すことができます:
SHOW EVENTGROUPS
SHOW EVENTS
SHOW
を使用して、現在のスタディ内のイベントのリストを返すことができます:
SHOW EVENTS
SHOW FORMS
SHOW
を使用して、現在のスタディ 内のフォームのリストを返すことができます:
SHOW FORMS
SHOW CODELIST ITEMS
SHOW
を使用して、与えられたコードリスト内のコードリストのアイテムのリストを返すことができます。コードリストタイプのデータアイテムの名前を指定する必要があることに注意してください。
SHOW CODELIST <DATAITEM>
SHOW VIEWS
SHOW
を使用して、スタディの内のビューのリストを返すことができます。
SHOW Views
SHOW Reference
SHOW
を使用して、スタディの内の参照オブジェクトのリストを返すことができます。
SHOW Reference
システムリスト
システムリストには、CALL
を使用して CQL 経由でアクセスすることができます。システムリストは未加工タイプのエクスポート用に生成されるリストで、スタディと収集データに関するコンテキスト情報が含まれています。
- Sys_Sites:
CALL Sys_Sites
- Sys_Subjects:
CALL Sys_Subjects
- Sys_Events:
CALL Sys_Events
- Sys_Forms:
CALL Sys_Forms
- Sys_ILB:
CALL Sys_ILB
- Sys_Links:
CALL Sys_Links
ビュー
ビューには、SHOW VIEWS
を使用して CQL 経由でアクセスすることができます。これを行うことで、現在のスタディのすべてのビューのリストが返されます。ビューは、特殊なリストです。ビュー用に CQL を記述する際に、別のビューを選択して参照することもできます。その際、ビューの名前 (タイトル) をソースとして使用します。
ビュー定義時の CQL の制限事項
ビュー定義時に、以下の CQL 機能は使用することはできません:
select *
UnPivot()
- 列のエイリアスの重複使用
- 射影の
@Form.SeqNbr
以外の@Form
属性 - 射影の
@ItemGroup.SeqNbr
以外の@ItemGroup
属性
ビュー参照の CQL の制限事項
カスタムリストでビューを参照する際、以下の制限事項があります:
- ビューで別のビューを参照することはできません。
- ビューの
@Form
および@ItemGroup
属性を射影またはフィルタ (WHERE
句) に含めることはできません。 On Subject ALIGN
を使用する場合、ビューにUNALIGN
を使用することはできません。On Subject
を使用しているビューと、他のフォームまたはビューを結合する場合、ビューにはOn Subject
を使用する必要があります。
ビュー内の被験者の結合
ビューに他のフォームまたはビューを結合する場合、ビューには On Subject ALIGN
および On Subject UNALIGN
を使用することができます。
ビューとフォーム間で症例を使用した結合を実行する場合、ビューの ビュー定義 に On Subject
を記述する必要があります。これがない場合、CQL はエラーを返します。
「ビューは、その定義と同じ方法でのみ結合することができます。ビュー定義とビュー参照間で On Subject の配置が同じであることを確認してください。」
On Subject ALIGN を使用したビュー定義
以下のビュー定義は、被験者が有害事象のために服用している医薬品を取得するものです。このビューは「View_AE_CM\OnSubjectALIGN」と呼ばれています:
select @HDR.Site.Name, @HDR.Subject.Name,
@Form.SeqNbr, @ItemGroup.SeqNbr,
ae.AETERM, ae.AESTDAT, ae.AEONGO, ae.AEENDAT, ae.AESEV,
cm.CMTRT, cm.CMSTDAT, cm.CMONGO, cm.CMENDDAT
from AdverseEvent as ae, ConcomitantMedication as cm On Subject ALIGN
where (@Form.Status = 'submitted__v' or @HDR.Event.Status IN ('did_not_occur__v'))
and AETERM is not null
order by @HDR.Subject.Name, @Form.SeqNbr
現在、このビューを VitalSigns という別のフォームと結合して、被験者の身長、体重、BMI などのバイタルを取得することができます。この結合は On Subject ALIGN
および On Subject UNALIGN
の両方を使用することができます。
select @HDR.Site.Name, @HDR.Subject.Name,
@Form.SeqNbr, @ItemGroup.SeqNbr,
algn.AETERM, algn.AESTDAT, algn.AEONGO, algn.AEENDAT, algn.AESEV,
algn.CMTRT, algn.CMSTDAT, algn.CMONGO, algn.CMENDDAT,
vtls.HEIGHT, vtls.WEIGHT, vtls.BMI, vtls.SYSBP
from View_AE_CM_OnSubjectALIGN as algn, VitalSigns as vtls On Subject ALIGN
where (@Form.Status = 'submitted__v' or @HDR.Event.Status IN ('did_not_occur__v'))
select @HDR.Site.Name, @HDR.Subject.Name,
@Form.SeqNbr, @ItemGroup.SeqNbr,
algn.AETERM, algn.AESTDAT, algn.AEONGO, algn.AEENDAT, algn.AESEV,
algn.CMTRT, algn.CMSTDAT, algn.CMONGO, algn.CMENDDAT,
vtls.HEIGHT, vtls.WEIGHT, vtls.BMI, vtls.SYSBP
from View_AE_CM_OnSubjectALIGN as algn, VitalSigns as vtls On Subject UNALIGN
where (@Form.Status = 'submitted__v' or @HDR.Event.Status IN ('did_not_occur__v'))
On Subject UNALIGN を使用したビュー定義
以下のビュー定義は、被験者が有害事象のために服用している医薬品を取得するものです。このビューは「View_AE_CM\OnSubjectUNALIGN」と呼ばれています:
select @HDR.Site.Name, @HDR.Subject.Name,
@Form.SeqNbr, @ItemGroup.SeqNbr,
ae.AETERM, ae.AESTDAT, ae.AEONGO, ae.AEENDAT, ae.AESEV,
cm.CMTRT, cm.CMSTDAT, cm.CMONGO, cm.CMENDDAT
from AdverseEvent as ae, ConcomitantMedication as cm On Subject UNALIGN
where (@Form.Status = 'submitted__v' or @HDR.Event.Status IN ('did_not_occur__v'))
and AETERM is not null
order by @HDR.Subject.Name, @Form.SeqNbr
定義に On Subject UNALIGN
を含むビューは、次に示すように On Subject UNALIGN
を使用して別のフォームにのみ結合することができます:
select @HDR.Site.Name, @HDR.Subject.Name,
@Form.SeqNbr, @ItemGroup.SeqNbr,
unalgn.AETERM, unalgn.AESTDAT, unalgn.AEONGO, unalgn.AEENDAT, unalgn.AESEV,
unalgn.CMTRT, unalgn.CMSTDAT, unalgn.CMONGO, unalgn.CMENDDAT,
vtls.HEIGHT, vtls.WEIGHT, vtls.BMI, vtls.SYSBP
from View_AE_CM_OnSubjectALIGN as unalgn, VitalSigns as vtls On Subject UNALIGN
where (@Form.Status = 'submitted__v' or @HDR.Event.Status IN ('did_not_occur__v'))
参照オブジェクト
スタディのすべての参照オブジェクトのリストを取得するには、SHOW
キーワードを使用します:
SHOW Reference
次に、DESCRIBE
キーワードを使用して指定された参照オブジェクトの品目を取得します。
DESCRIBE Reference <Reference_Object_Name>
ReferenceRelations
キーワードを使用して、reference_object_name
、related_form
、related_item
、related_key
プロパティのキーと値がペアになったテーブルを取得します。
ReferenceRelations <Reference_Object_Name>
品目がテキスト型参照オブジェクトの場合、CQL で以下の関数を使用することができます:
CONCAT
長さ
TRIM
LTRIM
RTRIM
UPPER
LOWER
左
右
品目が日付型参照オブジェクトの場合、CQL で以下の関数を使用することができます:
ADDDATE
SUBDATE
DATEDIFF
DATE_FORMAT
SITENORMALIZEDDATE
RAWDATE
SDTMDATEFORMAT
STR_TO_DATE
CURDATE
今すぐ
年
月
週
日
時間
分
第2週
LAST_DAY
参照オブジェクトへの CQL の制限事項
参照オブジェクトを使用する場合、CQL の制限事項が適用されます。
次の関数は、参照データでは使用できません:
機能停止
ILB
ラベル
LASTCODED
LastModifiedDate
ロック済み
署名済み
ステータス
クエリの構文と構造
CQL クエリはタプル (列の順序が定義されたデータのテーブル) を返します。タプルを返すには、CQL クエリで以下を指定する必要があります:
- PROJECTION: 取得したい特定のデータ要素。
- SELECTION: 射影のデータ要素が存在する特定のデータテーブル。
- FILTER (任意): 返されるデータ要素の照合基準 (これらはタプルに含まれる必要はなく、スタディ内の暗黙的な関係を通じて参照可能です)。
- ORDER (任意): タプル内で行が返される順序。
射影
CQL クエリの PROJECTION は、取得するデータ要素と、結果セット内の要素の順序を指定します。フォールドのリストは DATAITEM
名を使用して明示的に指定したり、ワイルドカードショートカットを使用することもできます。
射影の記述には、SELECT
文を使用します。
ワイルドカード
SELECT
文でワイルドカードのアスタリスクを使用すると、FROM 句で指定したフォームコンテキスト内の関連する DATAITEMS
のすべての列をレイアウト順に返すことができます。
SELECT *
FROM Demographics
コンテキスト修飾アスタリスク
ワイルドカードのアスタリスクの代わりに、コンテキスト修飾アスタリスクを使用して、修飾子のコンテキスト内のすべての DATAITEMS
を返すことができます。
現在のリリースでは、FORM
と ITEMGROUP
の修飾子のみがサポートされています。
SELECT <Qualifier>.*
FROM <Form_Name>
SELECT Creation_Criteria.*
FROM Demographics
このクエリの例では、スタディ「Cholecap 2019 フェーズ 1」の Demographics フォームの Creation Criteria 項目グループにあるすべての DATAITEMS
が返されます。
データ項目
または、取得する特定の DATAITEMS を指定することもできます。射影で指定したフォーム上に存在する任意の DATAITEM を選択することができます。フォームを 1 つだけ指定した場合、これらの列を直接参照することができます。フォームを複数指定した場合、各 DATAITEM をフォーム名またはエイリアスで修飾する必要があります。
SELECT <Qualifier>.<DataItem>
FROM <Form_Name>
SELECT Demographics.Subject_Date_of_Birth, Enrollment.Randomization_Number
FROM Demographics, Enrollment
このクエリの例では、Demographics フォームの生年月日項目と Enrollment フォームのランダム化した数字項目のすべての値が返されます。
データ関数
また、結果セットの特定の列として返すことができる関数を指定することもできます。関数では DATAITEMS
を引数に使用することができ、また、上記の多くのコンテキストを使用することができます。
関数を使用して、名前と ID を除く DATAITEM
のすべてのプロパティにアクセスすることができます。
関数に Item Groups を使用することはできません。
関数、使用できる引数、定義の完全なリストについては、以下を参照してください。
SELECT STATUS(Demographics.Subject_Date_of_Birth)
FROM Demographics
このクエリの例では、スタディ「Cholecap 2019 フェーズ 1」の Demographics フォームの 生年月日項目のステータスが が返されます。
Distinct
DISTINCT を使用すると、特定の列または列の集合全体の値の一意のインスタンスのみを返すことができます。
SELECT DISTINCT <Qualifier>.<DataItem>
FROM <Form_Name>
SELECT DISTINCT Dosing.Dosage_Amount
FROM Dosing
このクエリでは、スタディ「Cholecap 2019 Phase 1」の 投薬 フォームの投薬量項目からすべての一意の値が返されます。
現在のリリースでは、CDB は CQL ステートメントの DISTINCT
を使用しているリストのセルをハイライト表示しません。
エイリアス (AS)
AS
を使用して、クエリ内のフォームやデータ項目のエイリアスを定義することができます。エイリアスは、名前の長いフォームまたはデータ項目を繰り返し参照する場合に便利です。
射影した特定の列にエイリアスを指定することができます。データ項目に別名を指定した場合、ワークベンチによってリストの別名で項目の列の名前が変更されます。データ項目のエイリアスは、次の例のような長いデータ項目名に対して特に有効です。データ項目に短いエイリアスを使用することで、コアリストで結果を表示際の水平スクロールの必要性を減らすことができます。
エイリアスは、フォームに指定することもできます。これは、1 つのクエリでフォームを複数回参照する場合に有効です。エイリアスを設定した後は、フォーム名ではなくエイリアスでフォームの参照が可能になります。
SELECT <Qualifier>.<DataItem> AS <Item_Alias>
FROM <Form_Name> as <Form_Alias>
SELECT Demographics.Subject_Date_of_Birth as DOB, Enrollment.Randomization_Number_from_IRT as ID
FROM Demographics, Enrollment
このクエリの例では、Demographics フォームの生年月日項目と Enrollment フォームのランダム化した数字項目のすべての値が返されます。
オペレーショナル射影要素
DATAITEMS
に加えて、クエリ結果と共に有用なオペレーショナルデータをクエリすることができます。これらのオペレーショナル要素の中で最も強力なのがヘッダーです。ヘッダーは、要求するフォームやデータ項目に関連する最も重要なスタディのメタデータを要約したものです。スタディ、施設、症例、イベントグループ、イベントに関する情報を要求することもできます。
@HDR
変数表記を使用すると、任意の射影でヘッダー情報を返すことができます。ワイルドカードを使用して @HDR
情報を照会して照会可能なすべてのメタデータを取得したり、フォームに関連する特定のヘッダー情報を照会することができます。
SELECT @HDR, <Qualifier>.<DataItem>
FROM <Form_Name>
SELECT @HDR.SITE, *
FROM Dosing
上記のクエリは、施設の概要情報を返します。
ヘッダーの概要
定義済みの要素や列の順序のセットを使用して、特定のコンテキスト内で特定の概要を作成することができます。次のヘッダーコンテキストを使用できます:
@HDR.Study
@HDR.Site
@HDR.Subject
@HDR.Event
現在のリリースでは、@HDR.EventGroup
には概要は含まれません。イベントグループコンテキストを使用するには、プロパティをして薄る必要があります。
@HDR
関数と @HDR.Study
などのコンテキストのみを使用した場合、CQL は使用可能なプロパティの限定された集合のみを返します。
ヘッダーのコンテキスト | 返されるプロパティ |
---|---|
@HDR.Study |
Study.Name |
@HDR.Site |
Site.Name、Site.PI |
@HDR.Subject |
Subject.Name、Subject.Status |
@HDR.Event |
Event.Name、Event.Date、Event.Status |
ヘッダーの詳細プロパティ
また、ヘッダーの特定の要素を対象にして、選択範囲で返したり、フィルタ句に使用することもできます。@HDR
コンテキストにドット表記でプロパティ名を追加し、そのプロパティを取得します。例えば、@HDR.Study.Phase
を使用してスタディのフェーズを返したり、@HDR.Event.Date
を使用してイベントのイベント日を返すことができます。
各 @HDR
コンテキスト要素に、ドット表記で以下のプロパティを使用することができます。
ヘッダーのコンテキスト | 利用可能なプロパティ |
---|---|
@HDR.Study |
|
@HDR.Site |
|
@HDR.Subject |
|
@HDR.EventGroup |
|
@HDR.Event |
|
フォームおよび項目グループのプロパティ
選択またはフィルタ句に、フォームおよび項目グループのプロパティを対象にすることができます。@Form
または @ItemGroup
にドット表記でプロパティ名を追加してそのプロパティを取得します。例えば、@Form.CreatedDate
を使用して、フォームの作成日を返すことができます。
コンテキスト | 利用可能なプロパティ |
---|---|
@フォーム |
|
@ItemGroup |
|
フォームリンク項目
@FormLink
表記を使用して、項目とフォームのリンクに使用する項目を対象にすることがにできます。FormLink 項目を含むフォームが、リンク元フォームとなります。FormLink 項目は、リンク先フォーム にリンクされています。@FormLink
表記を使用するには、リンク元フォーム上の FormLink 項目の名前と、リンク先フォーム上で対象とする項目を指定する必要があります。
@FormLink.<FormLink-Name>.<Item-Name>
リンク先の項目が複数の項目グループにまたがって使用されている場合、項目グループの名前も指定する必要があります。
@FormLink.<FormLink-Name>.<ItemGroup-Name>.<Item-Name>
リンク元のフォームが複数の項目グループにまたがって同じ FormLink 項目を使用する場合、項目グループのフォームリンクの名前を指定する必要があります。
@FormLink.<ItemGroup-Name-FormLink>.<FormLink-Name>.<ItemGroup-Name>.<Item-Name>
次の例では、AE フォームに 2 つの FormLink (ae_to_cm と ae_to_mh) があることを前提としています。リンク先フォームの項目には、次の CQL を使用してアクセスします。
select @HDR.Subject.Name, AETERM, AESTDAT, AEONGO,@FormLink.ae_to_cm.CMTRT, @FormLink.ae_to_cm.CMSTDAT, @FormLink.ae_to_cm.CMONGO, @FormLink.ae_to_cm.CMENDAT,@FormLink.ae_to_mh.MHTERM, @FormLink.ae_to_mh.MHSTDAT, @FormLink.ae_to_mh.MHONGO, @FormLink.ae_to_mh.MHENDAT
from `EDC`.`AE`
where @For.Status = 'submitted__v' or @HDR.Event.Status IN ('did_not_occur__v')
FormLink ae_to_cm は、ae_to_cm 項目と CM フォームの間にあります。リンク先フォーム CM の CMONGO 項目には、@FormLink.ae_to_cm.CMONGO
を使用してアクセスします。
FormLink ae_to_mh は、ae_to_mh 項目と MH フォームの間にあります。リンク先フォーム MH の MHSTDAT 項目には、@FormLink.ae_to_mh.MHSTDAT
を使用してアクセスします。
WHERE
句、Order By
句、Group By
句には、@FormLink
表記で示される項目を使用することができます。
FormLink 項目では、次の CQL 機能がサポートされています:
- UNION および UNION ALL
- On Subject ALIGN および UNALIGN
- サブクエリ
- UNPIVOT
クエリのプロパティ
選択またはフィルタ句に、クエリのプロパティを対象にすることができます。@QRY
または @QRYMSG
にドット表記でプロパティ名を追加してそのプロパティを取得します。例えば、クエリの ID を取得するには、@QRY.ID
を使用します。
@QRY
@QRY
を使用してクエリオブジェクトにクエリが可能なプロパティを以下に紹介します:
プロパティ | 説明 |
---|---|
ID | クエリ用に自動生成された |
名前 | EDC で定義されたクエリの名前。注: サードパーティのデータの場合、この数字は一意の ID です。 |
ステータス | クエリの現在のステータス (オープン、回答済み、終了) |
カテゴリ | クエリの起点 (手動またはシステム生成) |
FirstMessage | クエリで最初に作成されるクエリメッセージ (クエリが開始される時に入力されるコメント)。これは、クエリに対するすべてのクエリメッセージ (コメント) の一覧ではありません。 |
LatestMessage | クエリで作成された最後 (直近) のクエリメッセージ (クエリの回答時に入力されるコメント)。これは、クエリに対するすべてのクエリメッセージ (コメント) の一覧ではありません。 |
CreatedDate | クエリの作成 (オープン) 日時。 |
CreatedBy | クエリを作成 (オープン) したユーザの名前。 |
LastModifiedDate | クエリの最終更新日時。 |
LastModifiedBy | クエリを最後に更新したユーザ名。 |
ItemName | クエリが開かれた項目の名前。クエリがイベント日にある場合、 |
EventName | クエリに関連付けられたイベントの名前。 |
EventDate | クエリに関連付けられたイベントのイベント日付。 |
SubjectName | クエリに関連付けられた被験者の名前。 |
SubjectStatus | クエリに関連付けられた被験者の症例ステータス。 |
施設 | クエリに関連付けられた被験者に割り当てられた施設。 |
SiteCountry | クエリに関連付けられた被験者に割り当てられた施設のスタディ実施国。 |
フォーム | クエリに関連付けられたフォームの名前。クエリがイベント日にある場合、 |
FormSeqNbr | クエリに関連付けられたフォームのシーケンス番号。クエリがイベント日にある場合、 |
FormSource | クエリのデータポイントの発生元のソース (例: 「Lab」、「EDC」、または「eCOA」)。 |
ItemGroupSeqNbr | クエリに関連付けられた項目グループのシーケンス番号。クエリがイベント日にある場合、 |
OriginSystem | クエリの発生元のソースシステムの名前 (EDC、CDBなど)。現在のリリースでは、CQL は、CDB 内のChecks 経由で開かれたクエリに対してのみ、このプロパティに値「CDB」を返します。 |
OriginName | クエリが開かれたリストの名前。クエリが CDB で開かれたものでない場合、 |
OriginID | クエリが開かれたリストのIDクエリが CDB でオープンされていない場合は |
OpenToReply | クエリの作成日とクエリの初回応答日の差。 |
RuleID | クエリを作成したルールの ID (システムが生成したクエリの場合)。 |
TriggerID | クエリを作成したカスタムトリガーの ID。 |
CausedDataChange | クエリ作成後にデータが変更されたかどうか。 |
RowExternalID | データインポート中に行に割り当てられた行外部 ID。 |
@QRYMSG
@QRYMSG
を使用してクエリメッセージオブジェクトにクエリが可能なプロパティを以下に紹介します:
プロパティ | 説明 |
---|---|
ステータス | クエリメッセージのステータス (オープン、回答済み、クローズ)。 |
テキスト | メッセージのテキスト。 |
CreatedDate | クエリメッセージの作成日時。 |
CreatedBy | クエリメッセージを作成したユーザのユーザ名。 |
選択
選択 (FROM
) は、射影が動作するフォームの名前を指定するためのメカニズムです。ワイルドカードのアスタリスクでは、選択によって射影したフォームの順序も指定されます。
CQLでは、FROM
は常にデータの選択元のフォームコンテキストを指します。FROM
句で他のコンテキストを使うことはできません。
ヘッダーは @HDR
変数からアクセスできるため、FORM と DATAITEMS が不要な場合、ヘッダーの任意の要素を単独で選択することもできます。これらのタイプの選択を使用して、症例ごとにオペレーショナルデータのみをリストした結果を作成することができます。射影に @HDR
のみが含まれる場合、FROM を指定せずにこの選択をフィルタすることができます。ただし、エイリアスとサブクエリを使用するには、FROM
句を含める必要があります。
Join on Subject
デフォルトでは、CQL は被験者とイベントの両方を結合します。このため、異なるイベントにある 2 つのフォームから選択した場合、CQL は被験者ごとに 1 行を返すのではなく、フォームごとに 1 行返します。この場合、被験者のみで結合することで、両方のフォームからのデータを含む被験者ごとに 1 行を返すことができます。
被験者で結合するには、選択のフォーム ID のリストに on subject
を追加します。使用できる ID の数に制限はありませんが、on subject
は指定されたすべてのフォーマットに適用されます。
on subject
は複数のイベントグループまたはイベントからデータを返すことができるため、on subject
と一緒に使用すると CQL は @HDR.EventGroup
または @HDR.Event
プロパティに対して null を返します。これらのプロパティを取得する必要がある場合、各フォームのフォームエイリアスで選択します。
既知の問題: 現在のリリースでは、被験者で結合する際に CQL で COMPACT
を使用することはできません。
次のクエリの例は、被験者 ごとに @HDR.Subject プロパティ、被験者のイニシャル、被験者の DOB、身長、体重、脈拍数、最高血圧、最低血圧、体温を持つ 1 行を返します。クエリの例で被験者による結合をしない場合、CQL は Demographics フォームの項目の行と Vitals フォームの項目の 2 行目を返します。
SELECT @HDR.Subject, creation_criteria.subject_initials, creation_criteria.subject_dob, vitals.height, vitals.weight, vitals.pulse__bpm_, vitals.systolic_bp__hhMg, vitals.diastolic_bp__hhMg, vitals.temperature
FROM demographics, vitals ON subject
Align および Unalign 修飾子
繰り返しのフォームまたは項目グループで on subject
を使用する場合、結合されたシーケンスのデータ (aligned) を返すか、シーケンスが位置揃えされていない (unaligned) 場合でもデータを返すかを選択できます。例えば、統計情報フォームと繰り返しの有害事象フォームからの情報を表示する場合、CQL は 統計情報フォームからのデータを被験者のすべての有害事象フォームインスタンスに対して返される行の返します。この動作は、シーケンスが位置揃えされていない状態でもデータを返しているため、「unaligned」となります。UNALIGN
はデフォルトの動作であるため、CQL ステートメントにこの修飾子を明示的に含めるかどうかは任意となります。この例では、「aligned」の動作は、被験者のすべての有害事象フォームインスタンスに対して返される最初の行についてのみ、統計情報フォームからデータを返します。位置揃えする場合、ALIGN
修飾子を含めます。
高度な結合
CQL は高度な (方向性のある) 結合にも対応しています。高度な結合を使用すると、最初に @HDR に結合することなくフォームを結合できます。
LEFT JOIN
: 1 番目 (左) の表の全レコード、および 2 番目 (右) の表の一致するデータ
RIGHT JOIN
: 2 番目 (右) の表のすべてのレコード、および 1 番目 (左) の一致するデータ。
INNER JOIN
: 一致が見つかった両方の表のレコードのみ
現在のリリースでは、CQL は外部結合をサポートしていません。
詳細結合を使用して参照データを他のデータに結合することはできません。
例: フォーム間の Left Join
以下の CQL 文では、フォーム定義属性 @Form.Subject
に基づき、AE フォームと CM フォームの間で LEFT JOIN
が存在します。Subject.Name はフォーム定義の一部であり、@HDR からのものでははりません。
select @Form.Subject.Name, @Form.Event.Name,
AETERM, AESTDAT, CMTRT, CMSTDAT
from AE as ae LEFT JOIN CM as cm
ON ae.@Form.Subject.Name = cm.@Form.Subject.Name
where @Form.Status = 'submitted__v'
結合条件は @Form 属性 (@Form.Subject.Name
) に基づいており、プロジェクションには @HDR 属性が含まれていないため、@HDR に結合しなくても正常に機能します。
例: フォームおよび @HDR 間の Left Join
以下の CQL クエリでは、プロジェクションに @HDR 属性があるため、@HDR との結合が必須です。以下のクエリは、Event.ID に基づく @HDR と AE の LEFT JOIN です - この LEFT JOIN の出力は、Event.ID と Subject.ID に基づいて CM と再度 LEFT JOIN されます。
以下の CQL 文では、プロジェクションに @HDR 属性が含まれているため、@HDR との結合が必須です。これは、@Form.Event. ID
に基づく @HDR フォームと AE フォームの LEFT JOIN
です。この結合の出力は、@Form.Event. ID
および@Form.Subject.ID
に基づいて CM フォームと LEFT JOIN
で再度結合されます。
select @HDR.Subject.Name, @HDR.Site.Name,
AETERM, AESTDAT, CMTRT, CMTERM
from @HDR LEFT JOIN AE as ae ON @HDR.Event.ID = ae.@Form.Event.ID
LEFT JOIN CM as cm ON @HDR.Event.ID = cm.@Form.Event.ID and ae.@Form.Subject.ID = cm.@Form.Subject.ID
サブクエリ
CQL ではサブクエリを使用できます。
IN を使用したサブクエリ
フィルタの IN
演算子内で、参照可能な値のリストを返すサブクエリを定義することができます。
SELECT * FROM Randomization
WHERE @HDR.Subject.ID IN (
SELECT @HDR.Subject.ID FROM Demographics
WHERE Creation_Criteria.Sex = 'Female'
)
このクエリは、すべての女性被験者のランダム化フォームからすべての DATAITEMS を返します。
サブクエリの結合
また、一般的な JOIN
構文ではなく、定義した 2 つの SELECT
文をサブクエリを使用して結合することも可能です。結合はコンマ (,
) を使用して表現し、2番目のサブクエリは1番目に左外部結合されます。サブセレクトにエイリアスを付けることもできますが、必須ではありません。これらの結合には、EventId と SubjectId が暗黙的に含まれます。サブクエリの後にフィルタ (WHERE
) 句を使用して追加のフィルタリングを実行することができます。
SELECT * FROM
(
SELECT @HDR.Subject, Creation_Criteria.Subject_Initials, Creation_Criteria.Age_at_Screening as Screening_Age
FROM Demographics
WHERE Creation_Criteria.Sex = 'Female'
) AS Female_Subjects,
(
SELECT @HDR.Subject, Creation_Criteria.Subject_Initials, Creation_Criteria.Age_at_Screening as Screening_Age
FROM Demographics
WHERE Creation_Crtieria.Sex = 'Male'
) AS Male_Subjects
WHERE Female_Subjects.Screening_Age = Male_Subjects.Screening_Age
関数内のサブクエリ
関数内で、@HDR
、@Form
ヘッダー、DATAITEMS などのサブクエリを使用することができます。
SELECT @HDR.Subject, Body_Temperature,
IF (IFNULL(Body_Temperatore,0) < (SELECT AVG(Body_Temperature) FROM Vitals), 'Below Avg', 'Acceptable') AS CompTemp
FROM Vitals
相関サブクエリ
CQL では、相関サブクエリを使用した結果のフィルタリングが可能です。
SELECT * FROM Demographics
WHERE Age_at_Screening > (
SELECT AVG(Age_at_Screening) FROM Demographics
)
フィルタ
フィルタを使用して、射影と選択によって表示される初期の CQL 結果の値を減らすことができます。これは任意です。CQL の主要なフィルタリング機構は WHERE
句です。
WHERE Status(Form) = 'Complete' AND GENDER = 'Male'
ヒント: コアリストは、提出済みステータスのすべてのフォームを返します。WHERE
句を編集して、提出済みステータスと、提出後の処理中ステータスの両方のフォームを返すことができます。以下の CQL を使用します: WHERE @Form.Status in ('submitted__v', 'in_progress_post_submit__v')
.
関数と演算子の比較
WHERE
句では、次の関数と演算子を使用することができます:
演算子 | 定義 |
---|---|
AND |
論理 AND |
OR |
論理 OR |
= |
次に等しい (Equals) |
!= |
次に等しくない |
> |
より大きい |
< |
より小さい |
>= |
次と等しいか大きい |
<= |
次と等しいか小さい |
IS |
ブーリアン条件に対して値をテストする |
IS NOT |
ブーリアン条件に対して値をテストする |
IS NULL |
NULL に対して値をテストする |
IS NOT NULL |
NULL に対して値をテストする |
IN() |
ある値が定義された値の集合の中に含まれるかどうかを確認します。 |
NOT IN() |
ある値が定義された値の集合の中に含まていないことを確認します。 |
BETWEEN...AND... |
ある値が定義された値の範囲の中に含まれるかどうかを確認します。 |
CONTAINS |
値の中に値が含まれているかどうかを確認します |
DOES NOT CONTAIN |
値の中に値が含まれていないかを確認します |
順序
ORDER BY
句を使用して結果を並べ替えることができます。
例:
SELECT @HDR *
ORDER BY @HDR.Subject.Name ASC, ETHNICITY
既知の問題: 現在のリリースでは、ワークベンチは繰り返し項目グループ内のデータ項目に対する ORDER BY
の使用をサポートしていません。
コメント
必要に応じて、CQL ステートメントにコメントを含めることもできます。コメントを含めるには、ダッシュを 2 つとスペースを 1 つ (--
) 入力し、その後にコメントを入力します。
SELECT @HDR, * from EDC.adverse_events
WHERE @Form.Status = 'submitted__v' or @HDR.Event.Status IN ('did_not_occur__v')
-- comment text
データ集約
CQL は、クエリ結果に対して基本的なデータ集約を実行することができます。集計関数内でヘッダーの任意の要素または任意の DATAITEM を参照することができます。集計関数には、ワイルドカード、@ 変数、特定の DATAITEMS を引数として使用することができます。
集計関数
演算子 | 定義 |
---|---|
AVG() |
引数の平均値を返します |
COUNT() |
返された行数を返します |
MAX() |
最大値 (最高値) を返します |
MIN() |
最小値 (最低値) を返します |
SUM() |
合計を返します |
STDDEV_POP() |
母標準偏差 |
STDDEV_SAMP() |
サンプル標準偏差 |
VAR_POP() |
母標準分散を返します |
VAR_SAMP() |
標本分散を返します |
カウントする属性を指定しない場合、CQL はそのオブジェクト内のすべての列に対するカウントとして要求を扱います。これは、特定のテーブルに対する COUNT(*)
と同等です。
WHERE
句は集計関数での使用でサポートされないため、変わりに HAVING
キーボードを使用できます。HAVING
を使用するには、CQL プロジェクトに少なくとも 1 つの集計関数が必要です。
SELECT COUNT(@HDR.Subject.Name), @HDR.Site.Number
FROM EDC.demographics
GROUP BY @HDR.Site.Number
HAVING COUNT(@HDR.Subject.Name) > 100
結果のグループ化
CQL では、射影に少なくとも1つの集計関数が含まれていれば GROUP BY
構文を使用することができます。
SELECT COUNT(@HDR.Event), @HDR.Subject
GROUP BY @HDR.Subject
SELECT @HDR, AVG(SYSTOLIC)
FROM Vitals
GROUP BY @HDR.Subject
結果の構造
CQLの結果は、射影で指定した要素に基づいて特定のシーケンスで返されます。CQL では、射影に含めるものをすばやく指定するための 3 つの方法 (ヘッダー、ワイルドカード、修飾ワイルドカード) を使用することができます。クエリの結果で返される追加の列を指定することができます。
また、射影にどの DATAITEMS を含めるかによって、実行データの並び順も決まります。
フォームおよびデータ項目の結果
SELECT @HDR
表記と同様に、残りの FORM および DATAITEMS は SELECT *
または SELECT ItemGroup.*
を使用して返すことができます。結果セットには既定の列の順序があるため、これらの表記を使用する場合このセクションの行は、(射影に含まれている場合) ヘッダーに適用された並び順に従って、特定の並び順で返されます。
クエリでワイルドカード表記を使用しない場合、射影内で返されるデータの列を指定する必要があります。結果の並び順は、射影に含めた要素に基づいて、以下に示すソートオプションの階層と一致します。
注: ソート階層に含まれるオブジェクトが存在する場合、その特定の列が指定されていない場合もソート階層のルールは適用されます。
SELECT * のデフォルトの列順序
列のレイアウトは、以下に示すフォーム属性から始まり、フォームのレイアウト順序に従います。
- フォーム名
- フォームの SeqNum (繰り返しフォームの場合のみ)
- 項目グループ
- SeqNbr (繰り返し項目グループの場合のみ)
- 項目 1
- 項目 2
- ItemN
SELECT ItemGroup.* のデフォルトの列順序
列のレイアウトは、以下に示すフォームおよび項目グループ属性から始まり、項目グループのレイアウト順序に従います。
- フォーム名
- フォームの SeqNum (繰り返しフォームの場合のみ)
- 項目グループ
- SeqNbr (繰り返し項目グループの場合のみ)
- 項目 1
- 項目 2
- ItemN
列のタイトル
CQL は、特定のパターンを使用して各カラムにタイトルを付けます。
@HDR
列: Object.Property (例:@HDR.Site.Name
の「Site.Name」)- データ項目: 項目定義の名前
- エイリアス: エイリアス名が付けられたデータの場合、CQL はそのエイリアス名を列のタイトルとして使用します。
フォームおよび項目グループは繰り返し可能であるため、Form.Name
、ItemGroup.SeqNbr
のように、ヘッダー結果と同じ Object.Property
の表記に従います。
ワイド & コンパクトな結果
CQL は常に結果セットの先頭に @Form
および @ItemGroup
の情報を付加したデータ項目を返します。これがフォームヘッダーです。この情報から、特定のデータ項目がどのフォームと項目グループから収集されたものであるかを判断することができます。フォームヘッダー以外にも、データ項目のワイド形式またはコンパクト形式の調整が可能です。デフォルトでは、CQL はワイド形式で結果を返します。
ワイド形式では、(クエリのコンテキストで) 収集されたすべてのフォームまたは項目グループに対して、すべてのデータ項目が独自の列で返されます。
コンパクト形式では、データ項目がどの形式または項目グループで収集されたかにかかわらず、データ項目の結果が 1 つの列で表示されます。これは、項目の値を比較する場合に有用です。
結果をコンパクト形式で返すには、SELECT
文で COMPACT
を指定します。
SELECT COMPACT @HDR, Creation_Criteria.*
FROM Demographics
このクエリは、統計情報フォームの作成基準項目グループの @HDR
要約と DATAITEMS
をコンパクト形式で返します。
例: 複数フォームによる項目の再利用
この例では、スタディは統計情報とインフォームドコンセントという 2 つのフォームを持ち、双方とも生年月日項目を使用しています。
WIDE
Form.Name | Form.SeqNbr | ItemGroup.Name | ItemGroup.SeqNbr | イニシャル | Age_at_Screening | DOB | DOB |
---|---|---|---|---|---|---|---|
統計情報 | 1 | Creation_Criteria | 1 | CMA | 27 | 02-22-1992 | -- |
Informed_Consent | 1 | Informed_Consent | 1 | -- | -- | -- | 02-22-1992 |
COMPACT
Form.Name | Form.SeqNbr | ItemGroup.Name | ItemGroup.SeqNbr | イニシャル | Age_at_Screening | DOB |
---|---|---|---|---|---|---|
統計情報 | 1 | Creation_Criteria | 1 | CMA | 27 | 02-22-1992 |
Informed_Consent | 1 | Informed_Consent | 1 | -- | -- | 02-22-1992 |
例: 繰り返しフォーム
この例では、スタディに繰り返し有害事象フォームがあります。
WIDE
Form.Name | Form.SeqNbr | ItemGroup.Name | ItemGroup.SeqNbr | Start_Date | End_Date | Start_Date | End_Date |
---|---|---|---|---|---|---|---|
Adverse_Event | 1 | AE_Duration | 1 | 05-18-2019 | 05-23-2019 | -- | -- |
Adverse_Event | 2 | AE_Duration | 1 | -- | -- | 11-27-2019 | 11-29-2019 |
COMPACT
Form.Name | Form.SeqNbr | ItemGroup.Name | ItemGroup.SeqNbr | Start_Date | End_Date |
---|---|---|---|---|---|
Adverse_Event | 1 | AE_Duration | 1 | 05-18-2019 | 05-23-2019 |
Adverse_Event | 2 | AE_Duration | 1 | 11-27-2019 | 11-29-2019 |
例: 繰り返し項目グループ
この例では、スタディに身体部位別検査の繰り返し項目グループを持つ診察フォームがあります。
WIDE
Form.Name | Form.SeqNbr | ItemGroup.Name | ItemGroup.SeqNbr | body_area | date_of_exam | body_area | date_of_exam |
---|---|---|---|---|---|---|---|
physical_exam | 1 | exam_by_body_area | 1 | 頭 | 12-11-2019 | --- | --- |
physical_exam | 1 | exam_by_body_area | 2 | --- | --- | 胸 | 12-11-2019 |
COMPACT
Form.Name | Form.SeqNbr | ItemGroup.Name | ItemGroup.SeqNbr | body_area | date_of_exam |
---|---|---|---|---|---|
physical_exam | 1 | exam_by_body_area | 1 | 頭 | 12-11-2019 |
physical_exam | 1 | exam_by_body_area | 2 | 胸 | 12-11-2019 |
ログフォームイベント
EDC 内の一部のイベントには、イベント日が関連付けられていません。これらのイベントは「ログ」イベントで、これらのイベント内のFORMSは「ログフォーム」です。ログフォームの一般的な例は、有害事象および併用薬フォームなどです。これらのログフォーム内の情報は、スケジュールされたイベントとは別に収集されます。
ログフォームが射影に含まれている場合、CQL はこれらのフォームをログイベントの下にグループ化します。ログイベントは、常に結果セット内の他のすべてのイベントグループの後に表示されます。
関数
CQL では、特定の DATAITEM または FORM に関する追加情報を提供するさまざまな関数を使用することができます。これらの関数は、CQL の射影、フィルタ、Order By 句に含めることができます。CQL では、臨床データのクエリに特化した関数のセットも使用することができます。
試験
次の臨床関数を使用できます:
説明
指定されたデータ項目の項目定義に記載されている説明を返します。
構文
DESCRIPTION(DATAITEM)
例
SELECT DESCRIPTION(Randomization.Randomization_Number)
FROM Enrollment
このクエリは、登録フォームのランダム化番号項目の説明値を返します。
DMR
DATAITEM がデータ管理レビュー (DMR) されている場合は true を返し、それ以外の場合は false を返します。
構文
DMR(DATAITEM)
例
SELECT @HDR.Subject.Name, @HDR.Site.Name, @HDR.Event.Name, @HDR.Event.Date,
AESTDAT, DMR(AESTDAT) as `Is AE Start Date DMR`
FROM AE where @Form.Status = 'submitted__v' or @HDR.Event.Status IN ('did_not_occur__v')
機能停止
与えられたデータ項目が現在固定されているか否かによって、true または false を返します。親 (項目グループとフォーム) から継承されたものである場合、この値は NULL になります。
構文
FROZEN(DATAITEM)
例
SELECT FROZEN(Creation_Criteria.Initials)
FROM Demographics
このクエリは、統計情報フォームのイニシャル項目が固定されている場合に true
を返します。イニシャル 項目がロック解除されている場合、このクエリは false
を返します。
HELPTEXT
指定されたデータ項目の項目定義に記載されているヘルプテキストを返します。
構文
HELPTEXT(DATAITEM)
例
SELECT HELPTEXT(Randomization.Randomization_Number)
FROM Enrollment
このクエリは、登録フォームのランダム化番号項目のヘルプテキスト (Vault EDCで作成された項目のヘルプコンテンツプロパティ) 値を返します。
HINTLABEL
指定されたデータ項目の項目定義に記載されているヒントラベルを返します。
構文
SELECT HINTLABEL(Randomization.Randomization_Number)
FROM Enrollment
このクエリは、登録フォームのランダム化番号項目のヒントラベル (Vault EDCで作成された項目のヒントラベルプロパティ) 値を返します。
ILB
指定された DATAITEM が意図的に空白のままとしてマークされているかどうかに基づいて true または false を返します。親フォームから継承されたものである場合、この値は NULL になります。
構文
ILB(DATAITEM)
例
SELECT @HDR, *
FROM Dosing
WHERE ILB(Dosage_Amount) = FALSE
このクエリは、投薬量項目が意図的に空白のままとしてマークされていないすべての被験者の投薬 フォームからヘッダー要約 (@HDR) とすべてのデータ項目 (*) を返します
ILBREASON
意図的に空白のままとしてマークされた DATAITEM または FORM に関連付けられた変更理由を返します。
構文
ILBREASON(DATAITEM)
例
SELECT ILBREASON(Dosage_Amount)
FROM Dosing
WHERE ILB(Dosage_Amount) = TRUE
このクエリは、意図的に空白のままとマークされていた投薬フォームの投薬量項目の変更理由を返します。このクエリは、結果をフィルタリングして CQL で意図的に空白のままとマークされていない投薬量項目の行を返さないようにします。
ラベル
指定された DATAITEM の項目定義に記載されているラベルを返します。代替ロケールを指定してローカライズされたラベルを返すこともできます。デフォルトでは、LABEL() は現在のユーザのロケールのラベルを返します。Vault CMDS のロケール値の一覧についてはこちらを参照してください。
構文
LABEL(DATAITEM,['locale'])
例
SELECT LABEL(Randomization.Randomization_Number, 'es_PR')
FROM Enrollment
このクエリは、登録フォームのランダム化番号項目のローカライズ (es_PRの場合、またはプエルトリコ) された項目用のラベルを返します。
CODELABEL
コードリスト型のデータ項目に対して選択されたコードリスト項目のラベルを返します。
構文
CODELABEL(DATAITEM)
例
SELECT CODELABEL(adverse_event.AEACTN)
FROM Adverse_Event
このクエリは、AEACTN (スタディ薬で取った措置) コードリスト項目に対して選択されたコードリスト項目のラベルを返します。
LASTMODIFIEDDATE
DATAITEM の最後更新日 (Vault EDC のデータの場合、項目オブジェクトの最終更新日フィールド) を返します。
構文
LASTMODIFIEDDATE(DATAITEM)
例
SELECT LASTMODIFIEDDATE(Randomization.Randomization_Number)
FROM Enrollment
登録フォームのランダム化番号項目の最終更新日を返します。
ロック済み
与えられた DATAITEM が現在ロックされているか否かによって、true または false を返します。親 (項目グループとフォーム) から継承されたものである場合、この値は NULL になります。
構文
LOCKED(DATAITEM)
例
SELECT LOCKED(Creation_Criteria.Initials)
FROM Demographics
このクエリは、統計情報フォームのイニシャル項目がロックされている場合に true
を返します。イニシャル 項目がロック解除されている場合、このクエリは false
を返します。
SDV
DATAITEM がソースデータ検証 (SDV) されている場合は true を返し、そうでない場合は false を返します。
構文
SDV(DATAITEM)
例
SELECT @HDR.Subject.Name, @HDR.Site.Name, @HDR.Event.Name, @HDR.Event.Date,
AETERM, SDV(AETERM) as `Is AE Term SDV`
FROM AE where @Form.Status = 'submitted__v' or @HDR.Event.Status IN ('did_not_occur__v')
署名済み
与えられた DATAITEM が署名されているか否かによって、true または false を返します。親 (項目グループとフォーム) から継承されたものである場合、この値は NULL になります。
構文
SIGNED(DATAITEM)
例
SELECT SIGNED(Creation_Criteria.Initials)
FROM Demographics
このクエリは、統計情報フォームのイニシャル項目が署名されている場合に true
を返します。イニシャル項目が署名されていない場合、このクエリは false
を返します。
ステータス
DATAITEM のステータスを返します。この関数を使用して、STATUS()
の代わりにドット表記と @ Form 変数を使用してフォームのステータスを返すこともできます。2 つ目の例をご覧ください。
構文
STATUS(DATAITEM)
例
SELECT STATUS(Randomization.Randomization_Number)
FROM Enrollment
このクエリは、登録フォームのランダム化番号項目のステータスを返します。
SELECT @Form.Status
FROM Enrollment
このクエリは、登録フォームのステータスを返します。
UOM
DATAITEM に対応する測定単位 (UOM) を返します。
構文
UOM(DATAITEM)
例
SELECT UOM(Vitals.Weight)
FROM Vitals
このクエリは、バイタルフォームの体重項目の UOM を返します。
UOMTRANSLATED
ユーザが入力した単位 (例: 摂氏ではなく華氏) ではなく、デフォルトの測定単位 (UOM) を返します。
構文
UOMTRANSLATED(Vitals.Temperature)
例
SELECT TRANSLATED(Vitals.Temperature)
FROM Vitals
このクエリは、体温項目のデフォルトの単位である「華氏」を返します。
翻訳済み
ユーザが入力した単位からデフォルトの単位に変換された値を返します。
構文
TRANSLATED(DATAITEM)
例
SELECT TRANSLATED(Vitals.Temperature)
FROM Vitals
このクエリは、施設ユーザが摂氏で体温を入力した場合でも、バイタルフォームの体温項目から華氏 (デフォルトの単位) で値を返します。
FILL
CQL NULL
を返すセルに対して、非繰り返し項目グループの項目から指定された FILL 値を返します。この機能はプロジェクションでのみ使用可能です。
構文
FILL(DATAITEM)
例
select @HDR.Subject.Name, @HDR.Site.Name,
@Form.SeqNbr, @ItemGroup.SeqNbr,
CMTRT, fill(CMTRT) as fill_CMTRT, CMSTDAT, CMONGO
from CM
where (@Form.Status = 'submitted__v' or @HDR.Event.Status IN ('did_not_occur__v'))
この例では、CM
フォームに繰り返し項目グループと非繰り返し項目グループが含まれています。CMTRT 項目は非繰り返しグループの中にあるので、繰り返し項目グループインスタンスの行で --
(NULL
の場合) を返します。この例では、fill_CMTRT
列の NULL セルの CMTRT
項目の値を返します。
FormName、FormSeqNbr、ItemGroupName、ItemGroupSeqNbr
データ項目のフォームと項目グループの名前とシーケンス番号を返します。
構文
FormName(Item), FormSeqNbr(Item), ItemGroupName(Item), ItemGroupSeqNbr(Item)
例
SELECT FormName(ae_term), FormSeqNbr(ae_term), ItemGroupName(ae_term), ItemGroupSeqNbr(ae_term)
FROM adverse_event
ラボ
EDC の Labs モジュールのデータを使用することで以下の関数を使用することができます。
SPECIMENTYPE
LBTEST 列で指定された分析物の試料の種類を返します。LBTEST 項目はこの関数で使用します。
構文
SpecimenType(LBTEST)
例
SELECT LBTEST, SpecimenType(LBTEST) FROM edc.baseline_labs
上記の例では、LBTEST 項目と試験に使用する試料の種類が返されます。
TESTINGMETHOD
LBTEST 列で指定された分析物の試験方法を返します。LBTEST 項目はこの関数で使用します。
構文
TestingMethod(LBTEST)
例
SELECT LBTEST, TestingMethod(LBTEST) FROM edc.baseline_labs
上記の例では、LBTEST 項目と試験に使用する試験方法が返されます。
LOINCCODE
LBTEST 列で指定された分析物のLOINC コードを返します。LBTEST 項目はこの関数で使用します。
構文
LOINCCode(LBTEST)
例
SELECT LBTEST, LOINCCode(LBTEST) FROM edc.baseline_labs
上記の例では、LBTEST 項目と試験に使用するLOINC コードが返されます。
ANALYTECODE
LBTEST 列で指定された分析物の分析物コードを返します。LBTEST 項目はこの関数で使用します。
構文
AnalyteCode(LBTEST)
例
SELECT LBTEST, AnalyteCode(LBTEST) FROM edc.baseline_labs
上記の例では、LBTEST 項目と試験に使用する分析物コードが返されます。
LABLOCTITLE
ラボの場所の LAB タイトルを返します。LBLOC は LAB ID のみを返します。LBLOC 項目はこの関数で使用します。
構文
LabLocTitle(LBLOC)
例
SELECT LBLOC, LabLocTitle(LBLOC) FROM edc.baseline_labs
上記の例では、Baseline Labs フォームで選択したラボの場所の LAB ID (LBLOC)、ラボの場所のタイトルが返されます。
OVERRIDEREASON
施設ユーザが通常のオーバーライドを入力する際に入力したオーバーライドの理由を返します。LBOVRDNRLO、LBOVRDNRHI 項目は、この関数で使用します。
構文
OverrideReason(LBOVRDNRLO), OverrideReason(LBOVRDNHRI)
例
SELECT OverrideReason (LBOVRDNRLO), OverrideReason(LBOVRDNRHI) FROM edc.baseline_labs
コーディング
次の関数を使用すると、割り当てられたコード化用語とコーディングフォームのステータスに関する情報を取得することができます。Vault コーダでは、MedDRA および WHODrug (B3 & C3) 辞書を使用したコーディングをサポートしています。
Vault コーダを使用するように設定されていないフォームでこれらの関数を使用すると、CQL はエラーを返します。
CODEDTERM
コード化された用語が存在する場合 (フォームのコード要求がコード化またはオートコーディングのステータスにある場合) 、データ項目のコード化された用語を返します。デフォルトでは、CQL は MedDRA 辞書の基本語と WHODrug 辞書の基本名を返します。用語レベルを指定して、別のレベル (HLT や LLT など) を返すことができます。
構文
CODEDTERM(Item, 'TermLevel')
例
SELECT CODEDTERM(ae_term.ae, 'Primary Path') as `Primary Path`,
CODEDTERM(ae_term.ae, 'LLT') as LLT,
CODEDTERM(ae_term.ae, 'PT') as PT,
CODEDTERM(ae_term.ae, 'HLT') as HLT,
CODEDTERM(ae_term.ae, 'HLGT') as HLGT,
CODEDTERM(ae_term.ae, 'SOC') as SOC
FROM adverse_event
用語レベル
MedDRA | WHODrug |
---|---|
プライマリパス | 薬剤名 |
LLT | 推奨名 |
PT | ATC4 |
HLT | ATC3 |
HLGT | ATC2 |
SOC | ATC1 |
CODEDCODE
コード化されたコードが存在する場合 (フォームのコード要求がコード化またはオートコーディングのステータスにある場合) 、データ項目のコード化されたコードを返します。デフォルトでは、CQL は MedDRA 辞書の基本語コードと WHODrug 辞書の基本コードを返します。コードレベルを指定して、別のレベルを返すことができます。
構文
CODEDCODE(Item, 'CodeLevel')
例
SELECT CODEDCODE(medication_therapy.conmed, 'DrugCD'),
CODEDCODE(medication_therapy.conmed, 'PreferredCD'),
CODEDCODE(medication_therapy.conmed, 'LLTCD'),
CODEDCODE(medication_therapy.conmed, 'PTCD'),
CODEDCODE(medication_therapy.conmed, 'HLTCD'),
CODEDCODE(medication_therapy.conmed, 'HLGTCD'),
CODEDCODE(medication_therapy.conmed, 'SOCCD')
FROM concomitant_medication
コードレベル
MedDRA | WHODrug |
---|---|
– | DrugCD |
LLTCD | PreferredCD |
PTCD | ATC4CD |
HLTCD | ATC3CD |
HLGTCD | ATC2CD |
SOCCD | ATC1CD |
CODEDDICTREL
フォームに割り当てられているコード化された辞書のリリースバージョンを返します。
構文
CODEDDICTREL(Item)
例
SELECT CODEDDICTREL(ae_term.ae)
FROM adverse_event
SELECT CODEDDICTREL(medication_therapy.conmed)
FROM concomitant_medication
CODEDSTATUS
項目 (コード要求) のコーディングステータスを返します。
構文
CODEDSTATUS(item)
例
SELECT CODEDSTATUS(ae_term.ae)
FROM adverse_event
CODEDBY
項目の Coded By (コード要求をコーディングしたユーザのユーザ ID) を返します。
構文
CODEDBY(item)
例
SELECT CODEDBY(ae_term.ae)
FROM adverse_event
LASTCODED
項目の最終コード化日 (コード要求が最後に コード化 または オートコーディング 状態に移行した日) を返します。
構文
LASTCODED(item)
例
SELECT LASTCODED(ae_term.ae)
FROM adverse_event
参照オブジェクト
次の参照オブジェクト関数を使用できます:
KEYMATCH
related_item
と related_key
が一致する場合、true
を返します。
KEYMATCH
はマニフェストファイルの related_item
と related_key
を使用して、項目の照合を行います。フォームの related_item が参照データの related_key
と一致する場合、keymatch 列の値は true
になります。一致しない場合、値は false
になります。
KEYMATCH
関数の最初の引数 (SourceName.FormName
) でフォームのソースを指定する場合、最初の引数で指定した SourceName.FormName
は、FROM
句の SourceName.FormName
と完全に一致している必要があります。
構文
KEYMATCH(form_name, reference_object_name)
フロー制御
次のフロー制御関数を使用できます:
IF
論理式を評価して、true または false の場合の値を返します。この関数は、2 つの値の比較に有効です。
構文
IF(<Expression>, <Return_Value_True>,<Return_Value_False>)
例
SELECT IF(Item1=Item2,1,0) as comp
FROM Form1
このクエリは、項目 1 が項目 2 と等しい場合、「1」を返します。項目 1 が項目 2 と等しくない場合、このクエリは「0」を返します。
症例
論理式を評価して、true または false の場合の値を返します。この関数は、複数の値の比較に有効です。
構文
CASE WHEN(<Expression>) THEN '<Return_Value>' ELSE '<Return_Value>' END
例
SELECT CASE WHEN(Item1=Item2) THEN 'a' WHEN Item1 > Item2 THEN 'b' ELSE 'c' END
FROM Form1
このクエリは、項目 1 が項目 2 と等しい場合は「a」を、項目 1 が項目 2 より大きい場合は「b」を、どちらの条件にも当てはまらない場合は「c」を返します。
IFNULL
DATAITEM を評価して、DATAITEM が NULL の場合に値を返します。
構文
IFNULL(DATAITEM,<Return_Value>)`
例
SELECT IF(IFNULL(Item1,0)=Item2,1,0) as comp
FROM Form1
このクエリは、項目 1 と項目 2 が等しい場合、または項目 1 が NULL で項目 2 が 0 に等しい場合、「1」を返します。それ以外の場合、このクエリは「0」を返します。
文字列
次の文字列関数を使用できます:
CONCAT
引数の連結結果を文字列で返します。
構文
CONCAT(DATAITEM, 'string')
例
SELECT CONCAT(@HDR.Subject.ID,'_',Creation_Criteria.Initials)
FROM Demographics
このクエリは、被験者 ID、アンダースコア、イニシャル項目値の連結文字列 (例:101-1001_CRJ) を返します。
CONCAT_WS
引数を区切り文字と共に返します
構文
CONCAT_WS ( separator, DATAITEM1, DATAITEM2)
例
select @HDR.Subject.Name, @HDR.Event.Name, AETERM, concat_ws ( ' ', 'AE ID ', @Form.SeqNbr, ' . ', @ItemGroup.SeqNbr )
from AE
GROUP_CONCAT
グループ内の非 NULL 値を連結した文字列を返します。
構文
GROUP_CONCAT ( DATAITEM)
例
select @HDR.Subject.Name, @HDR.Event.Name, @Form.SeqNbr, group_concat(@ItemGroup.SeqNbr)
from `EDC`.`AE`
where @Form.Status = 'submitted__v' or @HDR.Event.Status IN ('did_not_occur__v')
group by @HDR.Subject.Name, @Form.SeqNbr
COALESCE
引数の最初の NULL でないものを返します
構文
COALESCE (DATAITEM1, DATAITEM2, ...)
例
select @HDR.Subject.Name, MHTERM, MHSTDAT, MHONGO, coalesce(MHTRT_1, MHTRT_2)
from MHTERM
長さ
引数に渡された値または DATAITEM の長さを返します。
構文
LENGTH(DATAITEM)
例
SELECT LENGTH(Item1)
FROM Form1
このクエリは、フォーム 1 から項目 1 の値の長さを返します。
TRIM
DATAITEM から先頭と末尾のスペースを削除します。
構文
TRIM(DATAITEM)
例
SELECT TRIM(Baseline_X-ray.Interpretation)
FROM Baseline_Exam
このクエリは、ベースライン試験フォームから先頭または末尾のスペースを削除した解釈項目の値を返します。
LTRIM
DATAITEM から先頭のスペースを削除します。
構文
LTRIM(DATAITEM)
例
SELECT LTRIM(Baseline_X-ray.Interpretation)
FROM Baseline_Exam
このクエリは、ベースライン試験フォームから先頭のスペースを削除した解釈項目の値を返します。
RTRIM
DATAITEM から末尾のスペースを削除します。
構文
RTRIM(DATAITEM)
例
SELECT RTRIM(Baseline_X-ray.Interpretation)
FROM Baseline_Exam
このクエリは、ベースライン試験フォームから末尾のスペースを削除した解釈項目の値を返します。
UPPER
DATAITEM を大文字に変換します。
構文
UPPER(DATAITEM)
例
SELECT UPPER(Item1)
FROM Form1
このクエリは、イニシャル項目の値を大文字 (例:「cfa」→「CFA」) で返します。
LOWER
DATAITEM を小文字に変換します。
構文
LOWER(DATAITEM)
例
SELECT LOWER(Item1)
FROM Form1
このクエリは、項目 1 の値を小文字で返します。
左
左端から長さ (数) の文字を返します。
構文
LEFT(DATAITEM,len)
例
SELECT LEFT(Creation_Criteria.Initials,1)
FROM Demographics
このクエリは、イニシャル項目から右端の文字 (被験者の最後のイニシャル) を返します。
右
右端から長さ (数) の文字を返します。
構文
RIGHT(DATAITEM,len)
例
SELECT RIGHT(@HDR.Subject.ID,4)
FROM Demographics
このクエリは、被験者 ID の右端 4 文字を返します。スタディ「Cholecap 2019_Phase 1」において、これは被験者の 4 桁の識別子 (例: 1001) で、施設番号を付加して被験者の ID (例: 104-1001) を作成します。
MID
指定した位置から始まる部分文字列を返します
構文
MID ( DATAITEM, start index, length )
例
select @HDR.Subject.Name, AETOXGR, MID(AETOXGR, 7, 1) as `Grade Number`
from `EDC`.`AE`
REGEXP
文字列が正規表現と一致するかどうか
構文
REGEXP 'regular expression pattern'
例
select @HDR.Subject.Name, SAE_TERM
from `EDC`.`AE`
where SAE_TERM regexp ',|\\[|\\]|{|}|\\(|\\)'
REPLACE
指定した文字列の出現箇所を置換します
構文
REPLACE ( DATAITEM , 'substring' , 'new_string')
例
select @HDR.Subject.Name, AETOXGR, replace(AETOXGR, 'GRADE', 'G')
from `EDC`.`AE`
SUBSTR
指定された部分文字列を返します
構文
SUBSTR (DATAITEM, start index, length)
例
select @HDR.Subject.Name, AETOXGR, SUBSTR(AETOXGR, 7, 1) as `Grade Number`
from `EDC`.`AE`
日時
CDB では、EDC で取得した日付と日時の、欠損補完、未加工、サイト正規化の 3 種類の表示方法をサポートしています。欠損補完日付は、日付または日時の欠損 (不明) 部分を補完するロジックが適用された日付です。EDC では、日付や日時に関する不明な日、月、時間の部分を収集することができます。CDB では、日付に不明個所がある場合、CDB はその不明個所に最初のロジックを適用します。月が不明な場合、CDB はその年の最初の月を代入します。日が不明な場合、CDB はその日の最初の時間を代入します。デフォルトでは、すべての日付と日時は、不明な部分が代入された完全な日付と日時として返されます。これは、日付と日時の比較の確認を簡素化したり、クリーニングするために行われます。
CDB は、RawDate()
関数を使用して入力された日付と日時を正確な表現で返すこともできます。この関数は不明な部分が置き換えることなく、常に文字列として入力されたとおりの値を返します。また、CDB はSiteNormalizedDate()
関数を使用して、日付または日時をサイトの正規化値として返すこともできます。この関数は、取得した施設のタイムゾーンと一致するように調整された日付と日時を返します。
日時には次の関数を使用できます:
ADDDATE
指定された日付または日付型の DATAITEM から日付/時刻間隔 (後の日付) を加算した日付/時刻を返します
INTERVAL
には、日数または数値と単位のいずれかを指定することができます。
構文
ADDDATE ('date', days)
または
ADDDATE('date', INTERVAL value unit)
CQL では、次の間隔の単位を使用することができます。
- マイクロ秒
- 秒
- 分
- 時間
- 日
- 週
- 月
- 四半期
- 年
- SECOND_MICROSECOND
- MINUTE_MICROSECOND
- MINUTE_SECOND
- HOUR_MICROSECOND
- HOUR_SECOND
- HOUR_MINUTE
- DAY_MICROSECOND
- DAY_SECOND
- DAY_MINUTE
- DAY_HOUR
- YEAR_MONTH
例
SELECT ADDDATE(Randomization.Date_of_Randomization, INTERVAL 5 DAY)
FROM Enrollment
このクエリは、ランダム化された日の日付値から 5 日後の日付を返します。
SUBDATE
指定された日付または日付型の DATAITEM から日付/時刻間隔 (前の日付) を減算した日付/時刻を返します。
INTERVAL
には、日数または数値と単位のいずれかを指定することができます。
構文
SUBDATE ('date', days)
または
SUBDATE('date', INTERVAL value unit)
CQL では、次の間隔の単位を使用することができます。
- マイクロ秒
- 秒
- 分
- 時間
- 日
- 週
- 月
- 四半期
- 年
- SECOND_MICROSECOND
- MINUTE_MICROSECOND
- MINUTE_SECOND
- HOUR_MICROSECOND
- HOUR_SECOND
- HOUR_MINUTE
- DAY_MICROSECOND
- DAY_SECOND
- DAY_MINUTE
- DAY_HOUR
- YEAR_MONTH
例
SELECT SUBDATE(Randomization.Date_of_Randomization, INTERVAL 5 DAY)
FROM Enrollment
このクエリは、ランダム化された日の日付値から 5 日前の日付を返します。
TIMESTAMPDIFF
日時式から間隔を減算します
構文
TIMESTAMPDIFF(month, date, date)
例
select @HDR.Subject.Name, AESTDT, AEENDDT, timestampdiff(day, AESTDT, AEENDDT)
from `EDC`.`AE`
DATEDIFF
2 つの日付の差を日単位で返します。
構文
DATEDIFF('date', 'date')
例
SELECT DATEDIFF(Randomization.Date_of_Randomization, '2019-12-31')
FROM Enrollment
このクエリは、ランダム化された日項目の日付値と 2019 年 12 月 12 日との差 (日数) を返します。
DATE_FORMAT
与えられた日付を指定されたフォーマットで返します。日付指定子の一覧については以下を参照してください。
構文
DATE_FORMAT(<date>,'<format>')
例
SELECT DATE_FORMAT(@HDR.Event.Date, '%Y-%m-%d')
このクエリは、イベント日付を %Y-%m-%d のフォーマットで返します (例: 2019-12)。
SITENORMALIZEDDATE
デフォルトでは、CDB は EDC に入力された日時値を返します。SiteNormalizedDate 関数は、UTC 時間に正規化された日時を返します。
構文
SiteNormalizedDate(date)
例
select @HDR.Site.Name, @HDR.Site.Number, @HDR.Site.Timezone, @HDR.Site.Country, @HDR.Site.CountryName, @HDR.Subject.Name, AESTDT, SiteNormalizedDate(AESTDT) as 'Site Normalized Start Date'
from `EDC`.`AE`
where @Form.Status = 'submitted__v'or @HDR.Event.Status in ('did_not_occur__v')
この例では、症例の AE 開始日が 3 つのタイムゾーンにまたがっています。AESTDAT は EDC で入力された日付時刻の値を返し、SiteNormalizedDate
関数は UTC 時刻に正規化された日付時刻の値を返します。
RAWDATE
与えられた日付または日時を未加工フォーマットで返します。未加工フォーマットでは、部分的な日付と時刻がそのまま表示されます。
日付が施設のローカルタイムゾーンで入力された場合、RawDate
は施設のローカルタイムゾーンを返します。
部分的な日付の未加工フォーマットのリストについては以下を参照してください。
構文
RawDate(<date>)
例
select @HDR.Site.Name, @HDR.Site.Number, @HDR.Site.Timezone, @HDR.Site.Country, @HDR.Site.CountryName, @HDR.Subject.Name, AESTDT, SiteNormalizedDate(AESTDT) as 'Site Normalized Start Date', RawDate(AESTDT) as 'Raw Start Date'
from `EDC`.`AE`
where @Form.Status = 'submitted__v'or @HDR.Event.Status in ('did_not_occur__v')
この例では、CQL は AESTDT を生の形式で「未加工の開始日」として返します。
このクエリは、被験者 DOB 項目から日付値を未加工フォーマットで返します。
SDTMDATEFORMAT
与えられた日付または日時を SDTM (ISO 8061) フォーマットで返します。日付に不明な部分が存在する場合、自動的に処理されます。値は文字列として返されます。部分的な日付の SDTM フォーマットのリストについては以下を参照してください。
構文
SDTMDateFormat(<date>)
例
SELECT SDTMDateFormat(mh.condition_start_date) from EDC.medical_history
このクエリは、条件開始日項目の日付値を SDTM フォーマットで返し、不明なものを処理します。
STR_TO_DATE
文字列とその文字列の日付形式を指定すると、日付を返します。日付指定子の一覧については以下を参照してください。
構文
SELECT STR_TO_DATE('<string>', '<format>')
例
SELECT STR_TO_DATE('January 01, 2021', '%M %d, %Y')
このクエリは、日付として Jan 1, 2021 を返します。
CURDATE
現在の日付を YYYY-MM-DD で返します。
例
SELECT CURDATE()
FROM Demographics
このクエリは、現在の日付を返します。
NOW
現在の日付と時刻を「YYYY-MM-DD hh:mm:ss」の値で返します。
例
SELECT NOW()
FROM Demographics
このクエリは、現在の日時を返します。
年
与えられた日付から年を返します。
構文
YEAR('date')
例
SELECT YEAR('2019-12-12')
FROM Demographics
この関数は、2019-12-12から年の「2019」を返します。
月
与えられた日付から月を返します。
構文
MONTH('date')
例
SELECT MONTH('2019-12-12')
FROM Demographics
この関数は、2019-12-12から月の「12」を返します。
週
与えられた日付からその年の週を返します。
構文
WEEK('date')
例
SELECT WEEK('2019-12-12')
FROM Demographics
この関数は、2019-12-12かその年の週の「50」を返します。
日
与えられた日付から日を返します。
構文
DAY('date')
例
SELECT DAY('2019-12-12')
FROM Demographics
この関数は、2019-12-12から日の「12」を返します。
時間
与えられた時刻から時間を返します。
構文
HOUR('time')
例
SELECT HOUR('10:05:03')
FROM Demographics
この関数は、10:05:03 から時間の「10」を返します。
分
与えられた時刻から分を返します。
構文
MINUTE('time')
例
SELECT MINUTE('10:05:03')
FROM Demographics
この関数は、10:05:03から分の「05」を返します。
秒
与えられた時刻から秒を返します。
構文
SECOND('time')
例
SELECT SECOND('10:05:03')
FROM Demographics
この関数は、10:05:03 から秒の「03」を返します。
LAST_DAY
与えられた日付から、その月の最終日を返します。
構文
LAST_DAY('date'), LAST_DAY(DATAITEM)
例
SELECT LAST_DAY(@HDR.Event.Date)
このクエリは、イベント日の月からその月の最終日を返します。例えば、イベント日が 2019-11-15 の場合、このクエリは11月の最終日である「30」を返します。
不明な日付
ワークベンチでは、CQL クエリで Vault EDC またはサードパーティデータの不明な日付および日時の参照をサポートしています。ワークベンチでは、以下のような不明な日時に対するオプションを使用することができます:
- 月、日、時間
- 日付および時間
- 時間
デフォルトでは、ワークベンチは不明な日付部分を月の最初の日に、または年の最初の月に変換し、不明な時刻を 00:00:00 に変換します。これにより、不明な日時を気にすることなく、日付を普遍的に扱うことができます。
不明
日付に不明な部分 (M
、D
、T
) がある場合、日付の不明な部分を返し、それ以外の場合は文字列 COMPLETE
を返します。
構文
Unknown(Date)
例
Unknown(edc.mh_condition_start_date)
この例では、病歴フォームの疾患開始日項目で、不明な月、日、時刻を許可しています。EDC ユーザが「07-17-2021 5:15」と入力した場合、入力された日付には不明な点が含まれていないため、この関数は COMPLETE
を返します。EDC ユーザが「06-?-2005 ?」と入力した場合、日付の日付と時刻部分が不明なため、関数は D、T
を返します。
UnknownImpute
この関数を使用すると、ユーザは不明な部分の表現方法を指定することができます。この関数に項目を与えると、未加工の日付値から不明個所の有無を判断し、不明な部分の処理方法に指定されたロジックを適用します。結果は、日付データ型の値になります。値に不明な部分が含まれていない場合、関数はデフォルトの日付を返します。
構文
UnknownImpute(Item, 'day impute type', 'month impute type', 'time impute type')
欠損補完タイプ:
日付または日時がそれらの不明を許容しない場合でも、各欠損補完タイプを入力する必要があります。注: 欠損補完タイプは一重引用符 (‘) で囲む必要があります。
- 日:
FIRST DAY
: その月の最初の日。LAST DAY
: その月の末日。MID DAY
: その月の 15 日。
- 月:
FIRST MONTH
: 1 月 (1)LAST MONTH
: 12 月 (12)MID MONTH
: 6 月
- 時間:
FIRST HOUR
: 00:00 (24 時間表記)LAST HOUR
: 23:59 (24 時間表記)MID HOUR
: 12:00 (24 時間表記)
例
UnknownImpute(edc.ae_start_datetime, 'FIRST DAY', 'FIRST MONTH', 'FIRST HOUR')
この例では、AE 開始日時項目は不明な時間を許容しています。このクエリは、不明な時刻を午前 12:00 に設定した AE 開始日時を返します。例えば、EDC で日時に「Jul 22, 2021 ?」が入力された場合、CQL は「Jul 22, 2021 12:00 AM」を返します。
日時指定子
CQL では、次の日時指定子を使用することができます:
指定子 | 定義 |
---|---|
%r |
時刻、12 時間表記 (hh:mm:ss の後に AM または PM を付加) |
%T |
時刻、24 時間表記 (hh:mm:ss) |
%I |
時間、12 時間表記、先頭へのゼロ埋めあり (01..12) |
%l |
時間、12 時間表記、先頭へのゼロ埋めなし (1..12) |
%k |
時間、24 時間表記、先頭へのゼロ埋めあり (01..24) |
%i |
分、数値 (00..59) |
%S |
秒 (00..59) |
%s |
秒 (00..59)、%S と同じ |
%f |
マイクロ秒 (000000..999999) |
%p |
AM または PM |
%d |
その月の日、数値 (00..31) |
%e |
その月の日、数値、先頭へのゼロ埋め無し (0..31) |
%D |
その月の日、英語のサフィックス付き (0th, 1st, 2nd, 3rd...) |
%j |
その月の日 (001..366) |
%w |
曜日 (0 は日曜..6 は土曜) |
%W |
曜日名 (日曜日..土曜日) |
%a |
省略曜日名 (日..土) |
%M |
月名 (1 月..12 月) |
%b |
省略月名 (Jan..Dec) |
%m |
月、数値 (00..12) |
%Y |
年、数値、4 桁 |
%y |
年、数値、2 桁 |
%U |
週 (00..53)、日曜日を週の最初の日とする、WEEK() mode 0 |
%u |
週 (00..53)、月曜日を週の最初の日とする、WEEK() mode 1 |
%V |
週 (00..53)、日曜日を週の最初の日とする、WEEK() mode 2; %X と併用 |
%v |
週 (01..53)、月曜日を週の最初の日とする、WEEK() mode 3; %x と併用 |
%X |
その週の年、数値、日曜日を週の最初の日とする; %V と併用 |
%x |
その週の年、数値、月曜日を週の最初の日とする; %v と併用 |
%% |
リテラル % 文字 |
% x |
x、上記でリストされていない任意の「x」に |
未加工フォーマットの日付
記録された日付または日時 | 未加工フォーマット | |
---|---|---|
1 | 27-Oct-2020 | 27-Oct-2020 |
2 | ?-Oct-2020 | UN-Oct-2020 |
3 | ?-?-2020 | UN-UNK-2020 |
4 | 27-Oct-2020 10:40 | 27-Oct-2020 10:40 |
5 | 27-Oct-2020 ? | 27-Oct-2020 UN:UN |
6 | ?-Oct-2020 ? | UN-Oct-2020 UN:UN |
7 | ?-?-2020 ? | UN-UNK-2020 UN:UN |
SDTM フォーマットの日付
記録された日付または日時 | 不確実性の範囲 | 公称日付/時刻 (--DTC) | |
---|---|---|---|
1 | 2020年3月15日 13:14:17 | 完全な日付け | 2020-03-14T13:14:17 |
2 | 2020年3月15日 13:14 | 秒が不明 | 2020-03-15T13:14 |
3 | March 15, 2020 13 | 分が不明 | 2020-03-15T13 |
4 | 2020 年 3 月 15 日 | 時刻が不明 | 2020-03-15 |
5 | March, 2020 | 日が不明 | 2020-03 |
6 | 2020 | 月が不明 | 2020 |
その他
次の関数は、CQL クエリでも使用できます:
CAST
Cast はデータ項目または式の引数を取得し、指定されたデータ型で結果を返します。
構文
CAST(item AS data_type)
CAST (expression AS data_type
CAST 関数内で使用できるデータ型は以下のとおりです:
- バイナリ
- CHAR
- DATE
- DATETIME
- TIME
- DECIMAL
- SIGNED
- UNSIGNED
例
SELECT CAST(Exclusion_Criteria.Hypersensitivity_Constituents as CHAR)
FROM Demographics
このクエリは、過敏症構成要素のコードリスト型項目のコードリスト項目値 (Y または N) をテキスト (char) で返します。
FIELD
文字列のリスト内の項目値のインデックス (位置) を返します。これは、結果セット内の可能な値のリストの順序のカスタマイズに有用です。
構文
FIELD(DATAITEM, '<string1>', '<string2>','<stringN>')
例
SELECT @HDR.Subject, Route, Dosage_Amount
FROM Dosing
ORDER BY FIELD(Route, 'Oral', 'Nasal', 'Topical')
このクエリは、被験者レベルのヘッダー情報と経路および投薬量の項目値を、口腔 → 鼻腔 → 局所の経路の順に返します。
UNION
UNION は、複数の SELECT
文を 1 つの結果の集合に結合します。CQL は、最初の SELECT
文に記載されている列名を列名にに使用します。最初の SELECT
分の列と対応する後続の SELECT
文の列は同じデータ型である必要があります。例えば、最初の文の 2 列目が整数型の場合、2 つ目の SELECT
文の 2 列目も整数型である必要があります。
UNION
は UNION ALL
と同様に、ユニオン内のクエリから有り得るすべての結果行を返します。UNION DISTINCT
を使用すると、ユニオン内のクエリから一意の結果行のみを取得することができます。UNION DISTINCT
は、100% 一致する重複行のみを除外します。
UNION の制限事項: CQL では、UNION の操作を最大 4000 までに制限しています。
構文
SELECT ItemGroup.Item, ItemGroup.Item FROM Form1
UNION
SELECT ItemGroup.Item, ItemGroup.Item FROM Form2
例
SELECT test.date_collected, test.rbc, test.wbc FROM LocalLabs.Hematology
UNION
SELECT chem.date_collected, chem.total_protein, chem.urea_nitrogen FROM CentralLabs.Chemistry
UNPIVOT
UnPivot は、テーブルの列を列値に変換するために使用できる関係演算子です。UnPivotに @HDR 値を含めたり、WHERE 句、GROUP BY 句、または ORDER BY 句でピボットされていない項目を参照することはできません。
現在のリリースでは、CDB は CQL ステートメントの UnPivot
を使用しているリストのセルをハイライト表示しません。
構文
SELECT up.@HDR.Subject.Name, up_items
FROM (
SELECT @HDR.Subject.Name, itemA, itemB, itemC, itemD) up
UNPIVOT (
up_items
FOR items in (itemA, itemB, itemC, itemD)
) as unpivot_table
例: Unpivot
SELECT up.@HDR.Subject.Name up_items
FROM (
SELECT @HDR.Subject.Name, body_temperature, height, weight, systolic_blood_pressure__mmhg_, diastolic_blood_pressure__mmhg_, pulse__bpm_ FROM Vitals) up
UNPIVOT (
up_items
FOR items in (body_temperature, height, weight, systolic_blood_pressure__mmhg_, diastolic_blood_pressure__mmhg_, pulse__bpm_)
) as unpivot_table
例: 複数の Unpivot セクション
SELECT @HDR.Subject.Name, @HDR.Event, Body_Temperature, vsResult, vsTest, VSSTAT, HIDe
FROM ( SELECT @HDR.Subject.Name, Body_Temperature, Height, Weight, ILB(Body_Temperature), ILB(Height), ILB(Weight) From EDC.Vitals) main
UNPIVOT (vsResult FOR vsTest in (Body_Temperature, Height, Weight)) as result
UNPIVOT (VSSTAT FOR HIDe in (ILB(Body_Temperature), ILB(Height), ILB(Weight))) as ilb
例: 複数フォームでの UnPivot
SELECT @HDR.Subject.Name, d.MHTERM, b.Please_specify_abnormality AS term, up_item.vs_result, up_item.vs_test
FROM (SELECT body_temperature, height, weight, systolic_blood_pressure__mmHg_, diastolic_blood_pressure__mmHg_, pulse__bpm_ FROM vitals) AS main
UNPIVOT (vs_result FOR vs_test IN (body_temperature, systolic_blood_pressure__mmHg_, diastolic_blood_pressure__mmHg_, pulse__bpm_)) AS up_item,
baseline_chest_x-ray_evaluation b, demographics d
WHERE main.@HDR.Subject.ID = b.@HDR.Subject.ID
AND main.@HDR.Subject.ID = d.@HDR.Subject.ID
サポートされていない使用例:
次の使用例は、現在のリリースではサポートされていません:
- サブクエリ内の UnPivot
- UNION 内の UnPivot
- UnPivot 内での @Form または @ItemGroup プロパティの参照
サブクエリ内の UnPivot:
SELECT @HDR.Subject.Name, creation_criteria.subject_initials, creation_criteria.subject_dob, up.*
FROM demographics.creation_criteria
(SELECT @HDR.Subject.Name, up_item.vs_test, up_item.vs_result
FROM (SELECT body_temperature, height, weight, systolic_blood_pressure__mmhg_, diastolic_blood_pressure__mmhg_, pulse__bpm_ FROM Vitals) as main
UNPIVOT (vs_result FOR vs_test IN (body_temperature, height, weight, systolic_blood_pressure__mmhg_, diastolic_blood_pressure__mmhg_, pulse__bpm_)) AS up_item) AS up
WHERE d.@HDR.Subject.Name = up.@HDR.Subject.Name
UNION 内の UnPivot:
SELECT @HDR.Subject.Name, @HDR.Event.Name, up_item.*
FROM (SELECT body_temperature, height, weight, systolic_blood_pressure__mmHg_, diastolic_blood_pressure__mmHg_, pulse__bpm_ FROM vitals) AS main
UNPIVOT (vs_result FOR vs_test IN (vody_temperature, systolic_blood_pressure__mmHg_, diastolic_blood_pressure__mmHg_, pulse__bpm_)) AS up_item
UNION ALL
SELECT @HDR.Subject.Name, @HDR.Event.Name, up_item.*
FROM (SELECT WBC, RBC, HEMOGLOBIN, HEMATOCRIT, PLATELET, NEUTROPHILS FROM hematology) AS main
UNPIVOT (vs_result FOR vs_test IN (WBC, RBC, HEMOGLOBIN, HEMATOCRIT, PLATELET, NEUTROPHILS)) AS up_item;
その他の利用可能な関数
次のSQL関数は、CQL 内でも使用できます:
機能 | 説明 |
---|---|
ABS() | 絶対値を返します |
ACOS() | アークコサインを返します |
ADDTIME() | 時間を加算します |
ASCII() | 左端の文字の数値を返します |
ASIN() | アークサインを返します |
ATAN() | アークタンジェントを返します |
ATAN2()、ATAN() | 2 つの引数のアークタンジェントを返します |
BIN() | 数値のバイナリ表現を含む文字列を返します |
BINARY | 文字列をバイナリ文字列に変換します |
BIT_AND() | ビット論理積 (AND) を返します |
BIT_COUNT() | 設定されているビット数を返します |
BIT_LENGTH() | 引数の長さをビット数で返します |
BIT_OR() | ビット論理和 (OR) を返します |
BIT_XOR() | ビット排他的論理和 (XOR) を返します |
CEIL() | 引数以上の最小の整数値を返します |
CEILING() | 引数以上の最小の整数値を返します |
CHAR() | 渡された各整数を文字で返します |
CHAR_LENGTH() | 引数の文字数を返します |
CHARACTER_LENGTH() | CHAR_LENGTH() のシノニム |
CHARSET() | 引数の文字セットを返します |
COERCIBILITY() | 引数文字列の照合順序強制性値を返します |
COLLATION() | 引数文字列の照合順序を返します |
CONV() | 異なる基数間で数値を変換します |
CONVERT_TZ() | あるタイムゾーンから別のタイムゾーンに変換します |
COS() | コサインを返します |
COT() | コタンジェントを返します |
COUNT(DISTINCT) | 異なる値の数を返します |
CURRENT_DATE()、CURRENT_DATE | CURDATE() のシノニム |
CURRENT_TIME()、CURRENT_TIME | CURDATE() のシノニム |
CURRENT_TIMESTAMP()、CURRENT_TIMESTAMP | NOW() のシノニム |
CURTIME() | 現在の時刻を返します |
DATE_ADD() | 日付に値 (間隔) を加算します |
DATE_FORMAT() | 指定した日付の書式 |
DATE_SUB() | 日付から値 (間隔) を減算します |
DAY() | DAYOFMONTH() のシノニム |
DAYNAME() | 曜日の名前を返します |
DAYOFMONTH() | その月の特定の日を返します (0~31) |
DAYOFWEEK() | 引数の曜日のインデックスを返します |
DAYOFYEAR() | その年の年間通算日を返します (1~366) |
DEGREES() | ラジアンを度に変換します |
ELT() | インデックス番号で文字列を返します |
EXP() | 累乗します |
EXPORT_SET() | 値ビットに設定されたすべてのビットに対して文字列 on を、設定されていないすべてのビットに対して文字列 off を返します。 |
EXTRACT() | 日付の一部を抽出します |
FIND_IN_SET() | 第 2 引数で渡されたものの中にある第 1 引数で渡されたもののインデックス (位置) |
FLOOR() | 引数以下の最大の整数値を返します |
FORMAT() | 指定した小数点以下の桁数にフォーマットされた数値を返します |
FOUND_ROWS() | LIMIT 句付きの SELECT で、LIMIT 句がない場合に返される行数 |
FROM_BASE64() | base 64 でエンコードされた文字列をデコードし、結果を返します |
FROM_DAYS() | 曜日番号を日付に変換します |
FROM_UNIXTIME() | Unix のタイムスタンプを日付としてフォーマットします |
GET_FORMAT() | 日付フォーマットの文字列を返します |
GREATEST() | 最大の引数を返します |
HEX() | 文字列値を10進数または16進数で表現します |
INSERT() | 指定した位置に、指定した文字数までの部分文字列を挿入します |
INSTR() | 部分文字列の最初の出現場所のインデックスを返します |
INTERVAL() | 第一引数より小さい引数のインデックスを返します |
ISNULL() | 引数が NULL であるかどうかをテストします |
LCASE() | LOWER() のシノニム |
LEAST() | 最小の引数を返します |
LN() | 引数の自然対数を返します |
LOCALTIME()、LOCALTIME | NOW() のシノニム |
LOCALTIMESTAMP、LOCALTIMESTAMP() | NOW() のシノニム |
LOCATE() | 部分文字列の最初の出現場所の位置を返します |
LOG() | 第一引数の自然対数を返します |
LOG10() | 引数の 10 を底とする対数を返します |
LOG2() | 引数の 2 を底とする対数を返します |
LPAD() | 引数で指定された文字で左埋めされた文字列を返します |
MAKE_SET() | ビットセットに対応するビットを含むコンマ区切りの文字列のセットを返します |
MAKEDATE() | 年と年間通算日から日付を作成します |
MAKETIME() | 時、分、秒から時間を作成します |
MICROSECOND() | 引数からマイクロ秒を返します |
MOD() | 剰余を返します |
MONTHNAME() | 月の名前を返します |
NAME_CONST() | 与えられた名前を列に付けます |
NULLIF() | expr1 = expr2 の場合、NULL を返します。 |
OCT() | 数値の 8 進数表現を含む文字列を返します |
OCTET_LENGTH() | LENGTH() のシノニム |
ORD() | 引数の左端の文字に対応する文字コードを返します |
PERIOD_ADD() | 年月に期間を加算します |
PERIOD_DIFF() | 期間の差分の月数を返します |
責任医師() | πの値を返します |
POSITION() | LOCATE() のシノニム |
POW() | 指定した引数の累乗を返します |
POWER() | 指定した引数の累乗を返します |
QUARTER() | 引数の日付から四半期を返します |
QUOTE() | SQL 文内で使用する引数をエスケープします |
RADIANS() | 引数をラジアンに変換して返します |
RAND() | 浮動小数点のランダムな値を返します |
RANDOM_BYTES() | ランダムなバイトベクトルを返します |
REPEAT() | 文字列を指定された回数繰り返します |
REVERSE() | 文字列中の文字を反転します |
ROUND() | 引数を丸めます |
ROW_COUNT() | 更新された行数 |
RPAD() | 文字列を指定された回数追加します |
SEC_TO_TIME() | 秒を「hh:mm:ss」フォーマットに変換します |
SIGN() | 引数の符号を返します |
SIN() | 引数のサインを返します |
SPACE() | 指定した数のスペースの文字列を返します |
SQRT() | 引数の平方根を返します |
STD() | 母標準偏差を返します |
STDDEV() | 母標準偏差を返します |
STDDEV_POP() | 母標準偏差を返します |
STDDEV_SAMP() | 試料標準偏差を返します |
STRCMP() | 2 つの文字列を比較します |
SUBSTRING() | 指定された部分文字列を返します |
SUBSTRING_INDEX() | 指定された区切り文字の出現回数より前の文字列から部分文字列を返します |
SUBTIME() | 時間を減算します |
SYSDATE() | 関数が実行された時刻を返します |
TAN() | 引数のタンジェントを返します |
TIME() | 渡された式の時間部分を抽出します |
TIME_FORMAT() | 時刻としてフォーマットします |
TIME_TO_SEC() | 引数を秒に変換して返します |
TIMEDIFF() | 時間を減算します |
TIMESTAMP() | 引数が 1 つの場合、この関数は日付または日時式を返し、引数が 2 つの場合、引数の合計を返します |
TIMESTAMPADD() | 日時式に間隔を加算します |
TO_BASE64() | 引数を base-64 文字列に変換して返します |
TO_DAYS() | 引数の日付を日数に変換して返します |
TO_SECONDS() | 引数の日付または日時を紀元0年からの秒数に変換して返します |
TRUNCATE() | 指定した小数点以下の桁数に切り捨てます |
UCASE() | UPPER() のシノニム |
UNHEX() | 数値の 16 進数表現を含む文字列を返します |
UNIX_TIMESTAMP() | Unix のタイムスタンプを返します |
UTC_DATE() | 現在の UTC 日付を返します |
UTC_TIME() | 現在の UTC 時刻を返します |
UTC_TIMESTAMP() | 現在の UTC 日時を返します |
UUID() | 汎用一意識別子 (UUID) を返します |
UUID_SHORT() | 整数値の汎用識別子を返します |
VALUES() | INSERT 時に使用する値を定義します |
VAR_POP() | 母標準分散を返します |
VAR_SAMP() | 標準分散を返します |
VARIANCE() | 母標準分散を返します |
WEEK() | 週番号を返します |
WEEKDAY() | 曜日のインデックスを返します |
WEEKOFYEAR() | その日の特定のカレンダー週を返します (1~53) |
WEIGHT_STRING() | 文字列の重みの文字列を返します |
YEARWEEK() | 年および週を返します |
CQL エラー
万一、一般的な CQL 実行時エラー (エラーコード 0001~0010) が発生した場合、Veeva サポートまでお問い合わせください。