Итоги по измерениям

отредактировано 15:23 Раздел: FastCube
С прошедшими праздниками!

Может кто предложит решение следующей проблемы:
Необходимо не суммировать, а отнимать показатели по измерениям. Несколько вариантов в голове крутится, но может кто чего лучше предложит.

Есть база (упрощенно)

MVZ - Наименование
TYP - Тип данных ("БП","ТП","ОП" или "ФАКТ" может быть)
SUMMA - сумма

срез куба выглядит так:
TYP
MVZ
| БП ТП ОП ФАКТ
Участок1 | 10 11 10 12
Участок2 | 15 15 17 18

Необходимо вывести в итогах разницу между БП-ФАКТ, ТП-ФАКТ, ОП-ФАКТ

Как вариант расматриваю посчитать на сервере в запросе, тоесть добавить Тип данных "БП-ФАКТ" ... и в нем посчитать разницу,
но сильно вырастет количество записей в кубе.

Вычисляемыми показателями чет не совсем понял как посчитать разницы между измерениями. Пока накопал только до кода
  Result := Measures['SUMMA'].ColOffsetValue[0]-Measures['SUMMA'].ColOffsetValue[1];

Но это не совсем то. Хочется чего-то вида
  Result := Measures['SUMMA'].ColOffsetValue[0]-Measures['SUMMA'].ColOffsetValue[Dimensions['TYP']='ФАКТ'];

Заранее спасибо за предложения.

Торгашов Александр.

p.s. Пожелания к гриду: Сделайте еще один пункт выпадающего меню - "Копировать с шапкой" т.е. копировать не только значения показателей но и измерения в clipboard.

Комментарии

  • отредактировано 15:23
    Приветствую.

    Не совсем понял, чего Вы хотите добиться... Что-бы итог считался по формуле отличной от расчета показателя? Создать еще один показатель?
    Насколько я понимаю у Вас:
    - измерение TYP - со значениями (БП, ТП, ОП, ФАКТ)
    - измерение MVZ
    - один показатель - сумма поля SUMMA

    Если создать еще один вычисляемый показатель, то в нем у Вас будет доступно значение показателя SUMMA с теми же координатами MVZ и TYP
    Кроме того будут доступны значения показателей SUMMA со смещением по оси строк либо колонок. При этом смещение ограничено родительским уровнем для показателя.
    Так-же Вам доступно значение измерений (через Dimentions[]), т.е. вы можете проверить значение координаты TYP и в зависимости от него считать:
    if Dimentions['TYP'].Value = 'БП' then
      Result := Measures['SUMMA'].CurrentValue - Measures['SUMMA'].ColOffsetValue[3]
    else
    if Dimentions['TYP'].Value = 'ТП' then
      Result := Measures['SUMMA'].CurrentValue - Measures['SUMMA'].ColOffsetValue[2]
    else
    if Dimentions['TYP'].Value = 'ОП' then
      Result := Measures['SUMMA'].CurrentValue - Measures['SUMMA'].ColOffsetValue[1]
    else
      Result := 0; // ??
    

    Что-то типа такого. Согласен, что данный вариант жестко привязывается к положению значений, но ничего иного сейчас предложить не могу.
    Подумаю над возможностью поиска смещения до нужного значения. Думаю проблемы не возникнет.
    Предложение по копированию принимаю.

    По пути нашел ошибку в fcCube.pas. Если есть исходники, можете поправить.
    Или ждите обновления.
    { TDimension }
    
    function TDimension.GetCurrentCaption: String;
    begin
      Result := '';
      if FField.Region = rf_CapXAx then
      begin
        Result := FSlice.XAxis.Caption[FField.Index, FSlice.XAxisValueAbsIndexInLevelByAbs[FField.Index, FSlice.Dimensions.FCol]];
      end else
      if FField.Region = rf_CapYAx then
      begin
        Result := FSlice.YAxis.Caption[FField.Index, FSlice.YAxisValueAbsIndexInLevelByAbs[FField.Index, FSlice.Dimensions.FRow]];
      end;
    end;
    
    function TDimension.GetCurrentValue: Variant;
    begin
      Result := Null;
      if FField.Region = rf_CapXAx then
      begin
        Result := FSlice.XAxis.Value[FField.Index, FSlice.XAxisValueAbsIndexInLevelByAbs[FField.Index, FSlice.Dimensions.FCol]];
      end else
      if FField.Region = rf_CapYAx then
      begin
        Result := FSlice.YAxis.Value[FField.Index, FSlice.YAxisValueAbsIndexInLevelByAbs[FField.Index, FSlice.Dimensions.FRow]];
      end;
    end;
    


    С уважением, Олег.
  • отредактировано 15:23
    Приветствую.
    написал:
    Подумаю над возможностью поиска смещения до нужного значения. Думаю проблемы не возникнет.
    Предложение по копированию принимаю.

    С уважением, Олег.

    Спасибо, именно этого и хочется увидеть в следующей версии.

    Торгашов Александр

    p.s. Если не секрет когда ожидается новый релиз?
  • отредактировано 15:23
    Приветствую.

    Очередное обновление планируем в ближайшие дни.
    Копирование с заголовками уже сделано, будет в обновлении.
    "Поиск смещения" не обещаю, но постараюсь.

    С уважением, Олег.

Оставить комментарий

Многофункциональный текстовый редактор. Чтобы отредактировать стиль параграфа, нажмите TAB, чтобы перейти к меню абзаца. Там вы можете выбрать стиль. По умолчанию не выбран ни один стиль. Когда вы выберете текст, появится встроенное меню форматирования. Нажмите TAB, чтобы войти в него. Некоторые элементы, такие как многофункциональные вставки ссылок, картинок, индикаторов загрузки и сообщений об ошибок могут быть вставлены в редактор. Вы можете перемещаться по ним, используя стрелки внутри редактора и удалять с помощью клавиш delete или backspace.