APEXおよび分析ビューを使用した分析アプリケーションの簡単な構築 (2023/02/28)

APEXおよび分析ビューを使用した分析アプリケーションの簡単な構築 (2023/02/28)

https://blogs.oracle.com/datawarehousing/post/case-study-analyzing-well-drilling-data-using-apex-and-analytic-views-on-autonomous-database

投稿者: William Endress  | Autonomous Database Product Management


はじめに


Oracle JETベースの表およびチャートを導入して以来、Oracle Application Express (APEX)を使用して、ビジネス・インテリジェンスおよび分析コンテンツを含むアプリケーションを構築する非常に好意的となっています。ディメンションをまたがってカットされ、集計され、興味深い計算の利点を享受できるデータがある場合があります。なぜだめですか?APEXは、Autonomous Databaseを含むすべてのOracle Databaseに含まれています。


アンビションは、記述または生成する必要がある問合せの複雑さによって決定される可能性があります。前期間からの売上や売上の変更の選択など、一部のクエリーは簡単に書くことができます。集計レベル(GROUP BY)が固定されている場合は、期間のギャップ(前期間の計算)やその他の複雑さを心配する必要はありません。


同じビジュアライゼーション内で、異なるレベルの集計(年、四半期、月など)でデータを選択するように要件が拡張されているとします。その場合、計算はより洗練され、スパース データによる前期間の計算の時間枠の適切な処理を考慮する必要があります。SQLジェネレータを記述する必要があります。このアプリケーションの構築は、はるかに困難になります。APEXの開発者は、SQLを生成する責任があります。最も意欲的なAPEX開発者以外はすべて、SQLの生成が複雑であるため、これらのユースケースを回避する可能性があります。このようなダッシュボードは、ビジネス・インテリジェンス・アプリケーションに任せるのが最適です。


しかし、単純な問合せテンプレートを使用して、ディメンションの任意の組合せ、興味深い計算とともに、集計の任意のレベルでデータを返すことができるビューのタイプがデータベースに存在する場合はどうでしょうか。多数の異なるレポート、チャートおよびマップが、すべて同じテンプレートまたはテンプレートのバリエーションを使用できるとしたらどうでしょうか。問合せ内で新しい計算を簡単に定義できるとしたらどうでしょうか。


それが全てを変える!


このようなビューは分析ビューです。また、APEXで使用するのも簡単です。また、APEXと同様に、分析ビューはOracle Databaseのすべてのエディションに標準(コストなし)機能として含まれています。



分析ビューとは


Oracle Databaseの分析ビューを使用すると、ユーザーは、1つ以上の表に格納されているデータに対して複雑な問合せおよび計算を実行できます。これらのビューは、基礎となるデータに対する上位レベルの抽象化を提供するため、ユーザーはデータにアクセスしてより有意義に分析できます。通常、ビジネス・インテリジェンス・アプリケーションおよびデータ・ウェアハウス・アプリケーションで使用され、単一の表または複数の表が結合されます。


基礎となる一連の表がどれほど複雑であっても、分析ビューでは、事前集計および事前計算済の単一のビューとしてアプリケーションにデータが表示されます。分析ビューには、表、集計(GROUP BY)および計算の間のすべての関係(結合)が埋め込まれます。必要なすべてのAPEXアプリケーションは、必要なフィルタを使用して必要な列を選択することです。


はい、とても簡単です。



マサチューセッツ州ウェルドリル(井戸)データベース


この投稿では、米国の州マサチューセッツで掘削された様々なタイプの井戸に関するデータ(州都のボストンについて聞いたことがあるかもしれません)を表示するAPEXアプリケーションについて説明します。穴あけがはっきりしないかもしれませんが、思ったよりも面白いかもしれません。涼しい地図があります。このアプリケーションを使用して、分析ビューをAPEXとともに使用してデータ内の興味深い観測結果を表示する方法を説明します。


データのソースは、Massachusetts Well Drillingデータベースです。データ・ポータルがあれば、それはよいことです。簡単に検索でき、データをCSVファイルに簡単にダウンロードでき、データは合理的にクリーンです。(一部の例外は明らかです)。海で水を飲むために井戸を掘るの?おそらくそうではありません。CSVファイルは、Data Studioデータ・ロード・ツールを使用してAutonomous Databaseに簡単にロードできます。


