Детализация основных текстовых данных в icCube? - PullRequest
2 голосов
/ 26 июня 2019

Как настроить модель в icCube, чтобы позволить детализировать детали, когда детали содержат текстовые поля?

Идея состоит в том, чтобы получить список с именами столбцов, содержащих текстовые поля (в сочетании с полями суммы). Точно так же, как простой оператор SQL дал бы.

Я пробовал следующее:

  • a) добавлено техническое измерение, связанное со строками (через округленное число), и добавлено агрегирование MIN для текстовых полей. С идеей использовать их, когда вызывается оператор DRILLTHROUGH MDX. Функция DRILLTHROUGH работает, но не дает значения рядом друг с другом для показателей. Результат похож на: enter image description here

  • b) добавили к каждой уникальной строке номер строки и загрузили номер строки в качестве самой низкой детализации в одном из измерений. Добавлены атрибуты для этих элементов текста и даты для столбцов «детализация». Далее добавлены рассчитанные меры, чтобы получить свойство для этих атрибутов. Детализация в настоящее время фактически является детализацией до мельчайших деталей. Это работает, но это нехорошо, поскольку это взрывает мое измерение.

  • в) попытался использовать источник данных виджета SQL, но он не доступен для текстовых файлов и не работает для файлов MSAccess (слишком медленно).

Предпочтительное решение должно работать на инструментальных панелях и в любом интерфейсе API XMLA / REST.

Прилагается этот пример

файл схемы

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<schemaFactory revisionNumber="7">
    <schemaDefinition name="drilltrhough-text" description="" group="Issues" loadOnStartup="false">
        <activateIncrementalLoad>false</activateIncrementalLoad>
        <useUnknownMembersInFacts>true</useUnknownMembersInFacts>
        <autoCleanUpTableColumns>false</autoCleanUpTableColumns>
        <useFactPartitioning>false</useFactPartitioning>
        <callGarbageCollector>NONE</callGarbageCollector>
        <backup>NONE</backup>
        <nonEmptyCachePolicy>NONE</nonEmptyCachePolicy>
        <nonEmptyCacheType>REGULAR</nonEmptyCacheType>
        <nonEmptyCachePersistency>MEMORY</nonEmptyCachePersistency>
        <storagePolicy>DEFAULT</storagePolicy>
        <hierarchyUniqueNameStyle>IncludeDimensionName</hierarchyUniqueNameStyle>
        <inMemoryDS name="data">
            <memoryDataTable tableName="data" rowLimit="-1" id="d9429713-9be8-4c63-9b40-4a20388e7563">
                <column name="dimension" tableType="STRING" type="STRING" selected="true" primaryKey="false"/>
                <column name="amount" tableType="STRING" type="STRING" selected="true" primaryKey="false"/>
                <column name="text" tableType="STRING" type="STRING" selected="true" primaryKey="false"/>
                <addRowNumber>false</addRowNumber>
                <stringDateConverter></stringDateConverter>
                <trimStrings>true</trimStrings>
                <columnSeparator>,</columnSeparator>
                <commentMarker>#</commentMarker>
                <dataAsString>dimension, amount, text
a, 10,some text
b, 20, some more text
c, ,text without an amount</dataAsString>
            </memoryDataTable>
        </inMemoryDS>
        <multiLevelDimension dataTableId="d9429713-9be8-4c63-9b40-4a20388e7563" isTimeDimension="false" isDefaultTimeDimension="false" isIndexingByRange="false" id="86d118f0-71ba-4826-a6ac-343eac96fb05" name="Dimension">
            <multiLevelHierarchy hasAllLevel="true" allLevelName="All-Level" allMemberName="All" name="Dimension" isDefault="true">
                <level name="Dimension - L" nameUnique="false" nameUniqueInParent="false" keyUnique="false" ignoreNameCollision="false">
                    <nameCol name="dimension"/>
                    <orderType>BY_NAME</orderType>
                    <orderKind>ASC</orderKind>
                </level>
            </multiLevelHierarchy>
        </multiLevelDimension>
        <cube id="caa9c520-f953-4c77-9e72-76c8668170f7" name="Cube">
            <defaultFacts measureGroupName="Facts" partitioningLevelName="" partitioningType="NONE" newGeneration="true" dataTableId="d9429713-9be8-4c63-9b40-4a20388e7563" aggregateDataSourceFacts="false" unresolvedRowsBehavior="ERROR">
                <rowFactAggregationType>ADD_ROW</rowFactAggregationType>
                <measure name="Amount" aggregationType="SUM">
                    <dataColumn name="amount"/>
                </measure>
                <measure name="Text" aggregationType="MIN">
                    <dataColumn name="text"/>
                </measure>
                <links dimensionId="86d118f0-71ba-4826-a6ac-343eac96fb05">
                    <viewLinks type="LAST_LEVEL">
                        <toColumns name="dimension"/>
                    </viewLinks>
                </links>
            </defaultFacts>
        </cube>
    </schemaDefinition>
</schemaFactory>

- MDX

drillthrough
select [Measures].members on 0
, [Dimension].[Dimension].[Dimension - L] on 1
from [cube]
return Name([Dimension])
  • результат

enter image description here

1 Ответ

2 голосов
/ 01 июля 2019

Это не связано с наличием показателя типа STRING.

Вы выполняете анализ результатов с несколькими ячейками (который является расширением стандартного MDX в icCube). В этом случае результат «организован» для каждой ячейки результата, что означает, что каждый [Показатели] находится в своей собственной категории (вы можете добавить другую меру Сумма, и вы увидите то же поведение).

Вместо этого вы должны выполнить одноклеточный анализ:

drillthrough 
  select [Dimension].[Dimension].[Dimension -L].[a] on 0     
  from [cube]

И результат должен выглядеть так:

enter image description here

Вы можете видеть, что [Меры]. [Информация] находятся в той же строке (как и все остальные меры).

Надеюсь, это поможет.

...