powered by simpleCommunicator - 2.0.44     © 2025 Programmizd 02
Форумы / OLAP и DWH [игнор отключен] [закрыт для гостей] / Разделение Null и Ноль ?
10 сообщений из 10, страница 1 из 1
Разделение Null и Ноль ?
    #40056540
Nivatu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MSSQL 2016 Ent, VS 2019, SSAS
Доброго дня!
В кубе считаю Среднее и Медиану по числовому ряду.
Числовой ряд это мера таблицы фактов [Measures].[_t Cronos] , которая содержит простые числа,
а также значения Null и "0"(Ноль).
Считаю в CM куба вдоль измерения, созданного на базе суррогатного первичного ключа [SALES].[ID KEY].[ID KEY] таблицы фактов.
Получается рассчитать без учета Null и "0".
Или с ними:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
CREATE MEMBER CURRENTCUBE.[Measures].[Кронос_AVG]
AS null,
VISIBLE = 1 ,  ASSOCIATED_MEASURE_GROUP = 'Продажи';    
SCOPE([Measures].[Кронос_AVG],*);
    THIS = AVG([SALES].[ID KEY].[ID KEY].MEMBERS,[Measures].[_t Cronos]);
  -- Медиана считается аналогично   
    Format_String ( This ) = "#,#;-#,#;\-";   
END SCOPE;


И все это не то, что надо Заказчику.
Он требует учитывать в расчете средних и медианы, наряду с числами, еще и значение "Ноль".
А вот Null не учитывать в расчетах.
Кто знает как это решить на уровне СМ, не переходя в ETL?
...
Рейтинг: 0 / 0
Разделение Null и Ноль ?
    #40056649
Фотография a_voronin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Nivatu,

Вы объясните задачу в целом, а то у вас объяснение вида нужно посчитать среднее по X , а еще надо делить на 0.

Если надо среднее по всем дням, включая пустые, то рекомендую завести показатель "кол-во дней", который посчитать по календарю, и на него делить.

В любом случае посчитайте показатели "числитель" и "знаменатель". И поделите в конечном показателе.
...
Рейтинг: 0 / 0
Разделение Null и Ноль ?
    #40056655
ShIgor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Nivatu,

ну, вообще-то, прочитайте внимательно про AVG - она не учитывает пустые ячейки в расчете. и в документации написано, что если надо их учитывать (обратная задача Вашей) используйте CoalesceEmpty или любое выражение возвращающее для пустых ячеек 0.
...
Рейтинг: 0 / 0
Разделение Null и Ноль ?
    #40056779
Nivatu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
a_voronin,

В целом задача такая:
Нужно за календарные периоды считать статистику затрат времени (среднее и медиану) на обработку группы уникальных событий, которые в заданный период происходили. События в таблице фактов. Для каждого события отведена одна строка со своим уникальным Id-шником и календарной датой. По нему в этой же строке, но в другом столбце [t_Cronos] простым числом регистрируется затраты времени в минутах. В формулу должны идти только те строки, где затраты времени не равны Null. А поле с нолем (в примере строка #105)должно быть учтено в счетчике формул, т.к. событие в обработке все-таки было.
[img=https://www.sql.ru/images/Исходные данные.png]
В итоге трудность этой задачи сводится не к тому "как рассчитать медиану или среднее?",
а к тому "как учесть Ноль в счетчике формулы и при этом не учитывать Null?"
AVG() и Median() не различают Ноль и Null
...
Рейтинг: 0 / 0
Разделение Null и Ноль ?
    #40056787
Nivatu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ShIgor,

Спасибо за полезный совет. Описание AVG в MS документации действительно шире чем в ином справочнике.
В моем случае Avg учитывает все Null и Ноли.
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
WITH 
  MEMBER [Value_AVG] AS 
    Avg
    ([SALES].[ID KEY].[ID KEY].MEMBERS
       ,[Measures].[_t Cronos]
    ) 
SELECT 
  Value_AVG ON 0
FROM [СRKO]



А вот так не учитывает ни Null ни Ноли:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
WITH 
  MEMBER [Value_AVG] AS 
    Avg
    (
      Filter
      (
        (EXISTING 
          [SALES].[ID KEY].[ID KEY].MEMBERS)
       ,
        [Measures].[_t Cronos] <> isEmpty([Measures].[_t Cronos]) 
      ), [Measures].[_t Cronos] 
    ) 
SELECT 
  Value_avg ON 0
FROM [СRKO]


т.е. isEmpty() тоже метет Пустые и Ноли как одно

C CoalesceEmpty "каменный цветок" пока тоже не получается. Разбираюсь.
...
Рейтинг: 0 / 0
Разделение Null и Ноль ?
    #40057023
ShIgor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Nivatu,

а если вот так, то результат прям вот как на скриншоте? или вместо null стоят 0?

Код: sql
1.
2.
3.
4.
SELECT 
{[Measures].[_t Cronos]} ON 0,
{[SALES].[ID KEY].[ID KEY]} ON 1
FROM [СRKO]
...
Рейтинг: 0 / 0
Разделение Null и Ноль ?
    #40057080
Nivatu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ShIgor,

Что называется "картина маслом". Результат все объясняет ((
В нижней строке в исходнике Null.
Тип агрегирования Sum.
Как же эффективней всего поменять модель данных?
...
Рейтинг: 0 / 0
Разделение Null и Ноль ?
    #40057088
ShIgor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Nivatu,

если у Вас SSAS MD так все просто.
у Вас в настройках обработки нулл-ов 'ZeroOrBlank'. смените на 'Preserve'.
...
Рейтинг: 0 / 0
Разделение Null и Ноль ?
    #40057090
ShIgor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
но я бы пошел другим путем.
создал бы еще измерение "С учетом нулл-ов" да/нет и флаг в источнике iif(value is null, 0, 1).
...
Рейтинг: 0 / 0
Разделение Null и Ноль ?
    #40057092
Nivatu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ShIgor,

СПАСИБО!!!
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / OLAP и DWH [игнор отключен] [закрыт для гостей] / Разделение Null и Ноль ?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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