• Boris Kocherov's avatar
    add CUBEMEMBER, CUBEVALUE · 32887cce
    Boris Kocherov authored
    CUBEMEMBER and CUBEVALUE functions has been implemented, using xmla
    library.
    
    For this purpose the support of lazy calculations in parserFormula has
    been added. Now, during the implementantion of a function a method for
    lazy calculations  (CalculateLazy) can be defined. CalculateLazy returns
    not a value, as it did Calculation, but RSVP.Queue. And now it is the
    returned queue that is to return the value which is the result of the
    calculations. During the calculation of CUBEVALUE the calculation
    process waits until all the calculations of all the arguments are
    finished. It is made to send an EXECUTE request to olap. This request
    guarantees the consistency of the returned values. In case of success
    CUBEMEMBER.CalculateLazy assigns mdx-expression to cube_value to form
    the request and calculate its result. Functions are marked as those
    which are calculated every time the document is being opened (.ca=true).
    changeOffsetElem, which return the element of the olap-tree, adjacent to
    the current one on the same level, have been implemented. It helps to
    fill the table.
    TODO:
    Make the editor of connections to OLAP-servers. In the current
    implementation connection parameters are hardcoded. The current
    parameters describe a connection to SAIKU olap demoserver, which
    supports XMLA-requests.
    Use PivotCache as an intermediate structure to store the requests'
    results. It will allow to use PivotTable to display the results.
    
    In Russian:
    Реализованы CUBEMEMBER, CUBEVALUE функции используя xmla библиотеку.
    
    Для этого добавлена поддержка ленивых вычислений в parserFormula.При
    реализации функции теперь можно опредилить метод для ленивых вычислений
    CalculateLazy.  CalculateLazy возвращает очередь (RSVP.Queue), а не
    значение, как при обычных вычислениях. И уже возвращаемая очередь должна
    вернуть значение, которое является результатом вычисления. При
    вычислении CUBEVALUE происходит ожидание вычисления всех аргументов всех
    CUBEVALUE. Это сделано, для того чтобы посылать один запрос EXECUTE к
    olap, что гарантирует согласованность значений, полученых в результате.
    CUBEMEMBER.CalculateLazy в случае успеха присваивает cube_value mdx-
    выражение которое использовано для вычисления
    CUBEMEMBER в свою очередь CUBEVALUE использует cube_value для
    формирования запроса и вычисления своего результата. Функции
    промаркированы как вычисляемые при каждом открытии документа
    (.ca=true). Реализованы changeOffsetElem, которые возвращают элемент
    olap-дерева, соседний по отношению к текущему на том же уровне, что
    позволяет быстро заполнять таблицу.
    TODO:
    Сделать редактор подключений к OLAP серверам. В текущей реализации
    параметры соединений прописаны прямо в коде. Текущие параметры описывают
    соединение с SAIKU olap demoserver, который поддерживает XMLA.
    Использовать PivotCache как промежуточную структуру для хранения
    результатов запросов, что позволит использовать PivotTable для
    отображения результатов.
    32887cce
webexcel.json 10.3 KB