Quantcast
Channel: SQL.ru: OLAP и DWH
Viewing all articles
Browse latest Browse all 1167

ssas и медиана

$
0
0
Всем привет.
На хабре есть статья как рассчитывать медидиану. https://habrahabr.ru/post/153869/

Я переписал предлагаемый код под свой куб
//Количество значений в кортеже 
CREATE MEMBER CURRENTCUBE.[measures].[AdvCount] 
 AS Count(NonEmpty([Номенклатура].[Product Key].members,[Measures].[Закупка Sum LT]) as AdvSet), 
VISIBLE = 0  ;       

//Поиск значения находящегося посередине кортежа
CREATE MEMBER CURRENTCUBE.[Measures].[MedianReal]  AS ([measures].[AdvCount]-1) * 50 / 100, 
VISIBLE = 0;       
CREATE MEMBER CURRENTCUBE.[Measures].[MedianInt]  AS Int([Measures].[MedianReal]), 
VISIBLE = 0;       
CREATE MEMBER CURRENTCUBE.[Measures].[MedianFrac]  AS [Measures].[MedianReal]- [Measures].[MedianInt], 
VISIBLE = 0;       

//Расчет медианы
CREATE MEMBER CURRENTCUBE.[Measures].[MedianLow]
 AS (NonEmpty([Номенклатура].[Product Key].members,[Measures].[Закупка Sum LT]).Item([Measures].[MedianInt]).Item(0),[Measures].[Закупка Sum LT]), 
VISIBLE = 0;       
CREATE MEMBER CURRENTCUBE.[Measures].[MedianHigh]
 AS (NonEmpty([Номенклатура].[Product Key].members,[Measures].[Закупка Sum LT]).Item([Measures].[MedianInt] + 1).Item(0),[Measures].[Закупка Sum LT]), 
VISIBLE = 0;       
CREATE MEMBER CURRENTCUBE.[Measures].[Salary Median]
 AS ([Measures].[MedianLow] * [Measures].[MedianFrac])
 +([Measures].[MedianHigh] * (1 - [Measures].[MedianFrac])), 

VISIBLE = 1 ;   



На мой взгляд алгоритм не работает. Неправильно определяется порядковый номер медианного элемента, Item([Measures].[MedianInt]). Все из за того, что данные не отсортированы.

Может кто знает, как накинуть сортировку и у вас есть другой алгоритм?

Viewing all articles
Browse latest Browse all 1167

Trending Articles