データは、日付、場所、正常なタイプおよび実行される作業によって異なります。各行は、新しい井戸や既存の井戸の深化など、井戸で作業が実行されたインスタンスです。行には緯度と経度が含まれ、マップ上に井戸をプロットできます。


Oracle Autonomous Databaseにロードされたら、比較的小規模なデータ準備が必要でした。MONTH列およびYEAR列は、DATE_COMPLETED列から導出されました。深度、緯度および経度に関連する列の0の値はNULLで置換されました。(欠落データにはNULLと0が混在している可能性があります)。NULLと0の要因は平均に大きく異なるため、考えやすく一貫して使用することが最善です。)また、緯度と経度の値は、マサチューセッツの外部にあるため、値が間違っていた場合はNULLに置き換えられました。



アプリケーション要件


このアプリケーションの目的は、エンドユーザーが様々なタイプの井戸の分布パターンを様々な期間にわたって可視化し、タイプ別、実行された作業別、および様々な集計レベルおよび異なる期間にわたる適切な場所別にトレンドを表示できるようにすることです。ユーザーは、任意のディメンションでフィルタし、時系列変換を適用できます。


このアプリケーションを、Massachusetts Well Data Webページの拡張機能として想像してください。


アプリケーションによって生成されたSQL


APEXアプリケーション開発者は、リスト・ボックスや表、チャート、マップなどの項目にデータを移入するために、SQL文またはSQL問合せを戻すPL/SQLファンクション本体を提供する必要があることを知っています。このアプリケーションは、SQL問合せとPL/SQLファンクション本体の両方を使用して、SQL問合せをアイテムおよびリージョンのソースとして返します。アプリケーションには、各データ・ビジュアライゼーションの移入に使用されるSQLが表示されます。SQLは、他のアプリケーションで再利用できる繰返し可能なパターンに従うことがわかります。


国内Wellsの分布


家庭用井戸は飲料水を供給している。家庭用井戸の分布と頻度は、都市や町が飲料水を供給しているかどうかによって決まります。世界の多くの地域と同様に、都市や町はより密集した地域で飲料水を供給し、より人口が少ない地域では井戸が使用されている。


このパターンは、マサチューセッツ州東部に近いところで見られます。ボストン市と密集した周辺の町は、大きな水域(MWRA)の一部です。この地域には国内の井戸がほとんどないし、人口が多い地域もある。人口が少ない地域では、飲料水に家庭用井戸を使用する傾向があります。パターンは小さいスケールで繰り返されます。市町村や町の中心部にある建物は、市町村用水道設備を使用し、他の地域の建物は井戸を使用している場合があります。


東マサチューセッツ州の住宅地


このアプリケーションでは、ユーザーは期間、適切なタイプ、実行された作業のタイプ、およびすべての町または特定の町、およびメジャーを選択できます。マサチューセッツ州南海岸のすぐ近くには、各国の井戸の場所が見えます。


マサチューセッツ州南海岸の家庭用井戸



3つの問合せテンプレート内の1つのアプリケーション


アプリケーションがどのように構築されているかを見てみましょう。


このアプリケーションの各ページには、2つのメイン・リージョンがあります。1つはデータの選択用で、もう1つはデータの視覚化またはレポート用です。APEXアプリケーションは、ページを使用して構築されます。アプリケーションには、他のページで再利用できるリージョンと項目、およびページ固有のコンテンツがある他のページを含むグローバル・ページ(ページ0)が含まれる場合があります。


このアプリケーションの「ディメンションおよびメジャー」リージョンのすべての項目がグローバル・ページにあります。これらのリージョンには、他のページで選択的に再使用されるデータ選択項目のコレクションが含まれます。たとえば、単一選択または複数選択をサポートする階層のポップアップLOV (値リスト)項目があります。様々な項目で、期間の範囲または特定の期間の選択がサポートされます。


ポップアップ値リスト品目の階層問合せ


