臨床クエリ言語 (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_namerelated_formrelated_itemrelated_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 を返すことができます。

現在のリリースでは、FORMITEMGROUP の修飾子のみがサポートされています。

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
  • ID
  • 名前
  • フェーズ
  • LastModifiedDate
  • ステータス
  • ロック済み
  • OID
  • ExternalID
@HDR.Site
  • ID
  • 名前
  • 数字
  • LastModifiedDate
  • 責任医師
  • 国 (国の略語が返されます)
  • CountryName
  • 時間帯
  • ステータス
  • OID
  • ExternalID
@HDR.Subject
  • ID
  • 名前
  • LastModifiedDate
  • WithdrawnDate
  • キー
  • ステータス
  • ExternalID
  • Arm
  • Cohort
  • Substudy
  • EndOfStudyDate
  • EndOfTreatmentDate
  • EnrolledDate
  • InitialConsentDate
  • LostToFollowUpDate
  • RandomizedDate
  • ScreenedDate
  • ScreenFailedDate
  • StartedFollowUpDate
  • StartedTreatmentDate
  • WithdrawnDate
@HDR.EventGroup
  • ID
  • 名前
  • ラベル
  • SeqNbr
  • タイプ
@HDR.Event
  • ID
  • 名前
  • ラベル
  • LastModifiedDate
  • 日付
  • ステータス
  • 機能停止
  • ロック済み
  • 署名済み
  • SDV
  • DMR
  • OID
  • 動的
  • EventType
  • ChangeReason
  • PlannedDate
  • ExternalID
  • OpenQuery
  • AnsweredQuery
  • ClosedQuery
  • バージョン
  • VisitMethod

フォームおよび項目グループのプロパティ

選択またはフィルタ句に、フォームおよび項目グループのプロパティを対象にすることができます。@Form または @ItemGroup にドット表記でプロパティ名を追加してそのプロパティを取得します。例えば、@Form.CreatedDate を使用して、フォーム作成日を返すことができます。

コンテキスト 利用可能なプロパティ
@フォーム
  • 名前
  • ラベル
  • DataSource
  • SeqNbr
  • ステータス
  • ILB
  • ILBReason
  • SDV
  • DMR
  • 機能停止
  • ロック済み
  • 署名済み
  • SDVDate
  • DMRDate
  • FrozenDate
  • LockedDate
  • LinkCreatedDate
  • LinkId
  • 署名済み
  • SignatureDate
  • CreatedDate
  • SubmissionDate
  • SubmissionCount
  • LastModifiedDate
  • バージョン
  • ID
  • ExternalID
@ItemGroup
  • 名前
  • SeqNbr

@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

クエリ用に自動生成された ID

名前

EDC で定義されたクエリの名前。注: サードパーティのデータの場合、この数字は一意の ID です。

ステータス

クエリの現在のステータス (オープン回答済み終了)

カテゴリ

クエリの起点 (手動またはシステム生成)

FirstMessage

クエリで最初に作成されるクエリメッセージ (クエリが開始される時に入力されるコメント)。これは、クエリに対するすべてのクエリメッセージ (コメント) の一覧ではありません。

LatestMessage

クエリで作成された最後 (直近) のクエリメッセージ (クエリの回答時に入力されるコメント)。これは、クエリに対するすべてのクエリメッセージ (コメント) の一覧ではありません。

CreatedDate

クエリの作成 (オープン) 日時。

CreatedBy

クエリを作成 (オープン) したユーザの名前。

LastModifiedDate

クエリの最終更新日時。

LastModifiedBy

クエリを最後に更新したユーザ名。

ItemName

クエリが開かれた項目名前。クエリがイベント日にある場合、null が返されます。

EventName

クエリに関連付けられたイベント名前

EventDate

クエリに関連付けられたイベントイベント日付

SubjectName

クエリに関連付けられた被験者名前

SubjectStatus

クエリに関連付けられた被験者症例ステータス

施設

クエリに関連付けられた被験者に割り当てられた施設

SiteCountry

クエリに関連付けられた被験者に割り当てられた施設治験実施国

フォーム

クエリに関連付けられたフォーム名前。クエリがイベント日にある場合、null が返されます。

FormSeqNbr

クエリに関連付けられたフォームシーケンス番号。クエリがイベント日にある場合、null が返されます。

FormSource

クエリのデータポイントの発生元のソース (例: 「Lab」、「EDC」、または「eCOA」)。

ItemGroupSeqNbr

クエリに関連付けられた項目グループシーケンス番号。クエリがイベント日にある場合、null が返されます。

OriginSystem

クエリの発生元のソースシステム名前 (EDC、CDBなど)。現在のリリースでは、CQL は、CDB 内のChecks 経由で開かれたクエリに対してのみ、このプロパティに値「CDB」を返します。

OriginName

クエリが開かれたリスト名前。クエリが CDB で開かれたものでない場合、null が返されます。

OriginID

クエリが開かれたリストIDクエリが CDB でオープンされていない場合は null を返します。CDB Open Query API を使ってオプションで設定することもできます。

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番目に左外部結合されます。サブセレクトにエイリアスを付けることもできますが、必須ではありません。これらの結合には、EventIdSubjectId が暗黙的に含まれます。サブクエリの後にフィルタ (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 句では、次の関数と演算子を使用することができます:

演算子 定義
AND 論理 AND
OR 論理 OR
= 次に等しい (Equals)
!= 次に等しくない
> より大きい
< より小さい
>= 次と等しいか大きい
<= 次と等しいか小さい
IS ブーリアン条件に対して値をテストする
IS NOT ブーリアン条件に対して値をテストする
IS NULL NULL に対して値をテストする
IS NOT NULL NULL に対して値をテストする
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.NameItemGroup.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
PrimaryPatchCD 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_itemrelated_key が一致する場合、true を返します。

KEYMATCH はマニフェストファイルの related_itemrelated_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 に変換します。これにより、不明な日時を気にすることなく、日付を普遍的に扱うことができます。

不明

日付に不明な部分 (MDT) がある場合、日付の不明な部分を返し、それ以外の場合は文字列 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 列目も整数型である必要があります。

UNIONUNION 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 サポートまでお問い合わせください。