0

私のデータは次のようになります。

ID                                   |PersonID  |CompanyID  |DateID  |Throughput |AmountType
33F467AC-F35B-4F24-A05B-FC35CF005981 |7         |53         |200802  |3          |0
04EE0FF0-511D-48F5-AA58-7600B3A69695 |18        |4          |201309  |5          |0
AB058AA5-6228-4E7C-9469-55827A5A34C3 |25        |69         |201108  |266        |0

約100万行あります。列名 *ID は他のテーブルを参照するため、ディメンションとして使用できます。

列スループットをメジャーとして、残りをディメンションとして持つ OLAP キューブがあります。

スループット メジャーの四分位数 1 と 3 を計算したいと考えています。

私は次のガイドに従いました: https://electrovoid.wordpress.com/2011/06/24/ssas-quartile/ この投稿と一緒に: Analysis Services での四分位数の計算

このMDXクエリを使用しようとしたものから:

WITH
SET selection as ([Dates].[Year].&[2014],[Dates].[Month].&[1])  

SET [NonEmptyIds] AS
 NonEmpty(
      [ThroughputID].[ID].[id]
   *[ThroughputID].[ID].[Id].ALLMEMBERS
  ,
  {[Measures].[Throughput]} * [selection]
 )
 SET [ThroughputData] AS 
ORDER
    (    
        [NonEmptyIds],  
        [Measures].[Throughput], 
        BASC
     )
MEMBER [Measures].[RowCount] AS COUNT (ThroughputData)
MEMBER [Measures].[i25] AS ( .25 *  ( [RowCount] - 1 ) ) + 1
MEMBER [Measures].[i25Lo] AS FIX([i25])   - 1
MEMBER [Measures].[i25Rem] AS ([i25] - FIX([i25]))
MEMBER [Measures].[n25Lo] AS (ThroughputData.Item([i25Lo]), [Throughput])
MEMBER [Measures].[n25Hi] AS (ThroughputData.Item([i25Lo] + 1), [Throughput])
MEMBER [Measures].[Quartile1] AS [n25Lo] + ( [i25Rem] * ( [n25Hi] - [Throughput] ))

SELECT
selection ON 0,
[Measures].[Quartile1]
ON 1
FROM (SELECT [Dates].[Y-H-Q-M].MEMBERS ON 0 FROM [Throughput])

しかし、「クエリ (6, 7) ID 階層が Crossjoin 関数で複数回使用されています。」というメッセージが表示されます。

私は OLAP と MDX にまったく慣れていません。何が間違っているのか、四分位数を正しく計算する方法はありますか?

四分位数を計算するときに、集計値ではなくすべての値を含むセットを取得できるようにするには、ID ディメンションが必要であるとどこかで読みました...

4

1 に答える 1

0

Culprit is the following piece of code:

SET [NonEmptyIds] AS
 NonEmpty(
      [ThroughputID].[ID].[id]
   *[ThroughputID].[ID].[Id].ALLMEMBERS
  ,
  {[Measures].[Throughput]} * [selection]
 )

You can't use the same hierarchy more than once in the cross-join. Here you have used [ThroughputID].[ID] twice. Instead try the below:

SET [NonEmptyIds] AS
 NonEmpty(
      [ThroughputID].[ID].[Id].ALLMEMBERS
  ,
  {[Measures].[Throughput]} * [selection]
 )
于 2015-08-31T10:11:58.233 に答える