2017-05-23 15 views
0

私は本当にMDXの新機能ですが、過去2日間は答えを探していましたが失敗しました。だから私はあなたの助けと忍耐を大変感謝します。複数の計算フィルタをMDXに追加

複数のディメンションのフィルタをキューブに照会しようとしていますが、thisまたはthisのような多くの類似の質問が既に存在することがわかりました。

私が探している特定のコンテンツを指定する代わりに、特定の文字列で始まるすべてのレコードを取得するフィルタを設定しようとしています。この場合、フィルタにはleft機能が必要です(つまり、フィルタを計算しますか?)が、コードにうまくブレンドできません。

私の失敗コードが

Select Non Empty ([Measures].[Sales]) ON 0 
FROM [Cube_Name] 
WHERE 
(
FILTER 
(
[Customer].[CustomerID].Members, Left([Customer].[CustomerID].CurrentMember.Name,4)="ABCD"), 
[Product].[ProductID].Members, Left([Product].[ProductID].CurrentMember.Name,3)="EFG") 
) 
) 

(私の裁判は、最後の答えhereに基づいています。)(2つのフィルタはAND関係にする必要があります)私もいくつか存在することを読ん

このようなものですCROSSJOINWITHAGGREGATEまたはサブSELECTのような回避策がありますが、1)内部に条件を組み込む方法はありません。 2)パフォーマンス(私はCROSSJOINが遅くなることを聞いた)。

ここで言及する必要があるかどうかはわかりませんが、実際にはADOMB.Cellsetオブジェクトを使用してExcel VBAからMDXを実装しています。 Cellset.Items(0)の下に実装したクエリの総計のみを表示します(これ以上のアイテムはありません)。

ありがとうございました!次の2つのフィルターに2セットを分割する必要が

答えて

0

Select 
Non Empty [Measures].[Sales] on 0 
From [Cube_Name] 
Where 
(
    Filter(
     [Customer].[CustomerID].[CustomerID].Members, 
     Left(
      [Customer].[CustomerID].CurrentMember.Name, 
      4 
     ) = "ABCD" 
    ), 
    Filter(
     [Product].[ProductID].[ProductID].Members, 
     Left(
      [Product].[ProductID].CurrentMember.Name, 
      3 
     ) = "EFG" 
    ) 
) 
+0

はあなたにDanyloをありがとう!あなたのコードは完璧に動作します!フィルタにOR句を組み込む方法についてもう一つ教えていただけますか? Iは 'フィルタ( [製品]。[商品コード] [商品コード] .Members、 左( [製品]。[商品コード] .CurrentMember.Name、 3)に第二のフィルタを変更しようとしました= "EFG" OR 左( [製品]。[商品コード] .CurrentMember.Name、 3)= "HIJ" ) ' が、それは動作しません。ありがとうございました! – Aster37a

+0

申し訳ありませんOR接続が動作しているようです。それはエラーメッセージの結果となる誤植の1つに過ぎません。タイムリーで正確な回答をいただき、ありがとうございます。 – Aster37a

+0

お忘れなく、お答えします。 –

関連する問題