3

まず、SSAS は初めてです。しかし、私が達成したいことはかなり些細なことのようです (私は願っています)。

秒単位で発生するトランザクション データがあります。そして、2 つの時間次元を作成しました。1 つのディメンションは、時間ディメンション ウィザードを使用した標準の時間ディメンションに基づいています。もう 1 つは、1 日の 1 秒ごとの記録を持つ独自のスクリプトによって生成された時間ディメンションです。

ファクト テーブルをディメンションにリンクし、キューブを適切に配置しました。私のファクト データ内の属性の 1 つは価格です。最小値と最大値を使用して、特定の期間に発生した最高価格と最低価格を取得できました。私が取得したいのは、ある期間に発生した最初と最後の価格です。「最初の値」と「最後の値」を使用してみましたが、返されるものが正しくありません。何らかの集計のようです。

たとえば。1 分間の価格が次の場合:

1233、1233.85、1300、1250

最初は 1233 を返し、最後は 1250 を返す必要があります。これは常に機能するはずです。

追加するには、カスタム時間ディメンションのタイプを「時間」に設定しようとしましたが、結果は同じままです。提案をいただければ幸いです。私は基本的に、基になる値と最後の値の最初の値を取得しようとしています。

そこへの道のりの一部を取得するクエリの例:

SELECT NON EMPTY 
     { [Measures].[High]
     , [Measures].[Low]
     , [Measures].[Price Count]
     , [Measures].[Price]
     } ON COLUMNS
     , NON EMPTY
     { [Dim Date].[Year -  Week -  Date].[Date].ALLMEMBERS
     * HEAD( [Dim Time].[Hour - Second].[Second].ALLMEMBERS )
     } ON ROWS 
FROM [Cube]

ここに画像の説明を入力

price count 列に複数のレコードがあることに注意してください。ここから最初のレコードが必要ですが、実際の合計は必要ありません。

4

1 に答える 1

0

時間ディメンションの最初の 1 秒間の価格を取得する新しいメジャーを作成してみてください。たとえば、1 日の最初の 1 秒が必要な場合、行のクロス結合では必要ありませんが、計算メジャー内の [Hour - Second] 階層の最初の 1 秒を取得できます。

with
    member [Measures].[First Price] as
        (head(descendants([Dim Time].[Hour - Second].CurrentMember, Second)), [Measures].[Price])
select
    non empty {
        [Measures].[High],
        [Measures].[Low],
        [Measures].[Price Count],
        [Measures].[Price] 
    } on columns,   
    {
        [Dim Date].[Year -  Week -  Date].[Date].ALLMEMBERS
    } on rows
from
    [Cube]

期間を短くしたい場合、たとえば 1 時間ごとに、次のようにしてみてください。

    non empty {
        [Dim Date].[Year -  Week -  Date].[Date].ALLMEMBERS * [Dim Time].[Hour - Second].[Hour]
    } on rows
于 2012-05-29T08:09:21.723 に答える