2016-10-03 4 views
0

ssasキューブのクエリに役立つ必要があります。MDXクエリの複雑さ

たとえば、私は:

1)寸法表の契約。表にはcontract_id、customer_id、customer_typeという列があります。ある顧客は、いくつかの契約を有していてもよく、contract_idは一意であるため、例えば、データは次のようになります。

enter image description here

2)ファクトテーブル取引。テーブルには、transaction_id、contract_id、date、amountの各列があります。 1つの契約には複数のトランザクション(ディメンションとファクトテーブルarがcontract_idでリンクされている)があり、transacion_idは一意です。したがって、たとえば、データが次のようになります。

enter image description here

私は(トランザクションを持っている)アクティブな取得したいとパッシブ(トランザクションを持たない)の顧客は、顧客のタイプによって数えます。助けのための

enter image description here

感謝。

+0

「エレガント」より多くの何かを探して、方法かもしれないが、私は、当社が指定したサンプルとアクティブ顧客を持つことができる方法を理解していない...私はそこに2パッシブを見ると、 0アクティブ。 –

+0

申し訳ありませんが、悪い例です。私はその記事を編集した。 – NoWayOut

+0

あなたはどんなmdxを試みましたか? – whytheq

答えて

0

これは申し訳

with c as (
    select distinct 
      c.customer_type, 
      c.customer_id, 
      case when exists (
          select null 
          from transactions t 
          where t.contract_id = c.contract_id 
          --and t.[date] < @parameterx 
          --and t.[date] > @parametery) 
      then 1 else 0 end as contract_exists 
from customers c 
) 
select 
    customer_type, 
    sum(case when contract_exists = 1 then 1 else 0 end), 
    sum(case when contract_exists = 0 then 1 else 0 end) 
from c 
group by customer_type 
+0

はい。しかし、パラメータ取引日を取引日から、取引日を?追加のフィールドを持つディメンションテーブルを追加せずに期待した結果を得ることはできますか? – NoWayOut

+0

これらのパラメータは 'select null from transactions ...'部分の 'where'節に追加することができます。 –

+0

しかし、ポストタイトルではmdxを使ってキューブからクエリを行い、そのクエリを後でssrsで使いたいとしています。すでにフィルタリングされたデータでキューブを生成することをお勧めしますか? – NoWayOut