21
Июл
2021

Java Mondrian: Как сделать DrillThrough в CalculatedMember ? Или иначе записать нули вместо пустых значений

Всем доброго дня!
Есть проблема с Mondrian. Я использую Mondrian как 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-ке описываются отчёты, строящиеся по этим кубам:

<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, когда мы раскрываем детализацию (по Регионам), у нас могут возникать пустые ячейки, если по группировке отсутствуют данные по конкретному региону.

EmptyCells


А моя задача вместо пустых ячеек писать нули. Для этого я написал отдельный CalculatedMember , обозвал его "ObjectCount" (и переименовал существующий Measure в "ObjCount")

    <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, но увы...

Или может можно как-то иначе писать нули вместо пустых ячеек, без добавления CalculatedMember?

Спасибо!

Источник: https://ru.stackoverflow.com/questions/1307551/java-mondrian-%D0%9A%D0%B0%D0%BA-%D1%81%D0%B4%D0%B5%D0%BB%D0%B0%D1%82%D1%8C-drillthrough-%D0%B2-calculatedmember-%D0%98%D0%BB%D0%B8-%D0%B8%D0%BD%D0%B0%D1%87%D0%B5-%D0%B7%D0%B0%D0%BF%D0%B8%D1%81%D0%B0%D1%82%D1%8C

Тебе может это понравится...

Добавить комментарий