powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / OLAP и DWH [игнор отключен] [закрыт для гостей] / ssas и медиана
3 сообщений из 3, страница 1 из 1
ssas и медиана
    #39280323
Фотография Yagrus2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем привет.
На хабре есть статья как рассчитывать медидиану. 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
ssas и медиана
    #39280863
ShIgor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yagrus2,

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

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


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

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


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