IcCube - игнорировать член по умолчанию

Можно ли игнорировать элемент по умолчанию при расчете элемента all во время настройки куба (в "расширенных" настройках)?

Пример: в столбчатой ​​диаграмме с накоплением доля дочерних элементов не может составлять до 100 процентов.

XML-код:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<schemaFactory revisionNumber="16">
    <schemaDefinition name="testschema" group="Default Group" loadOnStartup="false">
        <activateIncrementalLoad>false</activateIncrementalLoad>
        <useUnknownMembersInFacts>true</useUnknownMembersInFacts>
        <autoCleanUpTableColumns>false</autoCleanUpTableColumns>
        <useFactPartitioning>false</useFactPartitioning>
        <inMemoryDS name="facts">
            <memoryDataTable tableName="facts" rowLimit="-1" id="c1f00fc4-9fcd-41f3-9347-d5362b2b00f0">
                <column name="category" tableType="STRING" type="INTEGER" selected="true" primaryKey="false" nullObjectAsString=""/>
                <column name="value" tableType="STRING" type="INTEGER" selected="true" primaryKey="false" nullObjectAsString=""/>
                <stringDateConverter></stringDateConverter>
                <trimStrings>true</trimStrings>
                <addRowNumber>false</addRowNumber>
                <columnSeparator>,</columnSeparator>
                <commentMarker>#</commentMarker>
                <dataAsString>category,value
1,1
2,2
3,3
4,4
5,5
6,6</dataAsString>
            </memoryDataTable>
            <memoryDataTable tableName="categories" rowLimit="-1" id="3badb961-1101-4db0-96b3-1886f1a27085">
                <column name="id" tableType="STRING" type="INTEGER" selected="true" primaryKey="false" nullObjectAsString=""/>
                <column name="name" tableType="STRING" type="STRING" selected="true" primaryKey="false" nullObjectAsString=""/>
                <stringDateConverter></stringDateConverter>
                <trimStrings>true</trimStrings>
                <addRowNumber>false</addRowNumber>
                <columnSeparator>,</columnSeparator>
                <commentMarker>#</commentMarker>
                <dataAsString>id,name
1,cars
2,tv
3,shoes
4,skirts</dataAsString>
            </memoryDataTable>
        </inMemoryDS>
        <multiLevelDimension dataTableId="3badb961-1101-4db0-96b3-1886f1a27085" isTimeDimension="false" isDefaultTimeDimension="false" isIndexingByRange="false" unknownMemberName="-" id="34648f63-775c-4eb0-b140-0ff85d51c49e" name="categories">
            <multiLevelHierarchy hasAllLevel="true" allLevelName="All-L" allMemberName="All-M" name="categories" isDefault="true">
                <level name="name" nameUnique="true" nameUniqueInParent="false" keyUnique="true" ignoreNameCollision="false">
                    <column name="id"/>
                    <nameCol name="name"/>
                    <orderType>NONE</orderType>
                    <orderKind>ASC</orderKind>
                </level>
            </multiLevelHierarchy>
        </multiLevelDimension>
        <cube id="cce8c81b-384b-4531-8e14-3eff23b7f6c6" name="Cube">
            <defaultFacts measureGroupName="Facts-2" partitioningLevelName="" newGeneration="true" dataTableId="c1f00fc4-9fcd-41f3-9347-d5362b2b00f0" aggregateDataSourceFacts="false" unresolvedRowsBehavior="ERROR">
                <rowFactAggregationType>ADD_ROW</rowFactAggregationType>
                <measure name="value" aggregationType="SUM">
                    <rollupHierarchy></rollupHierarchy>
                    <dataColumn name="value"/>
                    <cellProperties></cellProperties>
                    <emptyIsZero>false</emptyIsZero>
                </measure>
                <links dimensionId="34648f63-775c-4eb0-b140-0ff85d51c49e">
                    <viewLinks type="LAST_LEVEL">
                        <toColumns name="category"/>
                    </viewLinks>
                </links>
            </defaultFacts>
        </cube>
    </schemaDefinition>
</schemaFactory>

1 ответ

Решение

В MDX неизвестный член является членом, аналогичным любому другому элементу иерархии, а его родительский элемент является членом [All].

В вашем примере две последние строки, которые равны сумме 11, определенной непонятным членом, [категории].[Имя].[-], также являются частью элемента [Все]. Вы можете видеть все как способ сказать все строки, так что член MDX All ничего не фильтрует.

У вас есть несколько возможностей:

а) Вы можете создать измененную иерархию категорий, которая имеет промежуточный уровень как Известный / Неизвестный, и вы определяете "Известный" член в качестве значения по умолчанию для этой иерархии.

б) Вы можете создать в иерархии вторую иерархию, которая создает это известное / неизвестное, и скрыть ее для обычного пользователя. Здесь мы избегаем изменять основную иерархию.

в) избегать загрузки "неизвестных" строк с помощью правильного оператора SQL или представления Javascript.

d) последнее - создать статистическое измерение, в котором мы определяем значение по умолчанию, которое изменяет поведение операторов (необходимо перейти к сценарию схемы).

WITH
  CATEGORY HIERARCHY [Stats].[Filter]
  CATEGORY STATIC MEMBER [Stats].[Filter].[All-M].[default] as SubCubeMinus(     [Categories].[categories].[All], [Categories].[categories].[name].[-] )
SELECT [Measures].[value] on 0, [categories].[categories].members on 1 
FROM [Cube]
WHERE [Stats].[Filter].[All-M].[default]

Как замечание, наличие члена [All], который не ведет себя как все, - это, по моему опыту, способ прокладывать дорогу будущим проблемам. Я действительно выберу вариант c), который более интуитивен, остальные подразумевают знание MDX и вашей модели, которые могут вас не пережить.

Другие вопросы по тегам