SSAS -> KPI 생성 -> 특정 날짜의 고객 순위를 전날과 비교하는 kpi를 만드는 방법은 무엇입니까?
-
13-11-2019 - |
문제
특정 날짜의 고객 순위를 전날과 비교하는 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 내에서 이전 날짜와 비교하려고 합니다.그래서 저는 이 쿼리를 분해하는 작업을 시작하고 있습니다.이 작업을 보다 쉽게 수행할 수 있도록 사전 계산된 세트와 사전 계산된 멤버를 만들었습니다.이제 저는 이 세트와 멤버를 하루 단위로 생성하는 방법을 알아내려고 노력하고 있으며 적어도 하루와 다음 날의 비교를 생성할 수 있습니다.
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]}
해결책
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
. 다른 팁
여기에 완성 된 쿼리가 있으며, 이것은 다른 사람을 돕습니다.:
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]}
.