IcCube - 忽略默认成员
IcCube - disregard the default member
是否可以在设置多维数据集(在"advanced"设置中)计算所有成员时忽略默认成员?
示例:
在堆积柱形图中,子元素的份额加起来不等于 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>
在 MDX 中,未知成员是类似于层次结构中任何其他成员的成员,它的父级是 [All] 成员。
在您的示例中,由 unknonwn 成员 [categories].[name].[-] 定义的总和为 11 的最后两行也是 [All] 成员的一部分。您可以将 all 视为获取所有行的一种方式,因此 MDX All 成员不会过滤任何内容。
您有两种可能性:
a) 您可以创建一个修改后的类别层次结构,它具有已知/未知的中间级别,并将“已知”成员定义为此层次结构的默认值。
b) 您可以在创建此 known/unknown 的维度中创建第二个层次结构并将其隐藏给标准用户。这里我们避免修改主层级。
c) 避免使用正确的 SQL 语句或 Javascript 视图加载 'unknown' 行。
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] 成员的行为不像 all 总是为未来的问题铺平道路。我真的会选择更直观的选项 c),其他选项意味着对 MDX 和您的模型的了解可能无法让您活下来。
是否可以在设置多维数据集(在"advanced"设置中)计算所有成员时忽略默认成员?
示例: 在堆积柱形图中,子元素的份额加起来不等于 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>
在 MDX 中,未知成员是类似于层次结构中任何其他成员的成员,它的父级是 [All] 成员。
在您的示例中,由 unknonwn 成员 [categories].[name].[-] 定义的总和为 11 的最后两行也是 [All] 成员的一部分。您可以将 all 视为获取所有行的一种方式,因此 MDX All 成员不会过滤任何内容。
您有两种可能性:
a) 您可以创建一个修改后的类别层次结构,它具有已知/未知的中间级别,并将“已知”成员定义为此层次结构的默认值。
b) 您可以在创建此 known/unknown 的维度中创建第二个层次结构并将其隐藏给标准用户。这里我们避免修改主层级。
c) 避免使用正确的 SQL 语句或 Javascript 视图加载 'unknown' 行。
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] 成员的行为不像 all 总是为未来的问题铺平道路。我真的会选择更直观的选项 c),其他选项意味着对 MDX 和您的模型的了解可能无法让您活下来。