首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java :如何在DrillThrough中使用CalculatedMember?或者设置Zeroes,而不是空单元,任何其他方式

Java :如何在DrillThrough中使用CalculatedMember?或者设置Zeroes,而不是空单元,任何其他方式
EN

Stack Overflow用户
提问于 2021-07-21 16:16:53
回答 1查看 34关注 0票数 0

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

因此,我有一个带有两个多维数据集的XML模式。

代码语言:javascript
复制
<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文本:

代码语言:javascript
复制
<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中,当我们扩展区域时,如果在某些组中没有数据,我们可以有空的单元格。

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

代码语言:javascript
复制
    <CalculatedMember name="ObjectCount" dimension="Measures" caption="ObjectCountCalc" formatString="####0">
        <Formula>
            IIf([Measures].[ObjCount] = 0 OR ISEMPTY([Measures].[ObjCount]),0,[Measures].[ObjCount])
        </Formula>
        <!--<CalculatedMemberProperty name="FORMAT_STRING" value="####0"/>-->
    </CalculatedMember>

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

我该如何解决这个问题?

我尝试用COALESCEEMPTY()在olapQuery中创建成员,但是没有结果.

或者我可以用其他方式在单元格中编写Zeroes,而无需添加CalculatedMember。

谢谢!

EN

回答 1

Stack Overflow用户

发布于 2022-04-08 02:40:46

我知道这是旧的,但我认为您要寻找的是使用MemberFormatter。您可以将代码内联为Javascript,这样很容易。

代码语言:javascript
复制
<MemberFormatter>
   <Script language="JavaScript">
       return member.isNull() ? 0 : member.getName();
   </Script>
</MemberFormatter>

这使它保持作为一种正常的措施和钻取保持原封不动。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68473077

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档