2

特定の日付の顧客のランクを前日と比較するkpiの作成に取り組んでいます。次に、リストが生成されたものに関して、その顧客のランクが上がったか下がったかを確認できます。私の状況では、それらは収益順に並べられています。

ランク関数を使用して顧客を簡単にランク付けしてレポートを提供することはできますが、これらのランクを日ごとに比較するkpiを作成する場合、これにどのように取り組むべきかを理解するのに苦労しています。ランク自体はデータとして保存されるものではなく、ランク関数を使用してその場で作成する必要があるものです。

これは、日付スプライスなしで顧客のランクを提供する最初の開始レポートを作成するために使用しているmdxクエリの例です。

WITH SET [RevRank] AS
ORDER (
    [Customer].[Customer Id].CHILDREN ,
    [Measures].[Revenue], BDESC)  
  MEMBER [Measures].[RANKRevenue] AS RANK([Customer].[Customer Id].CurrentMember, [RevRank] )

SELECT NON EMPTY { [Measures].[Revenue], [Measures].[Fact Order Count], [Measures].[RANKRevenue] } ON COLUMNS, 
  NON EMPTY TopCount( { ([RevRank] ) } , 100, [Measures].[Revenue]) ON ROWS 
FROM [DW] 

これから、特定の日付(日)でスプライスし、そのランクをkpi内の前日と比較しようとしています。それで、私は最初にこのクエリを分割することに取り組んでいます。これをより簡単に行うために、事前に計算されたセットと事前に計算されたメンバーを作成しました。今、私はこのセットとメンバーを1日で作成する方法を理解しようとしています。そうすれば、少なくとも1日と次の日を比較することができます。

2012年1月26日更新:わかりました。これについては少し先に進んでいますが、ランクをクエリに取り込む際に問題が発生しています。以下のクエリでは、ランキングがnullになっています。うまくいけば、誰かがこのクエリの問題を見ることができます。

WITH MEMBER  [Measures].[PrevDayRevenue] AS
( [Measures].[Revenue], ParallelPeriod ([Date Link].[PK Date].[PK Date],1))
SET [RevRankPrevOrder] AS
ORDER (
   [Customer].[Customer Id].Members ,
   [Measures].[PrevDayRevenue],
   BDESC)
MEMBER [Measures].[RANKRevenuePrevOrder] AS RANK([Customer].CurrentMember, [RevRankPrevOrder])
SET [RevRankCurrOrder] AS
ORDER (
   [Customer].[Customer Id].Members ,
   [Measures].[Revenue],
   BDESC)
MEMBER [Measures].[RANKRevenueCurrOrder] AS RANK([Customer].CurrentMember, [RevRankCurrOrder])

SELECT NON EMPTY { [Measures].[Revenue],  [Measures].[PrevDayRevenue], [Measures].[RANKRevenuePrevOrder], [Measures].[RANKRevenueCurrOrder] } ON COLUMNS,
NON EMPTY { ( [RevRankCurrOrder] ) } ON ROWS 
FROM [DW] 
WHERE {[Date Link].[PK Date].&[2012-01-08T00:00:00]}
4

2 に答える 2

1

ParallelPeriod関数を使用して、前日のランクを計算できます。これもその場で行う必要があります。

次に、KPI値の2つを比較できます...

CASE
    WHEN [Customer Rank Yesterday] - [Customer Rank Today] > 0 THEN 1
    WHEN [Customer Rank Yesterday] - [Customer Rank Today] = 0 THEN 0
    ELSE -1
END
于 2012-01-25T21:30:07.880 に答える
0

これが私の完成したクエリです。これが他の誰かに役立つことを願っています。:

WITH MEMBER  [Measures].[PrevDayRevenue] AS
( [Measures].[Revenue], ParallelPeriod ([Date Link].[PK Date].[PK Date],1))

SET [RevRankPrevOrder] AS
ORDER (
   [Customer].[Customer Id].CHILDREN ,
   [Measures].[PrevDayRevenue],
   BDESC)

MEMBER [Measures].[RANKRevenuePrevOrder] AS 
    RANK(
    [Customer].[Customer Id].CurrentMember,
    [RevRankPrevOrder])

SET [RevRankCurrOrder] AS
ORDER (
   [Customer].[Customer Id].CHILDREN,
   [Measures].[Revenue],
   BDESC)

MEMBER [Measures].[RANKRevenueCurrOrder] AS RANK([Customer].[Customer Id].CurrentMember, [RevRankCurrOrder])

SELECT NON EMPTY { [Measures].[Revenue],  [Measures].[PrevDayRevenue], [Measures].[RANKRevenuePrevOrder], [Measures].[RANKRevenueCurrOrder]  } ON COLUMNS,
NON EMPTY { ( [RevRankCurrOrder] ) } ON ROWS 
FROM [DW] 
WHERE {[Date Link].[PK Date].&[2012-01-10T00:00:00]}
于 2012-01-26T20:21:38.987 に答える