如何在Pentaho xml架构中使用CalculatedMember(维度,而不是度量)?

时间:2015-03-10 20:57:15

标签: schema mdx pentaho mondrian saiku

我有这个MDX查询:

WITH 
  MEMBER [CLIENT].[WITHOUT CLIENT X] AS 
    '[CLIENT].[All CLIENTs] - [CLIENT].[CLIENT X]' 
SELECT 
  [Measures].[Sales] ON COLUMNS
 ,{[STORE].[All STOREs].Children} ON ROWS
FROM [Sales]
WHERE 
  CrossJoin
  (
    {[YEAR].[2015]}
   ,{[CLIENT].[WITHOUT CLIENT X]}
  );

此查询返回核心结果(所有商店销售没有 [客户]] [客户X]

现在,我想在Saiku,OpenI,BTable或Pivot4J中使用此计算成员( [CLIENT]。[WITHOUT CLIENT X] )作为正常维度或类似的东西。

为此我在schema.xml中添加了:

<CalculatedMember name="WITHOUT CLIENT X" 
 formula="([CLIENT].[All CLIENTs] - [CLIENT].[CLIENT X])" hierarchy="CLIENT" parent="CLIENT" visible="true"></CalculatedMember>

如果我跑:

 Select [Measures].[Sales] on COLUMNS,
 {[STORE].[All STOREs].Children} ON ROWS
 from [Sales]
 WHERE CrossJoin({[YEAR].[2015]}, {[CLIENT].[WITHOUT CLIENT X]})

返回的结果是corect,但我看不到这个维度[客户端]。[没有客户端X]。

在Saiku,OpenI或Pivot4J,我无法找到这个维度。 由于CDA(/ api / olap / getCubeStructure),BTable将此维度设为 MEASURES ,结果为:

 {
    "type": "measure",
    "name": "WITHOUT CLIENT X",
    "caption": "WITHOUT CLIENT X]",
    "qualifiedName": "[CLIENT].[CLIENT X]",
    "memberType": "FORMULA"
  }

但没用,因为我无法在过滤器中使用。

你有相同的答案吗?

提出问题:

  1. 为什么你使用成员而不是命名集?
  2. 因为维度CLIENT它的巨大(超过50000)查询成员在1秒内运行并且设置超过5分钟

    1. 为什么不使用EXCEPT?
    2. 与1相同。

      1. 为什么不使用mdx查询?
      2. 因为最终报告是针对非tehnic的,他们想要更改此过滤器。

        更新信息

        我将 [CLIENT]。[WITHOUT_this_CLIENT] 重命名为 [CLIENT]。[WITHOUT CLIENT X] [CLIENT]。[我的特殊客户] < / em> with * [CLIENT]。[CLIENT X] *以避免一些混淆。

        我想以这种方式过滤一个级别:添加除一个( CLIENT X )之外的所有成员(CLIENT)。

        当我使用mdx查询时,返回的结果是corect ,因为GUI OLAP客户端无法读取我的xml架构。

        我不知道我的错误在哪里。

        谢谢你, 地理位置

        解决

        对于我想要的东西(从大列表中过滤掉一个元素),答案是这样的:

        我创建了另一个维度,仅用于过滤。

            <Dimension type="StandardDimension" visible="true" highCardinality="false" name="CLIENT X">
            <Hierarchy visible="true" hasAll="true">
              <Table name="SALES" schema="SALES" />
              <Level name="CLIENT X" visible="true" column="CLIENT" type="String" uniqueMembers="false" levelType="Regular" hideMemberIf="Never">
                <KeyExpression>
                  <SQL dialect="oracle">
                    <![CDATA[CASE WHEN CLIENT =  'CLIENT X'  THEN  'CLIENT X' ELSE 'WITHOUT CLIENT X' END]]>
                  </SQL>
                </KeyExpression>
              </Level>
            </Hierarchy>
          </Dimension>
        

1 个答案:

答案 0 :(得分:0)

您没有正确定义您的成员。即。父成员必须是新创建成员的父级的完全限定名称,而不是级别的名称。仔细阅读this,你就会弄清楚。