Java Mondrian:如何在CalculatedMember 中进行DrillThrough?或以任何其他方式设置零而不是空单元格

问题描述

我使用 Mondrian 作为我用 Java 编写的应用程序的 Olap 服务器。

所以,我有一个包含几个多维数据集的 XML 模式。

<mon:Schema name="TechServiceDataCtrl" ...... >
...
...
...
<Cube name="ExclusiveUseEquipmentCtrl" defaultMeasure="ObjectCount">
    <Table name="DATA_CTRL_EU$EU" schema="TS_DATA_CTRL" />

    <DimensionUsage name="Region" source="Region" caption="Region" foreignKey="REGION_ID" />

    <Dimension name="EquipmentType" caption="EquipmentType" foreignKey="EQUIPMENT_TYPE">
        <Hierarchy primaryKey="EQUIPMENT_TYPE" hasAll="false"  caption="EQUIPMENT_TYPE">
            <Table name="DATA_CTRL_EU$EU" schema="TS_DATA_CTRL" />

            <Level name="EquipmentType" column="EQUIPMENT_TYPE"  table="DATA_CTRL_EU$EU"
                approxRowCount="10" caption="EQUIPMENT_TYPE" type="String">
            </Level>
        </Hierarchy>
    </Dimension>

    <Dimension name="EquipmentTypeGroup" caption="EquipmentTypeGroup" foreignKey="TYPE_GROUP">
        <Hierarchy primaryKey="TYPE_GROUP" caption="TYPE_GROUP" hasAll="false">
            <Table name="DATA_CTRL_EU$EU" schema="TS_DATA_CTRL" />

            <Level name="EquipmentTypeGroup" column="TYPE_GROUP" table="DATA_CTRL_EU$EU"
                approxRowCount="2" caption="EquipmentTypeGroup" type="String" />
        </Hierarchy>
    </Dimension>

    <Measure name="ObjectCount" column="COUNT" aggregator="sum" caption="ObjectCount"
        formatString="####0">
        <Annotations>
            <Annotation name="drillThroughHandlerClass">ru.argustelecom.techservice.networksummary.datactrl.drillthrough.ExclusiveUseEquipmentDrillThroughHandler</Annotation>
            <Annotation name="factKey">REGION_ID</Annotation>
        </Annotations>
    </Measure>
</Cube>
</mon:Schema>


我还有一个描述这些多维数据集的报表的 XML。根据 XML 文本:

<ns:group name="ReportModule" catalogName="olap/TechServiceDataCtrl">
...
...
...
<ns:group name="ClientEquipment" securityRole="TechServiceDataCtrl_ClientEquipment">
    <ns:summaryReport title="report title">
        <olapQuery objectName="title" dwhSolutionName="DATA_CTRL_AF">
            <mdx><![CDATA[
                    SELECT
                        {[Measures].[ObjectCount]}
                    ON COLUMNS,NonEmptyCrossJoin (
                            Parameter("REGION_TREE",[Region],{ [Region].DefaultMember }),CrossJoin (
                                [EquipmentTypeGroup].Members,[EquipmentType].Members
                            )
                        )
                    ON ROWS
                    FROM [ExclusiveUseEquipmentCtrl]
                   ]]></mdx>
        </olapQuery>
    </ns:summaryReport>
</ns:group>
</ns:group>


在这种情况下,在 ObjectCount 中,当我们展开 Region 时,如果某些组中没有数据,我们可以有空单元格。

EmptyCells


我想设置零而不是空单元格,并编写了一个CalculatedMember“ObjectCount”(并将现有度量重命名为“ObjCount”)

    <CalculatedMember name="ObjectCount" dimension="Measures" caption="ObjectCountCalc" formatString="####0">
        <Formula>
            IIf([Measures].[ObjCount] = 0 OR ISEMPTY([Measures].[ObjCount]),[Measures].[ObjCount])
        </Formula>
        <!--<CalculatedMemberProperty name="FORMAT_STRING" value="####0"/>-->
    </CalculatedMember>


但是出现了一个问题:我的每个值都变得不可点击(由于计算值列而丢失了 DrillThrough 操作)。

我该如何解决这个问题?

我尝试在 olapQuery 中使用 COALESCEMPTY() 检查创建成员,但没有结果...

或者也许我可以在单元格中写入零任何其他方式添加CalculatedMember

谢谢!

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)