2015-02-10 3 views
1

У меня есть 2 куба (SalesCube и StockCube) с двумя общими размерами: Имя магазина, Идентификатор статьи. Каждый куб имеет свой собственный размер: SalesCube имеет SalesDim и StockCube имеет StockDim. Кроме того, каждый куб имеет свою собственную меру: SalesCube имеет «Sales value», а StockCube имеет значение «Stocks». Я создал виртуальный куб, который содержит все размеры (2 общих и 2 конкретных) и обе меры. Проблема в том, что если я использую конкретный размер, результат будет содержать данные только из меры из куба, который имеет эту конкретную размерность (второе измерение пусто). Если я использую только общие измерения, отчет принесет результаты для обеих мер. Что мне не хватает?mdx - виртуальный куб, не показывающий все результаты

Практически, виртуальные значения пустые меры по размерам, которые не приходят из того же родительского куба

я нашел что-то подобное, но без ответов: http://forums.pentaho.com/showthread.php?130932-Virtual-Cube-Measure-Behaviour-Question

<Schema name="Shop_Sales_and_Stock"> 
    <Dimension name="SalesDim"> 
    <Hierarchy hasAll="true"> 
     <Table name="Sales" primaryKey="Article_Id"/> 
     <Level name="SalesDim" uniqueMembers="false" column="SalesDim" type="String"> 
     </Level> 
    </Hierarchy> 
    </Dimension> 
    <Dimension name="StockDim"> 
    <Hierarchy hasAll="true"> 
     <Table name="Stocks" primaryKey="Article_Id"/> 
     <Level name="StockDim" uniqueMembers="false" column="StockDim" type="String"> 
     </Level> 
    </Hierarchy> 
    </Dimension> 

<Cube name="SalesCube"> 
    <Table name="Sales"/> 
    <Dimension name="Shop_name"> 
    <Hierarchy visible="true" hasAll="true"> 
     <Table name = "Sales"/> 
    <Level name="Shop name" uniqueMembers="false" column="Shop_name" type="String"> 
    </Level> 
     </Hierarchy> 
    </Dimension> 
    <Dimension name="Article Id"> 
    <Hierarchy visible="true" hasAll="true"> 
     <Table name = "Sales"/> 
    <Level name="Article Id" uniqueMembers="false" column="Article_Id" type="String"> 
    </Level> 
     </Hierarchy> 
    </Dimension> 
    <DimensionUsage name="SalesDim" source="SalesDim" foreignKey="Article_Id"/> 
    <Measure name="Sales value" column="Sales value" aggregator="sum" formatString="&#x23;"/> 
</Cube> 

<Cube name="StockCube"> 
    <Table name="Stocks"/> 
    <Dimension name="Shop_name"> 
    <Hierarchy visible="true" hasAll="true"> 
     <Table name = "Stocks"/> 
    <Level name="Shop name" uniqueMembers="false" column="Shop_name" type="String"> 
    </Level> 
     </Hierarchy> 
    </Dimension> 
    <Dimension name="Article Id"> 
    <Hierarchy visible="true" hasAll="true"> 
     <Table name = "Stocks"/> 
    <Level name="Article Id" uniqueMembers="false" column="Article_Id" type="String"> 
    </Level> 
     </Hierarchy> 
    </Dimension> 
    <DimensionUsage name="StockDim" source="StockDim" foreignKey="Article_Id"/> 
    <Measure name="Stocks value" column="Stocks value" aggregator="sum" formatString="&#x23;"/> 
</Cube> 

<VirtualCube name="Shop_Sales_and_Stock"> 
    <CubeUsages> 
     <CubeUsage cubeName="SalesCube"/> 
     <CubeUsage cubeName="StockCube"/> 
    </CubeUsages> 
    <VirtualCubeDimension name="Shop name"/> 
    <VirtualCubeDimension name="Article Id"/> 
    <VirtualCubeMeasure cubeName="SalesCube" name="[Measures].[Sales value]"/> 
    <VirtualCubeMeasure cubeName="StockCube" name="[Measures].[Stocks value]"/> 
</VirtualCube> 
</Schema> 

ответ

0

Используйте ignoreUnrelatedDimensions параметр на куба, (размеры, не разделяемые всеми кубами в виртуальном кубе). Узнайте больше об этом параметре в Mondrian Schema documentation.

<VirtualCube name="Shop_Sales_and_Stock"> 
    <CubeUsages> 
    <CubeUsage cubeName="SalesCube" ignoreUnrelatedDimensions="true"/> 
    <CubeUsage cubeName="StockCube" ignoreUnrelatedDimensions="true"/> 
    </CubeUsages> 
    <VirtualCubeDimension name="Shop name"/> 
    <VirtualCubeDimension name="Article Id"/> 
    <VirtualCubeMeasure cubeName="SalesCube" name="[Measures].[Sales value]"/> 
<VirtualCubeMeasure cubeName="StockCube" name="[Measures].[Stocks value]"/> 

+0

Я пробовал, но без изменений :( – bluesony

+0

Итак, определите размеры 'Shop_name' и' Article Id' как глобальные (под элементом 'Schema') и добавьте их в кубы' DimensionUsage'. – mzy

+0

это был мой Сначала я подумал ... но из какой таблицы я их определяю? каждый из них можно найти в обоих кубах/таблицах. – bluesony

0

поведение вы описали совершенно нормальным и ожидаемым. OLAP не имеет понятия, как рассчитать [Measures].[Sales value], если вы попросите его сегментировать его по размеру Article Id. Это просто не имеет смысла. Вы не можете узнать, какие факты (записи/строки) из таблицы Sales получить для каждого значения Article Id.

Если вы хотите проанализировать как меры по отдельности - использовать два отдельных кубиков или принять тот факт, что, когда вы сегмент, не-разделяемой измерении вы получите только одну меру

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