当某些未选择必需尺寸时,我们不希望后处理器执行。
例如,
我们具有称为风险类型,敏感度曲线,到期日,货币1和显示货币的维度。
我们还具有称为Rate.Move的后处理措施-实现doLeafEvaluation。

在我们的客户中,


如果未选择sensi曲线,则当风险类型为RateRisk时,我们不想显示Rate.Move
如果未选择currency1,则当风险类型为BasisSwapRisk时,我们不希望显示Rate.Move。

最佳答案

在后处理器内部,只有一种方法可以发现用户最初选择的尺寸和级别(最有可能在MDX查询中):内省由后处理器评估的位置。

这是一个小的后处理器示例(旨在在ActivePivot沙箱应用程序中运行)。后处理器定义上下文维度,在此示例中为时间维度。如果用户扩展了时间维度,则评估位置的深度将至少为2(深度1表示仅为该维度选择AllMember)。然后,您可以根据该知识决定返回不同的度量或计算。

/*
 * (C) Quartet FS 2010
 * ALL RIGHTS RESERVED. This material is the CONFIDENTIAL and PROPRIETARY
 * property of Quartet Financial Systems Limited. Any unauthorized use,
 * reproduction or transfer of this material is strictly prohibited
 */
package com.quartetfs.pivot.sandbox.postprocessor.impl;

import java.util.Properties;

import com.quartetfs.biz.pivot.IActivePivot;
import com.quartetfs.biz.pivot.ILocation;
import com.quartetfs.biz.pivot.impl.Util;
import com.quartetfs.biz.pivot.postprocessing.impl.ABasicPostProcessor;
import com.quartetfs.fwk.QuartetException;
import com.quartetfs.fwk.QuartetExtendedPluginValue;

/**
 *
 * @author Quartet FS
 *
 */
@QuartetExtendedPluginValue(
    interfaceName = "com.quartetfs.biz.pivot.postprocessing.IPostProcessor",
    key = ContextualPostProcessor.PLUGIN_TYPE
)
public class ContextualPostProcessor extends ABasicPostProcessor<Double> {

    /** serialVersionUID */
    private static final long serialVersionUID = 4484708084267009957L;

    /** Plugin key */
    static final String PLUGIN_TYPE = "CTX";

    /** Ordinal of the time dimension */
    protected int timeDimensionOrdinal = -1;

    /** Constructor */
    public ContextualPostProcessor(String name, IActivePivot pivot) {
        super(name, pivot);
    }

    @Override
    public String getType() { return PLUGIN_TYPE; }

    @Override
    public void init(Properties properties) throws QuartetException {
        super.init(properties);

        // Store the ordinal of the time dimension
        timeDimensionOrdinal = Util.findDimension(pivot.getDimensions(), "TimeBucket");
    }

    @Override
    protected Double doEvaluation(ILocation location, Object[] underlyingMeasures) throws QuartetException {
        if(location.getLevelDepth(timeDimensionOrdinal - 1) > 1) {
            return (Double) underlyingMeasures[0];
        } else {
            return (Double) underlyingMeasures[1];
        }
    }

}


这是在多维数据集描述中声明后处理器的方法:

    <measure name="ctx" isIntrospectionMeasure="false">

        <!-- This post processor dynamically buckets an underlying measure -->
        <!-- It works together with a dynamic bucket dimension.            -->
        <postProcessor pluginKey="CTX">
            <properties>
                <entry key="id" value="SUM" />
                <entry key="underlyingMeasures" value="pv.SUM,pnl.SUM" />
            </properties>
        </postProcessor>
    </measure>

关于olap - 当未选择强制尺寸时,如何使后处理器度量不显示数据?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13365792/

10-09 19:48