各ディメンション・ポップアップLOV項目は、SQL問合せソースを使用して階層ビューから選択します。


階層ビューには、すべての集計レベルで単一の階層の各階層メンバーの行が含まれます。階層ビューには、基礎となる表から階層メンバーのプロパティを戻す列と、レベル名、レベル・キー、親、階層順序、階層の深さなど、メンバーの追加の階層プロパティを持つ列が含まれます。


MEMBER_UNIQUE_NAME列は、メンバーのキー値を返します。構造体は階層の定義方法によって異なりますが、一般的なMEMBER_UNIQUE_NAME値は[レベル名]、&[level_key_value]の形式になります。たとえば、[WELL_TYPE].&[Irrigation]です。MEMBER_CAPTION列は、通常、階層メンバーのわかりやすい値を返すために使用されます(例: 灌漑)。すべての階層には、階層の総計を表すALLレベルの単一の総計値([ALL].[ALL])が含まれます。


このポップアップLOVは、Wellタイプを選択するために使用されます。


Wellタイプ選択


このポップアップLOVのソースはSQL問合せです。この問合せでは、ALLおよびWELL_TYPEレベルの値が選択されます。

SELECT
    member_caption d,
    member_unique_name r
FROM
    p8409_well_type
WHERE
    level_name IN ('ALL','WELL_TYPE')
ORDER BY
    hier_order

各階層のポップアップ値リストでは、同じテンプレートが使用されます。たとえば、これはTown選択の問合せです。もちろん、クエリーはアプリケーションの要件に応じてカスタマイズできます。


この問合せでは、ALLおよびTOWNレベルの値が選択されます。

SELECT
    member_caption,
    member_unique_name
FROM
    p8409_town
WHERE
    level_name in ('ALL','TOWN')
ORDER BY
    hier_order


町の選択


「マップ」リージョンの問合せ


「マップ」リージョンの問合せでは、MEMBER_CAPTION列(階層メンバーのわかりやすい名前)、メンバー・プロパティ(たとえば、LATITUDEとLONGITUDEの井戸)およびメジャーを選択するテンプレートが使用されます。APEX_STRING.SPLIT表関数をINリストとともに使用して、ポップアップLOV階層メンバー・セレクタで複数の選択を処理します。

SELECT
    p8409_town.member_caption AS well_id
    ,p8409_time.member_caption AS time
    ,p8409_well_type.member_caption AS well_type
    ,p8409_work_performed.member_caption AS work_performed
    ,p8409_town.member_caption AS town
    ,p8409_town.latitude AS latitude
    ,p8409_town.longitude AS longitude
    ,NUMBER_OF_WELLS AS my_measure
FROM
    p8409_mass_well_drilling_av
        HIERARCHIES
            (
                p8409_time
                ,p8409_well_type
                ,p8409_work_performed
                ,p8409_town
            )  
WHERE
    p8409_time.level_name = 'YEAR'
    AND p8409_time.member_unique_name BETWEEN :P0_FROM AND :P0_TO
    AND p8409_well_type.member_unique_name IN
       (SELECT column_value
        FROM apex_string.split(p_str => :P0_WELL_TYPE_MS,p_sep => ':'))
    AND p8409_work_performed.member_unique_name IN
       (SELECT column_value FROM apex_string.split(p_str => :P0_WORK_PERFORMED_MS,p_sep => ':'))
    AND (:P0_TOWN_MS = '[ALL].[ALL]' OR p8409_town.parent_unique_name IN
        (SELECT column_value FROM apex_string.split(p_str => :P0_TOWN_MS,p_sep => ':')))
    AND p8409_town.level_name = 'WELL_ID'
    AND p8409_town.latitude IS NOT NULL
    AND p8409_town.longitude  IS NOT NULL

これは、階層列、メンバー・プロパティおよびメジャーの混合を選択する分析ビューの一般的な問合せです。この問合せを上から下まで調査してみましょう。


SELECTリスト


MEMBER_CAPTION列は、階層メンバーのわかりやすい名前を返します。MEMBER_CAPTION列は、常に階層ビューに含まれます。

