2

SQLの構造で可能です

IF <condition>
BEGIN
    <do something> 
END;

内で同様の方法で条件を使用できますMDXか?


編集具体的には、セットが存在するかどうかを何らかの方法でテストし、それをステートメント
の条件として使用したいと思います。IF

IF TheFollowingReturnsRow(
          select * 
          from   $SYSTEM.MDSCHEMA_SETS
          where  SET_NAME = 'Set_Custom' and 
                 CUBE_NAME = 'MyCube') THEN
      <do something>
END IF
4

3 に答える 3

2

MDX は主にクエリ言語を目的としていると思います。そのため、このSELECTステートメントは最も進化したステートメントです。、、またはなどの他のDMLステートメントもありますが、 を除いて、それらはすべてデータを読み取るだけであり、あまり使用されません。UPDATE CUBEDRILLTHROUGHCALLUPDATE

次に、いくつかのDDLコマンドがありますが、これらは既存のキューブまたは現在のクエリ セッションのわずかな適応に限定されており、MDX を使用して新しいキューブまたはディメンションを作成することはできません。キューブの作成やディメンションの変更などを行う SSAS の「実際の DDL コマンド」は、MDX ステートメントではなく、XMLA コマンドです。

GRANTorのようなDCLステートメントREVOKEは、MDX では使用できません。

また、SQL で見られる 4 番目のステートメントのカテゴリである、ステートメント (式ではなく) やループ構造などの手続き型ステートメント、およびサーバー側カーソルについても、MDX はサポートを提供しません。これらのステートメントは、Oracle、SQL Server、DB2、mySQL などの異なる DBMS 間であまり標準化されていない SQL の一部ですが、基本的な DML と DDL は多かれ少なかれ標準化されており、すべての主要なリレーショナル データベースもある程度標準化されています。 ANSI SQL をサポートします。リレーショナル データベースの場合でも、これは主にストアド プロシージャ、トリガー (プロシージャの特殊なケースとして)、およびバッチで使用される後のアドオンであることがよくあります。MySQL は、バージョン 5 でのみ導入されたこれらのステートメントをサポートすることなく、長年にわたって広く使用されていました。ifif

ストアド プロシージャの場合、Analysis Services は COM (非推奨) と .net に依存しており、本格的なプロシージャ機能を備えており、そのオブジェクト モデルを .net または COM で使用できるようにしています。とにかく、ストアド プロシージャのサポートは、1 つのオブジェクトを返す関数 (大量のデータを含む MDX セットと同じくらい複雑な場合があります)、または結果セットを返すプロシージャに限定されます。後者は、他の MDX ステートメントと対話することはできませんが、CALL procname(parameters). また、バッチの場合、MDX は、バッチを呼び出してすべての条件分岐とループを実行するホスティング環境に依存するだけです。

実際、MDX は SQL よりもはるかに制限された用途を持っているため、ある程度、目的によっては非常に優れた「ドメイン固有言語」にすぎませんが、意図されていない領域に多くの弱点があります。

于 2013-08-23T19:37:16.517 に答える
1

可能であれば、そのような条件付きロジックをすべてキューブ計算スクリプトに移動することをお勧めします。そこでは、はるかに効率的なスコープ ステートメントを使用できます。

キューブ計算スクリプトは、サーバー側の SSAS に格納されます。計算やその他のロジックを定義できます。これらは MDX クエリで使用できます。たとえば、新しいメンバーと新しいセットを作成できます。また、必要に応じて、ロード/計算された値をオーバーライドすることもできます。これがどのように機能するかについての簡単な説明ですhttp://www.sqlservergeeks.com/blogs/AmitK/sql-server-bi/65/implementing-calculations-in-ssas-using-mdx-part1

ダンの例を使用すると。次のようなこともできます

SCOPE ([顧客].[顧客の地理].[国].MEMBERS); SCOPE ( [メジャー].[ネット販売金額]); これ = 10; END SCOPE; END SCOPE;

条件が非常に遅い場合でも、そのような変換の後では、妥当な速度で動作するはずです。

于 2013-08-26T11:08:26.883 に答える