スコアボード クエリ

この記事には、以下のトピックが含まれています。
casm173
この記事には、以下のトピックが含まれています。
データベース内のテーブルの1つであるCr_Stored_Queriesでは、ストアド クエリを定義します。 このストアド クエリは SQL クエリに似ています。これを使用して、管理インターフェースおよび Web インターフェースのスコアボード領域にあるノードのカウンタ フィールドをカスタマイズできます。 カウンタ フィールドには、クエリと一致するレコードの件数が表示されます。 たとえば、ログイン ユーザに割り当てられている各種リクエストの数を表示することができます。
ユーザは、各自のスコアボードに表示されるカウンタ フィールドをカスタマイズできます(これについてはオンライン ヘルプを参照してください)。ただし、ストアド クエリとしてこれらのカウンタ フィールドに示される各種リクエストについては、最初にシステム管理者が定義する必要があります。
データベース クエリの値が NULL の場合は、スコアボードのカウントが正しい値になりません。 たとえば、スコアボード クエリの指定が assignee.organization = xyz で、レコードの担当者フィールドが空白(NULL)の場合、そのレコードはスコアボードのカウントに含まれません。
ログイン ユーザのストアド クエリ
[ストアド クエリの詳細]ウィンドウの[Where節]と[ラベル]の2つのフィールドは、必ず定義する必要があります。 この両方のフィールドには、ログイン ユーザ用にカスタマイズした式を含めることができます。 ストアド クエリはテーブル名と列ではなく、オブジェクトと属性を参照します。 ログイン ユーザ用にカスタマイズされたストアド クエリは、以下の 2 つから構成されます。
  • オブジェクト(たとえば、リクエストの場合はcr)
    一般にオブジェクトは、等号(=)の左側に指定されます。 ストアド クエリのこの部分の構文は、以下のとおりです。
    att_name[.att_name...].SREL_att_name
ストアド クエリには必ずタイプを指定します。タイプはクエリの実行対象のオブジェクト名で、クエリのコンテキストを示します。 上記の構文では、最初のatt_nameをコンテキスト オブジェクトの属性名にする必要があります。
  • ログイン ユーザ (このユーザの cnt オブジェクトのインスタンス)
    ログイン ユーザの属性に基づいてチケットを選択する場合は、ログイン ユーザを等号(=)の右側に指定する必要があります。 ストアド クエリのこの部分の構文は、以下のとおりです。
    @
    att_name
    [.
    att_name
    ...].
    SREL_att_name
オブジェクトと属性の詳細については、「CA Service Desk Manager 参照コマンド」を参照してください。
crオブジェクトの構文
リクエスト(cr)オブジェクトを参照する場合は、以下の構文を使用します
att_name[.att_name...].SREL_att_name
以下の例では、チケットの処理を割り当てられた担当者のロケーションを指定します。 この例では、ストアド クエリのタイプがcrオブジェクトを暗黙的に示しているため、オブジェクト名は省略されています。
[email protected] AND active=1
  • assignee
    リクエスト オブジェクトの属性で、対応するテーブルのassigneeフィールドにマップします。 たとえばassignee属性は、SREL agtを指定したcrオブジェクトで定義されます。つまり、agtファクトリを参照します。 agtファクトリはcntオブジェクト定義の一部です。
  • location
    cntオブジェクトの属性で、連絡先テーブルのc_l_idフィールドにマップしています。 location属性は、SREL locを指定したcntオブジェクトで定義されます。つまり、locオブジェクトを参照します。