SELECT
    p8409_town.member_caption AS well_id
    ,p8409_time.member_caption AS time
    ,p8409_well_type.member_caption AS well_type
    ,p8409_work_performed.member_caption AS work_performed
    ,p8409_town.member_caption AS town

LATITUDEとLONGITUDEは井戸の特性です。地図上に井戸をプロットする必要がある。

 ,p8409_town.latitude AS latitude
    ,p8409_town.longitude AS longitude

NUMBER_OF WELLSは選択したメジャーです。これは分析ビューのFACTメジャーで、メジャーがファクト表からマップおよび集計されることを意味します。

,NUMBER_OF_WELLS AS my_measure


FROM句


問合せは、分析ビューP8409_MASS_WELL_DRILLING_AVから選択されます。P8509は、分析ビュー・オブジェクトを追跡するために使用する接頭辞です。グループ化メカニズムと同じプリフィクスを持つすべてのオブジェクト(属性ディメンション、階層、分析ビュー、場合によっては表またはビュー)にプリフィクスを付けます。

FROM
    p8409_mass_well_drilling_av

HIERARCHIES句には、問合せで参照されている階層が含まれます。結合とGROUP BYは問合せで使用されないことに注意してください。これは、集計と結合が分析ビューと階層の定義に含まれているためです。

HIERARCHIES
            (
                p8409_time
                ,p8409_well_type
                ,p8409_work_performed
                ,p8409_town
            )


WHERE句


このアプリケーションでは、ユーザーは年の範囲を選択できます。時間階層(P8409_TIME)には、DATE_COMPLETED、MONTHおよびYEARレベルのデータが含まれます。フィルタはBETWEENを使用するため、日または月が混在しないように、問合せはYEARレベルにフィルタされます。(BETWEENは、VARCHARをアルファベット順にソートします。)

WHERE
    p8409_time.member_unique_name BETWEEN :P0_FROM AND :P0_TO
    AND p8409_time.level_name = 'YEAR'

「Well Type」および「Work Performed」は、レベル・キー値であるMEMBER_UNIQUE_NAME列のINリストを使用してフィルタされます。レベル・キー値は階層内で(レベル間で)一意であるため、LEVEL_NAMEに追加のフィルタは必要ありません。


アプリケーションでは、一部の階層で複数の選択が可能です。たとえば、坑井タイプ階層の場合です。



複数のWellタイプが選択されました


APEXアイテムはレベル・キー値を保持しています:

[WELL_TYPE].&[Domestic]:[WELL_TYPE].&[Irrigation]

APEX_STRING.SPLITは、ポップアップLOV階層メンバー・セレクタに使用されるAPEXアイテムによって返される値のデリミタ付きリストを行として返す表関数で、INリストで使用できます(すべての問合せでAPEX_STRING.SPLITを使用できます)。問合せを発行するアプリケーションをAPEXで記述する必要はありません。優れたツールです)。

AND p8409_well_type.member_unique_name IN
        (SELECT column_value
         FROM apex_string.split(p_str => :P0_WELL_TYPE_MS,p_sep => ':'))

町の階層(8409_TOWN)には、レベルALL、TOWNおよびWELL_IDが含まれます。それぞれが町内に存在するため、WELL_ID CHILD OF TOWNの階層があります。マップ・リージョンでは、マップ上に適切な場所をプロットできるように、緯度と経度を持つ個々の井戸の行が必要です。


ユーザーは、すべての町または1つ以上の町を選択できます。町階層のフィルタでは、階層ビューの3つの固有の機能(ALLメンバー、PARENT_UNIQUE_NAME列およびLEVEL_NAME列)を利用します。

AND (:P0_TOWN_MS = '[ALL].[ALL]'
         OR p8409_town.parent_unique_name IN
          (SELECT column_value
             FROM apex_string.split(p_str => :P0_TOWN_MS,p_sep => ':')))
    AND p8409_town.level_name = 'WELL_ID'

ユーザーが「すべての町」を選択した場合(キー値は[ALL].[ALL])、フィルタは次と評価されます。

('[ALL].[ALL]' = '[ALL].[ALL]' OR  p8409_town.parent_unique_name = '[ALL].[ALL]')

