TCONVERTファンクションは、DAY、WEEK、MONTH、QUARTERまたはYEAR型のディメンションの時系列データを、DAY、WEEK、MONTH、QUARTERまたはYEAR型の他のディメンションに変換するファンクションです。変換で使用する集計方法または割当て方法を指定できます。
重要: このファンクションは、DAY、WEEK、MONTH、QUARTERまたはYEAR型のディメンションでのみ使用できます。TEXT型の階層ディメンションとして実装されている時間ディメンションには使用できません。 |
構文
TCONVERT(expression time-dimension method [method])
methodの構文は、使用する方法の種類によって次のように異なります。
パラメータ
変換する値を含む式。expressionは、DAY、WEEK、MONTH、QUARTERまたはYEAR型のディメンションによりディメンション化されている必要があります。このディメンションは、ソース・ディメンションと呼ばれます。通常、expressionは数値ですが、一部の変換方法ではテキスト・データも変換できます。「テキスト・データの変換」を参照してください。
expressionの変換後のDAY、WEEK、MONTH、QUARTERまたはYEARディメンション。このディメンションは、ターゲット・ディメンションと呼ばれます。
データをソース・ディメンションからターゲット・ディメンションに変換する際に使用する方法。次の集計方法または割当て方法を指定できます。
集計方法は、SUM、AVERAGEおよびLASTです。これらは通常、データを小さい方の時間間隔から大きい方の時間間隔(たとえば、月から年)に変換する際に使用されます。
割当て方法は、SPLIT、REPEATおよびINTERPOLATEです。これらは通常、データを大きい方の時間間隔から小さい方の時間間隔(たとえば、年から四半期)に変換する際に使用されます。すべての割当て方法で、ソース・ディメンションの完全デフォルト・ステータスが使用されて、割当てに使用される期間が決定されます。
ソース・ディメンションおよびターゲット・ディメンションに重複する同じ長さの期間(暦年と会計年度など)が含まれる場合以外は、集計方法および割当て方法の両方を指定できます。「互換性のある集計方法と割当て方法」および「集計および割当ての両方の使用」を参照してください。
どの方法においても、ターゲット・ディメンションの現行のステータスにある値について結果が計算されます。
取得する結果は、指定した方法と、同じ長さの期間または異なる長さの期間のどちらを持つディメンション間でデータを変換するかによって異なります。「集計および割当ての両方の使用」、「同じ長さの重複する期間」および「互換性のある代替方法」を参照してください。
元となるソース期間のデータを合計することにより、ターゲット期間に対してデータを集計します。各ターゲット期間について、SUM BY PERIODはターゲット期間内で終了するすべてのソース期間の合計を返します。SUMは、ソースおよびターゲット・ディメンション間の暗黙的なリレーションを使用します。
ソース値に含まれる各ターゲットの日数に従って、各ソース値に加重します。各ターゲット期間について、SUM BY DAYは元となる各ソース期間の値を、次の形式の加重係数で乗算しますが、ここで、source-days-in-targetは実際にターゲット期間に含まれるソース期間の日数、total-days-in-periodはソース期間の日数の合計です。
source-days-in-target / total-days-in-period
その後、SUM BY DAYはそれらの加重ソース値の合計を返します。SUM BY DAYを使用すると、個々のソース期間の値が、隣接するターゲット期間にまたがって分配されることがあります。
たとえば、週単位のデータを月単位のデータに変換するとします。週の3日間が1月に属し、4日間が2月に属する場合、SUM BY DAYはその週のデータの3/7
を1月の合計に加算し、4/7
を2月の合計に加算します。一方、SUM BY PERIODは週のデータ値全体を2月の合計に加算します(週が2月に終了するため)。
別の例として、暦年データを、6月に終了する会計年度に変換するとします。暦年1996(Cal96
)は、会計年度1997(Fy97
)に終了する唯一の暦年です。SUM BY PERIODメソッドでは、Cal96
の値をFy97
に割り当てます。一方、SUM BY DAYはCal96
の値を、各会計年度に属する暦日の数に従って、会計年度Fy96
とFy97
に分配します。Cal96
の366日のうち、182日(1月1日から6月30日)がFy96
に属し、184日(7月1日から12月31日)がFy97
に属します。このため、CAL96
のデータについて、SUM BY DAYはFy96
には加重係数182/366
を、Fy97
には加重係数184/366
を使用します。
元となるソース期間のデータを平均することにより、ターゲット期間に対してデータを集計します。各ターゲット期間について、AVERAGE BY PERIODはターゲット期間内に終了するすべてのソース期間のデータを合計し、この合計をソース期間の数で除算します。AVERAGE BY PERIODは、2つの時間ディメンション間の暗黙的なリレーションを使用します。
ソース値に含まれる各ターゲットの日数に従って、元となる各ソース期間の値に加重します。各ターゲット期間について、AVERAGE BY DAYは各ソース期間の値を、実際にターゲット期間に含まれるソース期間の日数で乗算します。その後、それらの加重ソース値を合計し、ターゲット期間に含まれる合計日数で除算することにより平均が計算されます。AVERAGE BY DAYを使用すると、単一のソース期間の値が、隣接するターゲット期間にまたがって分配されることがあります。
各ターゲット期間について、LAST BY PERIODはターゲット期間内で終了する最後のソース期間のデータ値を返します。ソース・ディメンションおよびターゲット・ディメンション間の暗黙的なリレーションが使用されます。
小さい方の期間から大きい方の期間にデータを変換する場合は、LAST BY PERIODと同じ機能を持ちます。「互換性のある代替方法」を参照してください。
ソース・ディメンションの現行のステータスが使用されることを示します。これは、SUMおよびAVERAGEメソッドのデフォルトです。
ソース・ディメンションの完全デフォルト・ステータスが使用されることを示します。これは、LASTメソッドのデフォルトです。
ソース期間のデータを分割することにより、ターゲット期間にデータを割り当てます。SPLIT BY PERIODは、そのソース期間内に終了するターゲット期間の間で、ソース値を等分します。SPLIT BY PERIODは、2つのDAY、WEEK、MONTH、QUARTERまたはYEARディメンション間の暗黙的なリレーションを使用します。
ソース値に含まれる各ターゲットの日数に従って、各ソース値に加重します。各ターゲット期間について、SPLIT BY DAYは元となる各ソース期間の値を、次の形式の加重係数で乗算しますが、ここで、target-days-in-sourceは実際にソース期間に含まれるターゲット期間の日数、total-period-daysはソース期間の日数の合計です。
target-days-in-source / total-period-days
その後、SPLIT BY DAYはそれらの加重ソース値の合計を返します。SPLIT BY DAYを使用すると、個々のソース期間の値が、隣接するターゲットにまたがって分配されることがあります。
各ターゲット期間について、REPEATはソース期間の値を返します。ターゲット期間は、ソース期間内に終了する期間です。REPEATは、ソースおよびターゲット・ディメンション間の暗黙的なリレーションを使用します。大きい方の期間から小さい方の期間にデータを変換する場合は、REPEAT BY DAYはREPEAT BY PERIODと同じ機能を持ちます。「互換性のある代替方法」を参照してください。
INTERPOLATEメソッドは、まず現行および前のソース期間の値の間にある差異を計算し、次に結果をターゲット期間に増分的に分割することにより、データをターゲット期間に割り当てます。INTERPOLATEは、現行および前のソース期間の間にある差異を、ソース期間内に終了するターゲット期間の数で除算し、この結果によって各ターゲット期間を増分します。
各ターゲット期間について、前のソース期間の値を次のように計算された値に加算します。ここで、end-daysは前のソース期間の終わりから現行のターゲット期間の終わりまでの日数で、period-daysは現行のソース期間に含まれる日の総数です。
(end-days / period-days) * (current-source-value - previous-source-value)
複数のソース期間にまたがる日がターゲット期間に含まれている場合、各ソース期間について同様の計算が行われます。
使用上の注意
TCONVERTから返される結果のディメンション
TCONVERTにより返される結果は、ターゲットのDAY、WEEK、MONTH、QUARTERまたはYEARディメンション、およびDAY、WEEK、MONTH、QUARTERまたはYEARディメンションではないすべてのexpressionディメンションによってディメンション化されます。
割当てで使用されるステータス
STATUSおよびNOSTATUSキーワードは、割当て方法には影響を与えません。割当て方法では、常にソース・ディメンションの完全デフォルト・ステータスが使用されて、元となる期間が決定されます。
互換性のある集計方法と割当て方法
ソース・ディメンションおよびターゲット・ディメンションに重複する同じ長さの期間が含まれる場合以外は、集計方法および割当て方法の両方を指定できます。ただし、2つの方法に互換性が必要です。表8-15「互換性のある集計方法と割当て方法」は、互換性のある方法を示しています。
集計方法と割当て方法の両方を指定した場合、どちらかの方法にBY PERIODまたはBY DAYを使用できます。一方の方法にBY PERIODを(明示的にまたはデフォルトとして)指定して、もう一方の方法にBY DAYを指定した場合、BY DAYが優先されます。
集計および割当ての両方の使用
集計方法と互換性のある割当て方法の両方を指定した場合、Oracle OLAPはこれを次のように処理します。
小さい方の期間から大きい方の期間にデータを変換する場合、Oracle OLAPは(BY DAYをどちらかの方法に指定した場合はBY DAYを使用して)集計方法を採用します。
大きい方の期間から小さい方の期間にデータを変換する場合、Oracle OLAPは(BY DAYをどちらかの方法に指定した場合はBY DAYを使用して)割当て方法を採用します。
3月に終了する四半期と6月に終了する四半期など、同じ長さの重複しない期間を持つディメンション間でデータを変換する場合、集計方法および割当て方法の結果は同じになります。
同じ長さの重複する期間
暦年と会計年度、または3月で終了する四半期と4月に終了する四半期など、同じ長さの重複する期間を持つ、DAY、WEEK、MONTH、QUARTERまたはYEAR型の2つのディメンション間でデータを変換する場合、集計方法または割当て方法のどちらかを指定する必要がありますが、両方を指定することはできません。これらのディメンションについて、互換性のある集計方法と割当て方法では異なる結果が生成される可能性があります。
たとえば、暦年ディメンションから6月に終了する会計年度ディメンションにデータを変換する場合、SUMおよびSPLITメソッドは次のように異なる結果を返します。
SUMメソッドは、ターゲット期間内に終了するソース期間のデータを合計します。暦年1996は会計年度1997内に終了するため、SUMメソッドは暦年1996の値を会計年度1997に割り当てます。
SPLITメソッドは、ソース・データ値を、ソース期間内に終了するターゲット期間に割り当てます。会計年度1996は暦年1996内に終了するため、SPLITメソッドは暦年1996の値を会計年度1996に割り当てます。
互換性のある代替方法
単一の変換方法を指定し、集計方法を使用してデータを大きい方の期間から小さい方の期間(たとえば、月から週など)に変換する場合、Oracle OLAPは自動的に、指定した集計方法のかわりに互換性のある割当て方法を使用します。同様に、割当て方法を使用してデータを小さい方の期間から大きい方の期間に変換する場合、Oracle OLAPは自動的に互換性のある集計方法を使用します。「互換性のある集計方法と割当て方法」を参照してください。
結果のデータ型
可能な場合、TCONVERTはexpressionと同じデータ型の結果を返します。expressionがDECIMALの場合、結果は常にDECIMALになります。expressionがINTEGERの場合、必要な計算に除算が含まれない場合は結果はINTEGERとなります。たとえば、2つのディメンションが揃っている(つまり、暦年ディメンションと12月に終了する四半期ディメンションなど、それらが同じフェーズを持っており、同じ期間に基づいている)場合、REPEATメソッドを使用してINTEGER expressionを大きい方の期間から小さい方の期間に変換する場合は、結果がINTEGERとなります。同様に、SUMまたはLASTメソッドを使用してexpressionを小さい方の期間から大きい方の期間に変換する場合、結果はINTEGERとなります。
テキスト・データの変換
TCONVERTを使用して、変換に数値計算が必要ない場合にテキスト式の値を変換することもできます。たとえば、揃っているディメンションの場合、LASTメソッドを使用してテキスト値を小さい方の期間から大きい方の期間に変換でき、REPEATメソッドを使用してテキスト値を大きい方の期間から小さい方の期間に変換できます。さらに、LASTおよびREPEATメソッドを使用すると、同じ長さの期間を持つディメンション間でテキスト・データを変換することもできます。数値計算が必要なメソッドを使用してテキスト式を変換しようとすると、エラー・メッセージが表示されます。
財務データのメソッド
財務データを扱う場合、各タイプのデータに適切な変換メソッドを使用できます。表8-16「様々なタイプの財務データの変換メソッドの例」に、いくつかの例を示します。
TCONVERTでのNA値の処理
TCONVERTはNASKIPオプションの影響を受けます。NASKIPがNO
に設定されている場合、TCONVERTはNA
値を持つソース期間からデータを受け取るターゲット期間にNA
を返します。
例
例8-133 四半期をまたがるデータの分割
この例は、SPLITメソッドとSPLIT BY DAYメソッドを使用して、$120,000の年間予算収入を1996年の各四半期に割り当てた場合の結果を示しています。既存のyear
ディメンションがソース・ディメンションで、既存のquarter
ディメンションがターゲット・ディメンションです。
次の文
DEFINE budget.revenue DECIMAL <year> budget.revenue(year 'Yr96') = 120000 LIMIT quarter TO year 'Yr96' REPORT W 12 HEADING 'Split Evenly' - TCONVERT(budget.revenue quarter SPLIT) - W 12 HEADING 'Split by Day' - TCONVERT(budget.revenue quarter Split by day)
によって、次のレポートが生成されます。
QUARTER Split Evenly Split by Day -------------- ------------ ------------ Q1.96 30,000.00 29,836.07 Q2.96 30,000.00 29,836.07 Q3.96 30,000.00 30,163.93 Q4.96 30,000.00 30,163.93
例8-134 TCONVERTを使用した週単位から月単位へのデータの集計
この例では、週単位のデータを月単位のデータに集計します。まず、week
という名前の週ディメンションを定義し、1996年1月1日から1996年6月30日までの日付を含む週を追加します(間の週はOracle OLAPによって自動的に追加されます)。
DEFINE week DIMENSION WEEK MAINTAIN week ADD '01Jan96' '30Jun96'
次に、week
によりディメンション化されるweekvar
という名前の変数を定義し、各週に値7
を割り当てます。
DEFINE weekvar DECIMAL <week> weekvar = 7
次の文を発行すると、weekvar
に非NA
データが含まれる最初の週の開始日が1995年12月31日で、weekvar
に非NA
データが含まれる最後の週の終了日が1996年7月6日であることが表示されます。
SHOW BEGINDATE(weekvar) SHOW ENDDATE(weekvar)
この文によって生成される出力は次のとおりです。
31Dec95 06Jul96
これらの開始日と終了日に基づき、月単位のデータに変換される際、データはDec95
からJul96
までの月を基準として集計されます。次の文は、SUMメソッドとSUM BY DAYメソッドを使用して、weekvar
の週単位のデータを月単位のデータに変換した場合の結果を出力します。
LIMIT month TO 'Jan96' TO 'Jul96' REPORT HEADING 'Sum' TCONVERT(weekvar month SUM) - HEADING 'Sum by Day' - TCONVERT(weekvar month SUM BY day)
この文によって生成されるレポートは次のとおりです。
MONTH Sum Sum by Day -------------- ---------- ---------- Jan96 28.00 31.00 Feb96 28.00 29.00 Mar96 35.00 31.00 Apr96 28.00 30.00 May96 28.00 31.00 Jun96 35.00 30.00 Jul96 7.00 6.00