2

我一直在努力创建一个 kpi,将特定日期的客户排名与前一天进行比较。反过来,您将能够查看该客户的排名是上升还是下降,无论列表是由什么生成的。在我的情况下,它们是按收入排序的。

我可以很容易地通过排名功能对我的客户进行排名并提供报告,但是在创建跨天比较这些排名的 kpi 时,我正在努力弄清楚应该如何解决这个问题。排名本身不是作为数据存储的东西,它是我需要通过 rank 函数动态创建的东西。

这是我用来创建初始起始报告的 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 中的前一天进行比较。所以,开始我正在努力打破这个查询。我创建了一个预先计算的集合和预先计算的成员来帮助我更轻松地做到这一点。现在我只是想弄清楚如何按一天创建这个集合和成员,然后我至少可以在一天和下一天之间进行比较。

2012 年 1 月 26 日更新:好的,我在这方面走得更远,但我仍然无法将排名拉入我的查询,下面的查询中排名为空。希望有人能看到这个查询的问题。

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 值中比较两者......

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 回答