これにより、すべての井戸が選択されます。


1つ以上の町(たとえば、EASTHAM)を選択した場合、フィルタの評価先。

('[TOWN].[EASTHAM]' = '[ALL].[ALL]'
  OR p8409_town.parent_unique_name IN ('[TOWN].[EASTHAM]')

この結果、イーストハムの町内の井戸が選定されます。


フィルタP8409_TOWN.LEVEL_NAME = 'WELL_ID'はすべての町の場合に必要です。ALLの行がない場合、TOWNおよびWELL_IDレベルが返されます。


これは少し複雑に思えるかもしれませんが、実際はそうではありません。階層がどのように機能するかを確認すると、それが明確になります。Oracle LiveSQL Tutorial Querying Analytic Views - Getting Startedは、分析ビューの問合せについて学習する最適な場所です。


分析ビューでは、NUMBER_OF_WELLSの値は常に1つ(行ごとに1つ)です。ヒートマップには井戸の濃度のみが表示されます。


ヒート・マップとしてのイーストハムのウェルズ数



メジャー選択の変更


平均の深さを表示するには、ユーザーが「平均合計深さ」メジャーを選択します。問合せでは、Wellの数で使用したものと同じ問合せテンプレートを使用して、そのメジャーが選択されます。選択したメジャーは、メジャー・ポップアップLOVアイテム(PO_MEASURE)のバインド変数を使用して置換されます。


それほど簡単にはならない。

SELECT
    p8409_town.member_caption AS well_id
    ,p8409_time.member_caption AS time
    ,p8409_well_type.member_caption AS well_type
    ,p8409_work_performed.member_caption AS work_performed
    ,p8409_town.member_caption AS town
    ,p8409_town.latitude AS latitude
    ,p8409_town.longitude AS longitude
    ,AVG_TOTAL_DEPTH AS my_measure
FROM
    p8409_mass_well_drilling_av
        HIERARCHIES
            (
                p8409_time
                ,p8409_well_type
                ,p8409_work_performed
                ,p8409_town
            )
WHERE
    p8409_time.level_name = 'YEAR'
    AND p8409_time.member_unique_name BETWEEN :P0_FROM AND :P0_TO
    AND p8409_well_type.member_unique_name IN
        (SELECT column_value FROM apex_string.split(p_str => :P0_WELL_TYPE_MS,p_sep => ':'))
    AND p8409_work_performed.member_unique_name IN
        (SELECT column_value FROM apex_string.split(p_str => :P0_WORK_PERFORMED_MS,p_sep => ':'))
    AND (:P0_TOWN_MS = '[ALL].[ALL]' OR p8409_town.parent_unique_name IN
        (SELECT column_value FROM apex_string.split(p_str => :P0_TOWN_MS,p_sep => ':')))
    AND p8409_town.level_name = 'WELL_ID'
    AND p8409_town.latitude IS NOT NULL
    AND p8409_town.longitude IS NOT NULL

ここでは、全深度の変動を観察できます。


イーストハムの平均坑井深さ合計


国内ウェルズってどんなに深い?


国内の井戸の深さはどのくらいですか。井戸がどこにいるか、井戸がいつ掘削されたかによって決まる。マサチューセッツ州の新国内井戸は、過去5年間で平均約350フィート。


過去5年間の国内新井戸の平均深度


このページの「Measures (メジャー)」選択には、メジャーを変換するためのパラメータが含まれていることに注意してください。このページでは、選択したメジャーを実績値、前期間の変更および前期間の変化率として表示することがサポートされています。ユーザーは、移動平均を使用してデータを平滑化することもできます。


米国西部の州とは異なり、水は米国北東部では比較的豊富で、それでも井戸は時間の経過とともに深く掘られている。時間選択を1963年から2022年まで延長し、10年移動平均を使用してデータをスムーズにすると、国内平均のウェルデプス度が安定的に増加することが分かります。


国内新井戸の平均総深度10年移動平均


また、前年比における平均の井戸深度の変化も確認できます。


MWD前期間平均坑井深度変化率


前年比の変化は「うるさい」ように見えるため、5年間の移動平均を使用して平滑化できます。傾向はより明確になります。


5年間の移動平均、前年比は、すべての都市および町の総井戸の深さに変化します。


各階層の集計レベルで、Average Well Depthの前期間の変化率の5年間の移動平均の問合せを生成するには、何が必要ですか。


分析ビューを使用すると、簡単になります。次の2つの実装パスがあります。


  • 分析ビューで計算済メジャーを定義し、マップで使用されるものと同じような問合せを使用して、他のメジャーと同じように選択します。
  • SELECT文でその場で計算済メジャーを定義します。


計算式はどちらのアプローチでも同じで、計算が定義される場所の違いにすぎません。前年変化率の5年間の移動平均の式は、次のとおりです。

AVG(
      LAG_DIFF(AVG_TOTAL_DEPTH) OVER (HIERARCHY p8409_time OFFSET 1)
   OVER (HIERARCHY p8409_time BETWEEN 10 PRECEDING AND 0 FOLLOWING WITHIN LEVEL)

この式は、移動平均(AVG)内の前期間(LAG_DIFF)からの変更をネストします。


分析ビュー式は、列ではなく階層やレベルなどのモデルの要素を参照することに注意してください。LAGウィンドウ関数を使用して表から選択する問合せとは異なり、分析ビュー式はすべての問合せで同じです。これは、APEXアプリケーション開発者にとって大きなメリットです。


このアプリケーションでは、ユーザーは各ベース・メジャーに変換を適用できます。分析ビューで各置換が計算済メジャーとして定義されている場合は、36の計算済メジャーが必要になります(4つのベース・メジャー* 3つの時系列計算* 3つの事前定義されたスムージング期間)。これは、ユーザーが前の期間の数を選択することを許可するわけではありません。


また、計算をその場で表現することもできます。この方法では、ユーザーはスムージング期間の数と、前の期間のオフセット(前の期間の数)を選択することもできます。これは、APEX開発者が、分析ビューのメジャーからのみ選択できるビジネス・インテリジェンス・ツールよりも優位であるケースです。APEX開発者はSQLを完全に制御できるため、その場で計算されたメジャーを作成できます。


このアプリケーションはオンザフライ方式を使用します。


この形式の問合せでは、USING句とADD MEASURESを使用します。それ以外の場合は、マップ・リージョンで使用される問合せと同じです。必要な数の計算メジャーをADD MEASURESに含めることができます。式は前述の例と同じです。

SELECT
    p8409_town.member_caption AS town
    ,p8409_time.year
    ,p8409_well_type.member_caption as well_type
    ,p8409_work_performed.member_caption as work_performed
    ,measure
  FROM ANALYTIC VIEW (
    USING p8409_mass_well_drilling_av
        HIERARCHIES
            (
                p8409_time
                ,p8409_well_type
                ,p8409_work_performed
                ,p8409_town
            )
        ADD MEASURES (
            measure AS (AVG(
                         LAG_DIFF_PERCENT(AVG_TOTAL_DEPTH) OVER (HIERARCHY p8409_time OFFSET 1)
                         ) OVER (HIERARCHY p8409_time BETWEEN 5 PRECEDING AND 0 FOLLOWING WITHIN LEVEL))
            )
        )
WHERE
    p8409_time.level_name = 'YEAR'
    AND p8409_time.member_unique_name BETWEEN :P0_FROM AND :P0_TO 
    AND p8409_well_type.member_unique_name IN
        (SELECT column_value FROM apex_string.split(p_str => :P0_WELL_TYPE_MS,p_sep => ':'))
    AND p8409_work_performed.member_unique_name = :P0_WORK_PERFORMED
    AND p8409_town.member_unique_name = :P0_TOWN
ORDER BY 
    p8409_time.hier_order



坑井の拡張機能


井戸はより深く掘り下げて生産を改善していると考えられます。東中央マサチューセッツでは、深化・加水分解によって強化された井戸を観察し、国内的井戸の強化が集中していることを確認しました。


国内井戸の強化


深化・水分解した井戸の5年間の移動平均を調べることで、うまく機能強化の傾向を把握できます。


強化された家庭用井戸の5年間の移動平均


強化された家庭用井戸の5年間の移動平均


問合せはどのようになりますか。これは、ADD MEASURESのメジャーが異なる同じテンプレートです。

SELECT
        p8409_town.member_caption AS well_id
        ,p8409_time.year
        ,p8409_well_type.member_caption as well_type
        ,p8409_work_performed.member_caption as work_performed
        ,p8409_town.town AS town 
        ,measure
  FROM ANALYTIC VIEW (
    USING p8409_mass_well_drilling_av
        HIERARCHIES
            (
                p8409_time
                ,p8409_well_type
                ,p8409_work_performed
                ,p8409_town
            )
        ADD MEASURES (
            measure AS (AVG(
                            NUMBER_OF_WELLS
                         ) OVER (HIERARCHY p8409_time BETWEEN 5 PRECEDING AND 0 FOLLOWING WITHIN LEVEL))
            )
        )
WHERE
    p8409_time.level_name = 'YEAR'
    AND p8409_time.member_unique_name BETWEEN :P0_FROM AND :P0_TO 
    AND p8409_well_type.member_unique_name = :P0_WELL_TYPE
    AND p8409_work_performed.member_unique_name IN (SELECT column_value FROM apex_string.split(p_str => :P0_WORK_PERFORMED_MS,p_sep => ':'))
    AND p8409_town.member_unique_name = :P0_TOWN
ORDER BY 
    p8409_time.hier_order



坑井タイプ別配分パターン


井戸タイプごとに異なる分布パターンがあります。灌漑の井戸は、東マサチューセッツ州で最も重い濃度を持つ国内井戸の反対のパターンを示します。


灌漑坑井の分布


いくつか考えられます。


  • 東マサチューセッツ州とケープコッドは、美しい造園のような素敵な家を持つ他の地域や人々よりも裕福である傾向があり、おそらく彼らは彼らの造園を灌漑することを好みます。
  • 暑い夏の月の間は、灌漑が必要な時のみの水量に制限があることがよくあります。井戸は良い解決策かもしれません。
  • 家庭用井戸の人は、造園に水を使うこともできるので(井戸が十分に生産的だとすれば)、灌漑に精通している可能性は低いです。


このデータ・セットは実際にはこれらの質問に回答しませんが、さらに調査を促す可能性のある興味深い配分パターンを指摘します。


この問合せの問合せはどのようになりますか。他の人と同じように:)

SELECT
        p8409_town.member_caption AS well_id
        ,p8409_time.member_caption AS time
        ,p8409_well_type.member_caption AS well_type
        ,p8409_work_performed.member_caption AS work_performed
        ,p8409_town.member_caption AS town
        ,p8409_town.latitude AS latitude
        ,p8409_town.longitude AS longitude
        ,NUMBER_OF_WELLS AS my_measure
FROM
        p8409_mass_well_drilling_av
                HIERARCHIES
                        (
                                p8409_time
                                ,p8409_well_type
                                ,p8409_work_performed
                                ,p8409_town
                        )    
WHERE
        p8409_time.level_name = 'YEAR'
        AND p8409_time.member_unique_name BETWEEN :P0_FROM AND :P0_TO
        AND p8409_well_type.member_unique_name IN   
                (SELECT column_value FROM apex_string.split(p_str => :P0_WELL_TYPE_MS,p_sep => ':'))
        AND p8409_work_performed.member_unique_name IN   
                (SELECT column_value FROM apex_string.split(p_str => :P0_WORK_PERFORMED_MS,p_sep => ':'))
        AND (:P0_TOWN_MS = '[ALL].[ALL]' OR p8409_town.parent_unique_name IN   
                (SELECT column_value FROM apex_string.split(p_str => :P0_TOWN_MS,p_sep => ':')))
        AND p8409_town.level_name = 'WELL_ID'
        AND p8409_town.latitude IS NOT NULL
        AND p8409_town.longitude    IS NOT NULL


一定期間における新規灌漑坑井の分布


データは、灌漑用井戸がいつ掘削されたかを私たちに知らせます。次のチャートは、1980年から2022年にかけて新しい灌漑井を調査しました。


1980年から2022年までの新しい灌漑井戸


合理的な仮説は、人々がもっとお金を稼いでいるときに、素敵な家や風景に、より多くのお金を使うということである。ここでは、グレーターボストンのハイテクとバイオテクノロジーの台頭と、景観の優れたドリルとの相関関係を示しています。dot.comバブル(2000)に至る急激な上昇と、バブルのポップ後に急激な減少が見られます。2008年の金融危機の後、急激な減少が見られ、その後は回復が遅いです。2020年と2021年の急増は、コロナウイルスに在宅し、庭園を売り渡す人々によって引き起こされた可能性があります。


前期間2年移動平均からの変化があるチャートは、これを集中させるのに役立ちます。ピークと谷は株式市場の指標に似ています。また、データは仮説を否定するものでもありません。決定します。新しい質問をする際に役立ちます。


1980年から2022年までの新しい灌漑井戸、前期間2年移動 averageCaption


問合せはどのようになりますか。もう一回。

SELECT
    p8409_town.member_caption AS town
    ,p8409_time.year
    ,p8409_well_type.member_caption as well_type
    ,p8409_work_performed.member_caption as work_performed
    ,measure
  FROM ANALYTIC VIEW (
    USING p8409_mass_well_drilling_av
        HIERARCHIES
            (
                p8409_time
                ,p8409_well_type
                ,p8409_work_performed
                ,p8409_town
            )
        ADD MEASURES (
            measure AS (AVG(
                            LAG_DIFF(NUMBER_OF_WELLS) OVER (HIERARCHY p8409_time OFFSET 1)
                         ) OVER (HIERARCHY p8409_time BETWEEN 2 PRECEDING AND 0 FOLLOWING WITHIN LEVEL))
            )
        )
WHERE
    p8409_time.level_name = 'YEAR'
    AND p8409_time.member_unique_name BETWEEN :P0_FROM AND :P0_TO 
    AND p8409_well_type.member_unique_name IN
        (SELECT column_value FROM apex_string.split(p_str => :P0_WELL_TYPE_MS,p_sep => ':'))
    AND p8409_work_performed.member_unique_name = :P0_WORK_PERFORMED
    AND p8409_town.member_unique_name = :P0_TOWN
ORDER BY 
    p8409_time.hier_order



まとめ


この投稿を初めて読んだとき、「なぜMassachusettSからの適切なドリル・データを使用して投稿を書くのか」と疑問に思っていたかもしれません。それにはどんな可能性がおもしろいでしょう。また、Oracle APEXを使用してこのデータを理解する方法を教えてください。


興味深い観察が行われたことと、このようなアプリケーションの構築が非常に簡単であることをご了承ください。いいえ。フル機能のビジネス・インテリジェンス・ツールに代わるものではありませんが、APEXと分析ビューは、非常に強力な組み合わせであり、特定のタイプのアプリケーションに最適なプラットフォームです。


Oracle Databaseを使用している場合は、このようなアプリケーションの構築に必要なものがすべてすでにあることを忘れないでください。

自分でお試しください


Massachusetts Well Drillingアプリケーションを使用して、データを自由に確認してください。このアプリケーションはOracle Autonomousで実行されています。



詳細


Oracle Autonomous Databaseについて学習します。Autonomous Database Data WarehouseおよびAutonomous Database for Application Expressがあることをご存知でしたか。Autonomous DatabaseはAlways Freeで使用可能であることをご存じでしたか。このようなアプリケーションを無料で構築できます。


Oracle Application Expressを今すぐapex.oracle.comから始めましょう。これは初心者や経験豊富なユーザーにとって素晴らしい場所です。


Oracle Live SQLでのSQLを使用した分析ビューの作成および問合せについて学習します。分析ビューには、12を超えるチュートリアルがあります。


コメント

このブログの人気の投稿

Oracle APEXのInteractive Gridで、Oracle Formsと比較して、重複行の検証を制御/通過させる方法 (2022/07/21)

Oracle APEX 24.1の一般提供の発表 (2024/06/17)

Oracle Cloudのデータベースをオブジェクト・ストレージにバックアップする3つの方法 (2021/12/13)