WHERE節
以下の例は、WHERE節にコーディングできる値を示します
[email protected] AND active=1
ストアド クエリのタイプがリクエストである場合、このクエリは担当者とログイン ユーザのロケーションが同じであるアクティブ リクエストをすべて選択します。
ラベル
cntオブジェクトの属性は、WHERE節に含める場合と同じ方法でラベルに含めることができます。 ラベル内でcntオブジェクトの属性を使用する場合の例を以下に示します。
@cnt.location.name Calls
このラベルにはロケーションの名前が含まれます。たとえばPhoenixである場合、ラベルがウィンドウに表示されるときに@cnt.location.nameがPhoenixに置き換わり、 Phoenix Callsというラベルが表示されます。
INキーワード
INキーワードを使用すると、ストアド クエリで結合を作成せずに2つ以上のテーブルを参照できます。 そのため、クエリ実行の効率が飛躍的に高まります。 INキーワードは、以下のようにコーディングします。
SREL_att_name IN ( value1 [, value2 [,...]] )
たとえば、リクエスト クエリは以下のようにコーディングできます。
category.sym IN (\'Soft%\', \'Email\')
この結果のSQL WHERE節は以下のようになります。
category IN (SELECT persid FROM prob_ctg WHERE sym LIKE 'Soft%' OR sym = 'Email')
INを使用する理由の1つは、直積を避けるためです。 たとえば、以下のようなクエリの結果は直積となり、効率が非常に悪くなります。
assignee.last_name LIKE 'MIS%' OR group.last_name LIKE 'MIS%'
INを使用すると直積が作成されず、以下の例に示すように、結合さえも作成されません。
assignee.last_name IN 'MIS%' OR group.last_name IN 'MIS%'
IN の右側にある値のリストを囲むために通常使用するかっこは、リスト内の値が 1 つのみの場合は省略することができます。 これと同様に、データ パーティションを変換することにより、データ パーティション内での結合を避ける必要があります。
assignee.last_name LIKE 'Smith' to: assignee = U'374683AA82ACE34AB999A042F3A0BA2E'
各項目は以下のとおりです。
  • U
    値がuuidであることを示します。
  • '374683AA82ACE34AB999A042F3A0BA2E'
    単一引用符で囲まれた32文字は、実際のuuidの文字列表現です。
このようにすると、多少明確さに欠けますが、結合を避けることができます。IN を使用すれば、同じパーティションを以下の例のように記述できます。この場合、最初の例の明確さと、2 つ目の例とほぼ同じ効率の良さを保つことができます。
assignee.last_name IN 'Smith'
CA SDM では、QREL リストまたは BREL リストに適用される IN 節をサポートしています。 たとえば、特定のアセット(IDは374683AA82ACE34AB999A042F3A0BA2E)の親となるアセットを持つリクエストをすべて検索する場合、該当のWhere節は以下のようになります。
affected_resource.[parent]child_hier.child IN (U'374683AA82ACE34AB999A042F3A0BA2E')
このIN節の最初の部分(
affected_resource
)は、cr(リクエスト)オブジェクトのSREL(外部キー)であり、Network_Resourceテーブルを指しています。
child_hier
の部分は、階層関係を指すhierオブジェクトのリストです。 最後の部分(
child
)は、INサブクエリのwhere節の最初の部分を形成します。
374683AA82ACE34AB999A042F3A0BA2E
の部分は、
child
に一致する外部キー値です。
[parent]
は、返されるサブクエリを指定します。 ID 値は UUID の文字列表現であるため、そのように指定し、「U'374683AA82ACE34AB999A042F3A0BA2E'」と記述する必要があります。
以下の例は実際に生成されるSQLで、特定のアセットの親となっているアセットを持つリクエストをすべて返します。
SELECT Call_Req.id FROM Call_Req WHERE Call_Req.affected_rc IN (SELECT hier_parent FROM Asset_Assignment WHERE hier_child = U'374683AA82ACE34AB999A042F3A0BA2E')
複数の親に対してクエリを実行する場合は、以下のようにSQLの()内にカンマで区切って指定します。
affected_resource.[parent]child_hier.child IN (U'374683AA82ACE34AB999A042F3A0BA2E', U'374683AA82ACE34AB999A042F3A0BA2E')
角かっこ([])で囲まれた属性名は、サブ節のSELECT部分を形成するために使用されます。 以下の例のように、CA Service Desk Manager バージョン 6.0 に搭載されているグループ ストアド クエリでは、角かっこ表記は使用しません。
(assignee = @cnt.id OR group.group_list.member IN (@cnt.id)) AND active = 1
角かっこ表記が使用されていない場合、SQL サブシステムは、これをドット表記部分の最初のシンボルの属性名と見なします。 この例の場合は、group_listオブジェクトに「group」という名前の属性があるため、問題なく処理されます。 ただし、別の名前が指定されていた場合は、Where節の解析は失敗します。 同等の節で角かっこを使用した場合は、以下のようになります。
(assignee = @cnt.id OR group.[group]group_list.member IN (@cnt.id)) AND active = 1
ドット表記は延長できません。 たとえば、以下の例は無効です。
affected_resource.[parent]child_hier.child.name IN ('chicago1')
優先度ベースのクエリ
データベースの Priority テーブルには、sym および enum の 2 つの列があります。 ユーザに対して表示される値はsymの値です。 ただしアプリケーションは、enum値に基づいてsymを参照します。 現時点では、sym値の初期設定は1~5で、対応するenum値はこれと逆になります。
Sym
Enum
1
5
2
4
3
3
4
2
5
1
そのため、ストアド クエリを作成していて 5 の値を参照する場合、.sym を使用して検索する属性を指定しなければ、実際には優先度 1 を検索することになります。
本製品によって割り当てられたデフォルトの enum 値を変更しないでください。 新規の sym 値を追加する場合は、enum の最大値から続けて割り当ててください。
時間ベースのクエリ
期間を指定して、時間ベースのストアド クエリを作成できます。 期間は、現在の日付を基準にして指定します。 たとえば、本日、昨日、先週、先月などを指定できます。 期間の名前には、TODAYやYESTERDAYなどがあります。 ストアド クエリの時間を参照するには、以下の2つのビルトイン関数のいずれかを使用します。
  • StartAtTime (
    timespan-name
    )
    期間として記述されている期間の開始点を参照します。
  • EndAtTime (timespan-name)
    期間として記述されている期間の終了点を参照します。
ストアド クエリの構文ルールにより、期間名は単一引用符で囲み、各単一引用符の前にバックスラッシュを付ける必要があります。 たとえば、先週の開始点を参照するには、以下のように指定します。
StartAtTime(\'PAST_WEEK\')
期間の参照を含むストアド クエリは、時間の経過に伴って定期的に更新する必要があります。 たとえば、「昨日」という期間は深夜0時に切り替わります。 期間を更新するための[開始時間]、[終了時間]、[トリガ時間]は、[期間の詳細]ウィンドウで指定します。
開始時間
[開始時間]には、期間の開始時期を絶対期間または相対期間で指定します。 以下の表は、[期間の詳細]ウィンドウの[開始時間]セクションのフィールドの説明です。
  • 2000 などの具体的な年、または +1(翌年)や -1(昨年)などの相対的な年
  • 1(1 月)から 12(12 月)までの具体的な月、または +1(翌月)や -1(前月)などの相対的な月
  • 1 ~ 31 の具体的な日、または +1(翌日)や -1(昨日)などの相対的な日
  • 時間
    0 ~ 24 の具体的な時間、または +1(1 時間後)や -1(1 時間前)などの相対的な時間
  • 1 ~ 59 までの具体的な分、または +1 や -1 などの相対的な分
終了時間
[終了時間]には、期間の終了時期を絶対期間または相対期間で指定します。 [期間の詳細]ウィンドウの[終了時間]セクションのフィールドは、[期間の詳細]ウィンドウの[開始時間]セクションのフィールドと同じです。
トリガ時間
[トリガ時間]フィールドは、期間の参照を含むストアド クエリのWHERE節を再作成して、ストアド クエリを更新するタイミングを指定します。 以下の表に示すように、[トリガ時間]には、現在の時間からの相対時間を指定する必要があります。
  • -1(昨年)から +36(36 年後)の間の相対的な年数
  • -1(前月)から +11(11 か月後)の間の相対的な月数
  • -1(昨日)から +31(31 日後)の間の相対的な日数
  • 時間
    -1(1 時間前)から +23(23 時間後)の間の相対的な時間
  • +9(9 分後)から +59(59 分後)の間の相対的な分数