Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / OLAP и DWH [игнор отключен] [закрыт для гостей] / ssas и медиана / 3 сообщений из 3, страница 1 из 1
26.07.2016, 13:32
    #39280323
Yagrus2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ssas и медиана
Всем привет.
На хабре есть статья как рассчитывать медидиану. https://habrahabr.ru/post/153869/

Я переписал предлагаемый код под свой куб
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
//Количество значений в кортеже 
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]) . Все из за того, что данные не отсортированы.

Может кто знает, как накинуть сортировку и у вас есть другой алгоритм?
...
Рейтинг: 0 / 0
27.07.2016, 10:24
    #39280863
ShIgor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ssas и медиана
Yagrus2,

зачем городить огород, если Median сама может отсортировать набор? производительность Вашего кода ничем не будет быстрее Median.
на хабре, видимо, применили подход когда измерение построено на таблице фактов и члены измерения располагаются в зависимости от сортировки исходной таблицы - они оптимизировали частный случай.
есть еще хороший пример оптимизации Calculating Non-Numerical Medians in MDX

поэтому если нет возможности сортировать предварительно, единственный вариант уменьшать количество данных для вычислений..
аналогичное поведение у ТОP- и BOTTOM- COUNT.
...
Рейтинг: 0 / 0
10.05.2017, 14:19
    #39450803
StarikNavy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ssas и медиана
Yagrus2Всем привет.
На хабре есть статья как рассчитывать медидиану. https://habrahabr.ru/post/153869/
...
Все из за того, что данные не отсортированы.


>>Теперь о том, как заранее отсортировать таблицу фактов. Допустим, у вас есть исходная таблица фактов, данные в которую >>накапливаются по мере времени. Сделайте копию этой таблицы и вставьте туда данные из исходной таблицы отсортированные по необходимому значению.
>>Пример SQL запроса:
>>INSERT INTO CopyBasicTable
>>SELECT * FROM BasicTable ORDER BY ValueField
(С)

а автор статьи на хабре в курсе, что данный способ совершенно не гарантирует сортировку при выборке из таблицы?
...
Рейтинг: 0 / 0
Форумы / OLAP и DWH [игнор отключен] [закрыт для гостей] / ssas и медиана / 3 сообщений из 3, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]