Oracle® Fusion Middleware Oracle Business Intelligence Enterprise Editionメタデータ・リポジトリ作成者ガイド 12c (12.2.1.1.0) E77227-02 |
|
![]() 前へ |
![]() 次へ |
初期化ブロックは、動的リポジトリ変数、システム・セッション変数、およびシステム以外のセッション変数を初期化するために使用されます。
たとえば、NQ_SYSTEM
初期化ブロックはシステム・セッション変数をリフレッシュするために使用されます。
この項では、次の項目について説明します。
初期化ブロックには、そのブロックに関連付けられた変数を初期化またはリフレッシュするために実行されるSQL文が含まれます。
このSQL文は、「初期化ブロック」ダイアログの「接続プール」フィールドで指定された接続プールを使用してアクセスできる物理表を参照する必要があります。
初期化ブロックの問合せにデータベース固有のSQLを含める必要がある場合、その問合せのデータベース・タイプを選択できます。初期化ブロックをインスタンス化したときにそのデータベース・タイプのSQL初期化文字列が定義されていると、その文字列が使用されます。そうでなければ、デフォルトの初期化SQL文字列が使用されます。
注意:
デフォルトでは、「初期化ブロック」ダイアログをオンライン・モードで編集用に開くと、初期化ブロック・オブジェクトは自動的にチェックアウトされます。初期化ブロックがチェックアウトされている間、設定されているリフレッシュ間隔に応じて、Oracle BIサーバーはこの初期化ブロックでリフレッシュされる動的変数の値をリフレッシュし続けることができます。初期化ブロックをチェックインすると、動的変数の値はデフォルトのイニシャライザで示された値にリセットされます。この処理を実行しない場合は、「チェックアウトを元に戻す」オプションを使用します。
この項では、次の項目について説明します。
動的リポジトリ変数の値は、「初期化ブロック」ダイアログの「デフォルトの初期化文字列」フィールドで定義された問合せによって設定されます。
Oracle BIサーバーが問合せを実行して変数の値を定期的にリフレッシュするようにスケジュールを設定できます。Oracle BIサーバーを停止して再起動すると、サーバーは自動的にリポジトリ変数初期化ブロックのSQL文を実行して、リポジトリ変数を再度初期化します。
管理者アカウントのログ・レベルがインストール時に2以上に設定されていると、Oracle BIサーバーはリポジトリ変数情報を取得するために発行されたすべてのSQL問合せをobis1_query.log
に記録します。このログは、DOMAIN_Home/servers/obis1/logs
にあります。管理者のログ・レベルを2に設定すると、最も有用な情報のレベルが提供されます。
Oracle BI EE 11gバージョンを使用している場合、問合せとエラーはnqquery.log
に記録されます。
動的リポジトリ変数と同様に、セッション変数も初期化ブロックからその値を取得します。動的リポジトリ変数と異なり、セッション変数はスケジュールされた時間の間隔で更新されません。
そのかわり、ユーザーが新しいセッションを開始するたびに、Oracle BIサーバーはこれらの変数の新しいインスタンスを作成します。その値は、セッションの間変わりません。
セッション・ログイン時のセッション変数初期化ブロックの実行は、それに関連付けられたセッション変数が実際にセッション内でアクセスできるようになるまで遅延することができます。詳細は、初期化ブロックの作成を参照してください。
Identity Managerのユーザー・オブジェクトでログ・レベルが2以上に設定されている場合、または変数マネージャでLOGLEVEL
システム・セッション変数が2以上に設定されている場合、Oracle BIサーバーはセッション変数情報を取得するために発行されたすべてのSQL問合せをログに記録します。
Oracle BI EE 12cでは、問合せとエラーがDOMAIN_Home/servers/obis1/logs
内のobis1_query.log
に記録されます。
ユーザーレベルのログの詳細は、Oracle Business Intelligence Enterprise Editionシステム管理者ガイドの問合せログの管理を参照してください。
行単位の初期化オプションを使用して、セッション変数を動的に作成し、セッションの開始時にそれらの値を設定することができます。
セッション変数の名前および値は、接続プールを介してアクセスする外部データベースに格納されます。変数は、「初期化ブロック」ダイアログで入力した初期化文字列からその値を受け取ります。
たとえば、RW_SESSION_VARS
という名前の表に含まれる値を使用してセッション変数を作成するとします。この表には次の3つの列が含まれます。
USERID
: ユーザーの一意のIDを表す値が含まれます。
NAME
: セッション変数名を表す値が含まれます。
VALUE
: セッション変数の値を表す値が含まれます。
次の表に例を示します。
USERID | NAME | VALUE |
---|---|---|
JOHN |
LEVEL |
4 |
JOHN |
STATUS |
FULL-TIME |
JANE |
LEVEL |
8 |
JANE |
STATUS |
FULL-TIME |
JANE |
GRADE |
AAA |
行単位の初期化を使用するには、初期化ブロックを作成して「行単位の初期化」オプションを選択します(初期化ブロックの作成を参照)。この例では、初期化文字列に次のSQL文を指定します。
SELECT NAME, VALUE FROM RW_SESSION_VARS WHERE USERID='VALUEOF(NQ_SESSION.USERID)'
NQ_SESSION.USERID
は、別の初期化ブロックを使用してすでに初期化されているので注意してください。
次のセッション変数が作成されます。
JohnがOracle BIサーバーに接続すると、そのセッションには行単位の初期化からの2つのセッション変数が含まれます(LEVEL
: 値は4
、STATUS
: 値はFULL_TIME
)。
JaneがOracle BIサーバーに接続すると、そのセッションには行単位の初期化からの3つのセッション変数が含まれます(LEVEL
: 値は8
、STATUS
: 値はFULL-TIME
、GRADE
: 値はAAA
)。
行単位の初期化オプションを使用して、値リストを含む変数を初期化できます。SQLのIN演算子を使用して、指定されたリストの値をテストできます。
たとえば、前の例の表の値を使用して、次のSQL文を入力して初期化文字列を取得します。
SELECT 'LIST_OF_USERS', USERID FROM RW_SESSION_VARS WHERE NAME='STATUS' AND VALUE='FULL-TIME'
このSQL文により、変数LIST_OF_USERS
に、JOHN
とJANE
の値を含むコロン区切りのリスト(JOHN:JANE
)が移入されます。次のWHERE
句に示すように、フィルタでこの変数を使用できます。
WHERE TABLE.USER_NAME = valueof(NQ_SESSION.LIST_OF_USERS)
変数LIST_OF_USERS
には、値リスト(1つ以上の値)が含まれます。論理WHERE
句は、次の文のような物理IN
句に展開されます。
WHERE TABLE.USER_NAME IN ('JOHN', 'JANE')
注意:
前述の説明および例は、論理SQLに固有の内容です。値のリストと変数を物理SQLを使用して初期化する場合、VALUELISTOF
関数を使用する必要があります。たとえば、変数LIST_OF_USERS
内のユーザー名に割り当てられた顧客を取得するためには、次の文を使用します。
Select 'LIST_OF_CUSTOMERS', Customer_Name from RW_CUSTOMERS where RW.CUSTOMERS.USER_NAME in (VALUELISTOF(NQ_SESSION.LIST_OF_USERS))
リストに表示されている指定された値のみでフィルタをするには、ValueNameof
を使用して、次の例のようにします。最初の値は「0」であることに留意してください。「1」ではありません。
Select 'LIST_OF_CUSTOMERS', Customer_Name from RW_CUSTOMERS where RW.CUSTOMERS.USER_NAME in '(ValueNameOf(0,NQ_SESSION.LIST_OF_USERS))
リポジトリ変数では、開始日時の日、日付、および時刻、およびリフレッシュ間隔を指定できます。
名前およびスケジュールを初期化ブロックに割り当てる手順は次のとおりです。
次の手順は、データソースおよび接続プールを選択することです。
初期化ブロックのデータソース・タイプとして「データベース」を選択する場合、データベースから返されるSQL文の列の値は、初期化ブロックに関連付けられた変数に割り当てられます。
「データベース」をデータソース・タイプとして選択する初期化ブロックの専用接続プールを作成することをお薦めします。さらに、Oracle BIサーバーの起動中に、初期化ブロックが特定の接続プールに対して失敗した場合、その接続プールを使用する初期化ブロックはそれ以上処理されません。そのかわり、接続プールはブラックリストに記載され、その接続プールの後続の初期化ブロックはスキップされます。詳細は、初期化ブロックの接続プールについてを参照してください。
データソース・タイプとして「データベース」を選択した場合:
データソース・タイプとして「データベース」を選択し、「OBI EEサーバーの使用」オプションを選択しない場合、次のように処理されます。
変数のリフレッシュに使用されるSQL文は、「接続プール」フィールドで指定された接続プールを介してアクセスできる物理表を参照する必要があります。この表は、メタデータの物理レイヤーに含まれる必要はありません。実行時に、データベース・タイプの初期化文字列が定義されている場合、この文字列が使用されます。そうでない場合、そのデータベース・タイプのデフォルトの初期化SQLが使用されます。この文字列は上書きできます。
SQLを作成してそれを直接データベースに送信する場合(たとえば、初期化ブロックでデータベース固有のSQLを使用する場合など)、SQL文はOracle BIサーバーを迂回します。SQL文の列の順序および初期化ブロックに関連付けられた変数の順序により、どの列が各変数に割り当てられるかが決定されます。
[リポジトリ|セッション]変数初期化ブロック・データソースダイアログの「テスト」ボタンを使用して、このSQLをテストする必要があります。SQL文にエラーがある場合、データベースはエラー・メッセージを返します。詳細は、初期化ブロックのテストを参照してください。
データソース・タイプとして「データベース」を選択し、「OBI EEサーバーの使用」オプションを選択する場合、次のように処理されます。
変数のリフレッシュに使用するSQL文は、特定のデータベース用に記述されている場合があります。ただし、そのSQL文はOracle BIサーバーで処理されるため、他のデータ・ソースでも機能します。Oracle BIサーバーはデータ・ソースで使用できない可能性がある関数(PI
など)を提供することもありますが、そのSQL文はOracle BIサーバーでサポートされる他のデータ・ソース(ADF、SQL Server、Oracle、XMLファイルなど)では機能します。「OBI EEサーバーの使用」オプションを選択すると、SQL文がOracle BIサーバーに送信され、元になるデータベースには直接送信されないため、接続プールは不要です。
オンライン・モードの場合、[リポジトリ|セッション]変数初期化ブロック・データソースダイアログの「テスト」ボタンを使用してのみ、このSQL文をテストできます。SQL文にエラーがある場合、データベースはエラー・メッセージを返します。詳細は、初期化ブロックのテストを参照してください。
初期化ブロックのデータソースおよび接続プールを選択する手順は次のとおりです。
管理ツールで、「管理」を選択してから、「変数」を選択します。
「変数マネージャ」ダイアログで、編集する初期化ブロックをダブルクリックします。リポジトリ初期化ブロックまたはセッション初期化ブロックを編集できます。
「接続プール」フィールドの横の「データ・ソースの編集」をクリックします。
「データ・ソース・タイプ」リストで、次のタイプのいずれかを選択します。
データベース: リポジトリ変数およびセッション変数用。
LDAPサーバー: セッション変数用。
カスタム認証システム: セッション変数用。詳細は、セッション変数の管理を参照してください。
データソース・タイプに「データベース」を選択している場合、次のいずれかの手順を実行します。
「デフォルトの初期化文字列」または「データベース固有のSQLの使用」を選択して、次の手順を実行します。
「接続プール」フィールドの横の「参照」をクリックして、ターゲット情報が存在するデータベースに関連付けられている接続プールを選択します。初期化文字列を入力する前に接続プールを選択していない場合、接続プールを選択するよう促すメッセージが表示されます。
「接続プールの選択」ダイアログで、接続プールを選択して「選択」をクリックします。初期化文字列を入力する前に接続プールを選択する必要があります。
デフォルトでは、物理レイヤーのデータベース・オブジェクトの下の最初の接続プールは選択できません。これにより、問合せに使用する接続プールと同じ接続プールを初期化ブロックで使用できないようになります。
「オプション」ダイアログの「初期化ブロックに最初の接続プールを許可」を選択することで、最初の接続プールを選択可能にするよう動作を変更できますが、これはお薦めしません。詳細は、管理ツールのオプションの設定を参照してください。
「データベース固有のSQLの使用」を選択した場合、「データベース」ペインでデータベースを開いて選択します。そこで、それに関連付けられた文字列を入力します。
それを選択しない場合、「デフォルトの初期化文字列」ボックスで変数の移入に必要なSQL初期化文字列を入力します。例は、初期化文字列の例を参照してください。
初期化ブロックを編集し、それを使用して階層列の選択手順をオーバーライドする場合、「デフォルトの初期化文字列」ボックスに、JSON初期化文字列を入力します。詳細は、選択手順をオーバーライドする変数で使用される初期化文字列を参照してください。
(オプション)「テスト」をクリックして、SQL文のデータソース接続をテストします。
「OK」をクリックして、「初期化ブロック」ダイアログに戻ります。
「OBI EEサーバーの使用」を選択して、次の手順を実行します。
ボックスで、変数の移入に必要なSQL初期化文字列を入力します。
ここで入力した文字列はOracle BIサーバーで処理されるため、Oracle BIサーバーでサポートされていれば、文字列は別のデータ・ソースでも機能します。
たとえば、初期化ブロックは、SQL Serverに固有の関数pi()
を使用する場合があります。ただし、「OBI EEサーバーの使用」を選択すると、問合せは、Oracle BIサーバーによって適切なデータベース用に書き換えられます。つまり、SQL Serverバックエンド・データベースをOracleに変更しても、問合せはそのまま機能します。
追加の例は、初期化文字列の例を参照してください。
「OK」をクリックして、「初期化ブロック」ダイアログに戻ります。
データソース・タイプに「LDAPサーバー」を選択している場合、次の手順を実行します。
「参照」をクリックして既存のLDAPサーバーを選択するか、「新規」をクリックして「LDAPサーバー」ダイアログの「一般」タブを開きLDAPサーバーを作成します。
「OK」をクリックして、「初期化ブロック」ダイアログに戻ります。
LDAPサーバー名とそれに関連付けられたドメイン識別子が「名前」および「ドメイン識別子」列に表示されます。
データソース・タイプに「カスタム認証システム」を選択している場合、次の手順を実行します。
「参照」をクリックして既存のカスタム認証システムを選択するか、「新規」を選択してそれを作成します。
「OK」をクリックして、「初期化ブロック」ダイアログに戻ります。
「OK」をクリックします。
階層列を含む分析で、選択手順はセッション変数またはリポジトリ変数でオーバーライドされます。
このセッション変数およびリポジトリ変数では、初期化文字列にSQL構文ではなく有効なJSON構文が含まれている必要があります。
JSONを使用して、タイプ、列およびメンバーを次の構文で定義します。
{ "type": "Hierarchy", "column": { "subject_area":"your_subject_area", "hier_id":"your_hier_id", "dim_id":"your_dim_id", "table_name":"your_table_name" }, "members": [ { "level_id":"your_level_id", "values": [ your_value, your_value ] }, { "level_id":"your_level_id", "values": [ your_value ] } ] }
説明:
"type"
は、階層タイプを表します。
"column"
は、サブジェクト領域および表明などの階層列の情報を表します。
"dim_id"
は、論理ディメンション名です。
"members"
は、階層レベルおよびメンバーIDを表します。
"level_id"
は、プレゼンテーション・レベル名です。
標準的な階層構文の例
{ "type": "Hierarchy", "column": { "subject_area": "A - Sample Sales", "hier_id": "H2 Offices", "dim_id": "H3 Offices", "table_name": "Offices" }, "members": [ { "level_id": "Company", "values": [ 10001, 10002 ] }, { "level_id": "Organization", "values": [ 1005 ] } ] }
親子階層構文の例
{ "type":"Hierarchy", "column":{ "subject_area":"A - Sample Sales", "hier_id":"Sales Rep Hierarchy", "dim_id":"H5 Sales Rep", "table_name":"Sales Person" }, "members":[ { "level_id":"Grand Total", "values":[ 27, 24, 18, 16 ] } ] }
これらの例は、文字列を初期化する方法を示しています。
この項では、次の初期化文字列の例について説明します。
例19-1 サイトでデリバーを使用する場合のSQL文字列
SELECT username, groupname, dbname, schemaname FROM users WHERE username=':USER' NQS_PASSWORD_CLAUSE(and pwd=':PASSWORD')NQS_PASSWORD_CLAUSE
このSQLのWHERE
句には、2つの制約が含まれます。
':USER'
(コロンと一重引用符に注目してください)は、ログイン時にユーザーが入力するIDです。
':PASSWORD'
(コロンと一重引用符に注目してください)はユーザーが入力するパスワードです。これは、USER
システム・セッション変数が使用される場合、常にともに存在するはずのシステム変数です。PASSWORD
変数を設定する必要はありません。この変数はデータベース接続プールで使用することで、ユーザーIDとそのユーザーのパスワードを使用するログインを通過させることができます。またこの変数はSQL文でも使用できます。
デリバーによる外部表認証を使用している場合、:PASSWORD
制約を構成するSQL文の一部をNQS_PASSWORD_CLAUSE
句の間に埋め込む必要があります。
ユーザーIDとパスワードが指定された表に存在する値と一致する場合にのみ、問合せはデータを返します。USER
およびPASSWORD
変数に正しい値を代入し、NQS_PASSWORD_CLAUSE
句を削除して、Oracle BIサーバーの外部でSQL文をテストする必要があります。
詳細は、『Oracle Business Intelligence Enterprise Editionシステム管理者ガイド』を参照してください。
例19-2 サイトでデリバーを使用しない場合のSQL文字列
SELECT username, groupname, dbname, schemaname FROM users WHERE username=':USER' AND pwd=':PASSWORD'
このSQL文のWHERE
句には、2つの制約が含まれます。
':USER'
(コロンと一重引用符に注目してください)は、ログイン時にユーザーが入力するIDです。
':PASSWORD'
(コロンと一重引用符に注目してください)はユーザーが入力するパスワードです。これは、USER
システム・セッション変数が使用される場合、常にともに存在するはずのシステム変数です。PASSWORD
変数を設定する必要はありません。この変数はデータベース接続プールで使用することで、ユーザーIDとそのユーザーのパスワードを使用するログインを通過させることができます。またこの変数はSQL文でも使用できます。
ユーザーIDとパスワードが指定された表に存在する値と一致する場合にのみ、問合せはデータを返します。USER
およびPASSWORD
変数に正しい値を代入して、Oracle BIサーバーの外部でSQL文をテストする必要があります。
例19-3 複数のデータソースから表を結合するSQL文 - 'OBI EE Server'設定を使用する場合
select WUSER.name, wuser_detail.email from "db-11g/orcl"."NAME"."WUSER', "sqlexpress"."master"."dbo"."wuser_detail" where username=:USER:
前述の初期化ブロックの問合せの例では、異なるデータソース(SQLServer、Oracle、XML Filesなど)からの複数の表の結合問合せを使用しています。「OBI EEサーバーの使用」オプションを選択すると、問合せがBIサーバーによって指定されたデータソース用に書き換えられるので、この問合せは機能します。
「テスト」ボタンを使用して、またはOracle BI EEクライアント・ユーティリティなどのSQLツールを使用して、SQL文をテストする必要があります。
SQLツールを使用する場合、同じDSNまたは指定された接続プール内のDSNと同一に設定されたDSNを使用してください。
オンライン・モードでは、初期化ブロック・テストは:USER
と:PASSWORD
をユーザー名とパスワードに使用するように設定された接続プールが機能しません。オフライン・モードでは、:USER
と:PASSWORD
を移入できるように「変数の値の設定」ダイアログが表示されます。
初期化ブロックをテストする手順は次のとおりです(オプション)。
次の手順は、変数と初期化ブロックを関連付けることです。
デフォルトのイニシャライザのSQLのSELECT文には、複数の列を含めることができます。
SQL文の列の順序および初期化ブロックに関連付けられた変数の順序により、各変数に関連付けられる列値が決定されます。そのため、変数を初期化ブロックに関連付けると、最初の列で返された値は、リストの最初の変数に割り当てられます。
リポジトリ変数初期化ブロックの場合、オンライン・モードでリポジトリを開く場合、「初期化ブロック」ダイアログの「デフォルトの初期化文字列」フィールドに表示される値は、Oracle BIサーバーに認識されているその変数の現在の値です。関連付けられた変数の数は、取得される列の数とは異なる場合があります。列よりも変数のほうが数が少ない場合、余分な列値は無視されます。列よりも変数のほうが数が多い場合、追加の変数はリフレッシュされません(それらは、それが何であるかに関係なく元の値を保持します)。正しいSQLであれば初期化ブロックを使用して実行できます。これには、データベースに書き込むSQLおよびデータベース構造を変更するSQLが含まれ、その接続プールに関連付けられたユーザーIDにこれらのアクションの実行をデータベースが許可していると想定されます。
Oracle BIサーバーを停止して再起動すると、サーバーは自動的にリポジトリ変数初期化ブロックのSQL文を実行し、リポジトリ変数を再度初期化します。
セッション変数初期化ブロックでは、「行単位の初期化」を選択できます。「行単位の初期化」オプションを選択すると、「キャッシュの使用」オプションが自動的に選択されます。「キャッシュの使用」オプションが選択されることで、Oracle BIサーバーは問合せの結果をメイン・メモリー・キャッシュに保存することになります。詳細は、行単位の初期化についてを参照してください。
Oracle BIサーバーは、後続セッション用にキャッシュされた結果を使用します。これにより、セッションの起動時間を短縮できます。ただし、キャッシュされた結果には最新のセッション変数の値が含まれていない場合があります。各新規セッションでセッション変数の最新セットとそれぞれに対応する値が必要な場合、このオプションを選択解除する必要があります。
詳細は、変数を含む初期化ブロックの使用についてを参照してください。
変数を初期化ブロックに関連付ける手順は次のとおりです。
次の手順は実行優先度を確立することです。
リポジトリに複数の初期化ブロックがある場合、ブロックを初期化する順序を設定できます(優先度の確立)。
まず、最後に実行するブロックを開き、その前に実行する初期化ブロックを追加します。たとえば、リポジトリにAとBという2つの初期化ブロックがあるとします。初期化ブロックBを開き、ブロックBの前にブロックAを実行することを指定します。そうすると、ブロックAは自身の単独での実行に加えて、ブロックBのスケジュールに応じても実行されるようになります。
実行優先度を確立する手順は次のとおりです。
注意:
初期化ブロックで「OBI EEサーバーの使用」オプションを選択すると、次のような状態になります。
実行優先度は適用されません。これは、ユーザーのログイン中に、「OBI EEサーバーの使用」オプションが選択された初期化ブロックが「OBI EEサーバーの使用」オプションが選択されていない初期化ブロックの後に実行されるためです。
「認証のために必要」オプションはグレー表示されます。これは、このタイプの初期化ブロックは認証後に実行されるためです。
セッション変数初期化ブロックの実行は、場合によっては遅延できないことがあります。
セッション変数初期化ブロックの実行が遅延できない場合、その理由を説明するメッセージが表示されます。
詳細は、名前およびスケジュールの初期化ブロックへの割当てを参照してください。
セッション変数初期化ブロックの実行を遅延できないシナリオは、次のとおりです。
セッション変数初期化ブロック変数ターゲット・ダイアログで「行単位の初期化」オプションが選択されていて、変数はデフォルト値を使用して明示的に宣言されていません。
メッセージ例: 初期化ブロック'A_blk'は、行単位の初期化を使用しているため、その実行を遅延することはできません。
「セッション変数初期化ブロック」ダイアログで「認証のために必要」オプションが選択されています。
メッセージ例: 初期化ブロック'A_blk'は、認証に必要であるため、その実行を遅延することはできません。
「データ・ソース・タイプ」が「データベース」ではありません。
メッセージ例: 初期化ブロック'A_blk'には接続プールがないため、その実行を遅延することはできません。
PROXY
またはUSER
という名前のセッション変数で初期化ブロックが使用されています。
メッセージ例: 初期化ブロック'A_blk'は、セッション変数'PROXY'によって使用されているため、その実行を遅延することはできません。
「セッション変数」ダイアログで「セキュリティ・センシティブ」オプションが選択されているセッション変数で初期化ブロックが使用されています。
メッセージ例: 初期化ブロック'A_blk'はセキュリティ・センシティブなセッション変数'A'で使用されているため、その実行を遅延することはできません。
その初期化ブロックが、「遅延実行の許可」オプションが選択されていない別の初期化ブロックの先行ブロックです。
メッセージの例: 初期化ブロック'A_blk'の後の初期化ブロックの1つにAllow deferred executionフラグが設定されていません。初期化ブロック'B_blk'にAllow deferred executionフラグが設定されていません。
Oracle BI管理ツールの変数マネージャを使用して、初期化ブロックを有効化および無効化できます。
初期化ブロックを有効化または無効化する手順は次のとおりです。