Всем привет.
На хабре есть статья как рассчитывать медидиану. https://habrahabr.ru/post/153869/
Я переписал предлагаемый код под свой куб
На мой взгляд алгоритм не работает. Неправильно определяется порядковый номер медианного элемента, Item([Measures].[MedianInt]). Все из за того, что данные не отсортированы.
Может кто знает, как накинуть сортировку и у вас есть другой алгоритм?
На хабре есть статья как рассчитывать медидиану. 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]). Все из за того, что данные не отсортированы.
Может кто знает, как накинуть сортировку и у вас есть другой алгоритм?