Oracle Essbase 21c(多次元データベース)のキューブに対してMDX問い合わせ(データを抽出する専用言語)を実行し、その結果をAIDP ノートブック内のSpark DataFrame(データ分析用の表形式データ)として出力します。 次のような場合に使用: ユーザーがEssbase、MDX、Essbase 21c、OLAPキューブ(複数の観点からデータを分析するデータベース形式)について言及している、または キューブデータをSparkに読み込みたいと述べている場合。 認証方式: HTTP Basic認証を使用します。
Run an MDX query against an Oracle Essbase 21c cube and materialize the result as a Spark DataFrame in an AIDP notebook. Use when the user mentions Essbase, MDX, Essbase 21c, OLAP cube, or wants to read cube data into Spark. Auth is HTTP Basic.
aidp-essbase — Essbase 21c MDX → Sparkaidp-epm-cloud を使用すること。pip install requests pandas を実行済みであること。sys.path に追加済みであること。nc -zv <host> 9000 で疎通確認を行うこと)。Essbase 21c REST API は Authorization: Basic base64(user:pass) 形式を要求します。
JET UI は IDCS OAuth にリダイレクトしますが、REST エンドポイントは Basic 認証のみに対応しています。
OCI セッションの JWT を Bearer として渡しても、IDプロバイダーが異なるため認証は失敗します。
ユーザー名には Essbase のサービス管理者アカウント(例: Oacadmin1)を使用してください。
Essbase ホストが AIDP クラスターに信頼されていない内部 CA チェーン(例: cealinfra.com)を使用している場合は、
セッションヘルパーに verify_tls=False を渡してください。
https://ess21c.cealinfra.com/ に対して動作検証済みです。
import os, urllib3
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning) # 内部CA用
from oracle_ai_data_platform_connectors.auth import http_basic_session
from oracle_ai_data_platform_connectors.rest.essbase import (
execute_mdx, mdx_result_to_spark_dataframe,
)
session = http_basic_session(
username=os.environ["ESSBASE_USER"],
password=os.environ["ESSBASE_PASSWORD"],
base_url=os.environ["ESSBASE_BASE_URL"],
verify_tls=False, # 信頼済みパブリックCAの場合は True に設定
)
mdx_query = """
SELECT
{[Measures].[Sales]} ON COLUMNS,
{[Product].[Product Family].Members} ON ROWS
FROM [Sample.Basic]
WHERE ([Year].[2026], [Scenario].[Actual])
"""
response = execute_mdx(
session=session,
base_url=os.environ["ESSBASE_BASE_URL"],
application=os.environ["ESSBASE_APPLICATION"],
cube=os.environ["ESSBASE_CUBE"],
mdx_query=mdx_query,
)
df = mdx_result_to_spark_dataframe(spark, response)
df.show(20)
print("cells:", df.count())
MDX の波括弧 {...} は必須です。
メンバーセットは必ず波括弧で囲んでください。[Product].[Product Family].Members をそのまま記述すると 400 エラーになります。
WHERE 句(スライサー)による POV 指定について。
WHERE で次元を省略した場合、Essbase はその次元のデフォルト値(多くの場合、親メンバー)を使用するため、
集計済みデータや空データが返される可能性があります。
ネットワーク接続について。 Essbase 21c は通常プライベートホスト(ポート 9000 / 9001)上に展開されます。 MDX エラーの調査に入る前に、ネットワーク疎通を必ず確認してください。
#Missing セルについて。
キューブ上の空のインターセクションは文字列リテラル "#Missing" として返されます。
ヘルパーはそのまま保持するため、必要に応じて型変換を行ってください。
空結果でも HTTP 200 が返ります。
MDX がどのデータにもマッチしない場合でも、Essbase は 200 を返します。
HTTP ステータスに依存せず、常に df.count() == 0 で空チェックを行ってください。
aidp-essbase — Essbase 21c MDX → Sparkaidp-epm-cloud.pip install requests pandas.sys.path.nc -zv <host> 9000).Essbase 21c REST API expects Authorization: Basic base64(user:pass). The JET UI redirects to IDCS OAuth, but the REST surface is Basic-only — passing an OCI session JWT as Bearer fails (different identity provider). Username is the Essbase service-admin (e.g. Oacadmin1).
If your Essbase host uses an internal CA chain not trusted by the AIDP cluster (e.g. cealinfra.com), pass verify_tls=False to the session helper. Live-validated against https://ess21c.cealinfra.com/.
import os, urllib3
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning) # internal CA
from oracle_ai_data_platform_connectors.auth import http_basic_session
from oracle_ai_data_platform_connectors.rest.essbase import (
execute_mdx, mdx_result_to_spark_dataframe,
)
session = http_basic_session(
username=os.environ["ESSBASE_USER"],
password=os.environ["ESSBASE_PASSWORD"],
base_url=os.environ["ESSBASE_BASE_URL"],
verify_tls=False, # set True for trusted public CAs
)
mdx_query = """
SELECT
{[Measures].[Sales]} ON COLUMNS,
{[Product].[Product Family].Members} ON ROWS
FROM [Sample.Basic]
WHERE ([Year].[2026], [Scenario].[Actual])
"""
response = execute_mdx(
session=session,
base_url=os.environ["ESSBASE_BASE_URL"],
application=os.environ["ESSBASE_APPLICATION"],
cube=os.environ["ESSBASE_CUBE"],
mdx_query=mdx_query,
)
df = mdx_result_to_spark_dataframe(spark, response)
df.show(20)
print("cells:", df.count())
{...} are required around member sets — bare [Product].[Product Family].Members returns 400.WHERE, Essbase uses dimension defaults, which may be parents (returns aggregated/empty data depending on aggregation).#Missing cells — empty cube intersections return the literal "#Missing". Helper preserves; cast as needed.df.count() == 0 rather than relying on the HTTP status.原文・著作権は Anthropic および各プラグイン作者に帰属します。日本語訳は Claude API による自動翻訳です。