HSP_MEMBER(第1部分–表)

提示:Hyperion planning 维度信息通过SQL提取

转载国外博主的,经过自己验证,希望你们能用到哦哈哈哈

QQ 1121622088

开始正文吧,骚年,心之所向,所向披靡

文章目录

规划资料库:HSP_MEMBER(第1部分–表)

一、表结构

Field NameSQL Server TypeOracle TypeDescription描述
MEMBER_IDintNUMBER(38,0)The OBJECT_ID of the member.成员的OBJECT_ID。
DIM_IDintNUMBER(38,0)The OBJECT_ID of the dimension to which the member belongs.成员所属维度的OBJECT_ID。
DATA_STORAGEsmallintNUMBER(38,0)The data storage type to be used in Essbase for members without formulas (members with formulas have another table). See the reference table below for details.Essbase中用于不带公式的成员的数据存储类型(具有公式的成员具有另一个表)。有关详细信息,请参见下面的参考表。
TWOPASS_CALCsmallintNUMBER(38,0)The Essbase two-pass calculation property.Essbase两遍计算属性。
0 = not two-pass0 =不通过
1 = two-pass两次1 =两次通过
CONSOL_OPbigintNUMBERThe consolidation operator for the member. This is actually a bitmask that allows for the storage of multiple operators across plan types in a single integer.成员的合并运算符。实际上,这是一个位掩码,可以在单个整数中跨计划类型存储多个运算符。
0 = Add0 =加
1 = Subtract1 =减
2 = Multiply2 =乘
3 = Divide3 =除
4 = Percentage4 =百分比
5 = Ignore5 =忽略
6 = Never6 =永不
USED_FOR_CONSOLsmallintNUMBER(38,0)No longer used.不再使用。
HAS_MBR_FXsmallintNUMBER(38,0)Tells us if the member has a formula. The formula itself does not exist in this table as members can have more than one formula.告诉我们成员是否有公式。该表本身不存在公式,因为成员可以具有多个公式。
0 = no formula0 =无公式
1 = formula1 =公式
BASE_MBRIDintNUMBER(38,0)If the member is shared, then this contains the prototype member ID from the HSP_OBJECT table.如果成员是共享的,则它包含HSP_OBJECT表中的原型成员ID。
ENABLED_FOR_PMsmallintNUMBER(38,0)Tells us if the member has been enabled for process management (workflow).告诉我们是否已为成员启用流程管理(工作流)。
0 = not process management enabled0 =未启用进程管理
1 = process management enabled (table default)1 =已启用进程管理(表默认)
PS_MEMBER_IDintNUMBER(38,0)Planning specific member ID that identifies predefined members used for custom components such as workforce (direct from OracleÉstill not exactly sure what this is for).计划特定的成员ID,该ID标识用于自定义组件(如劳动力)的预定义成员(直接从OracleÉ仍不确定这是做什么的)。
DATA_TYPEintNUMBER(38,0)The data type of the members.成员的数据类型。
0 = unspecified0 =未指定
1 = currency1 =货币
2 = non-currency2 =非货币
3 = percentage3 =百分比
4 = smart list4 =智能列表
5 = date5 =日期
6 = text6 =文本
ENUMERATION_IDintNUMBER(38,0)The ID of the smart list for the members. This links back to HSP_OBJECT and HSP_ENUMERATION.成员的智能列表的ID。这链接回到HSP_OBJECT和HSP_ENUMERATION。
USED_INintNUMBER(38,0)The plan type usage for the member. This is also a bitmask that tells us which plan types are used in a single integer.成员的计划类型用法。这也是一个位掩码,可告诉我们单个整数中使用了哪些计划类型。
HIERARCHY_TYPEintNUMBER(38,0)This is a new column that is supposed to pertain to ASO plan types. I'm working on understanding what it means.这是应该与ASO计划类型有关的新列。我正在努力理解其含义。

二、提取简易属性

我们仅查询Planning中每个成员将拥有的基本成员信息开始。需要两个表:HSP_MEMBER(用于成员信息)和HSP_OBJECT(用于父成员的成员名称和成员名称)。从一个简单的查询开始,以获取成员名称,父名称和解码的属性:

SELECT
    o.OBJECT_NAME AS MEMBER_NAME
	,op.OBJECT_NAME AS PARENT_NAME
	,od.OBJECT_NAME AS DIMENSION_NAME
    ,CASE m.DATA_STORAGE
		WHEN 0 THEN 'Store Data'
		WHEN 1 THEN 'Never Share'
		WHEN 2 THEN 'Label Only'
		WHEN 3 THEN 'Shared Member'
		WHEN 4 THEN 'Dynamic Calc and Store'
		WHEN 5 THEN 'Dynamic'
	 END AS DATA_STORAGE
	 ,CASE m.DATA_TYPE
		WHEN 0 THEN 'Unspecified'
		WHEN 1 THEN 'Currency'
		WHEN 2 THEN 'Non-currency'
		WHEN 3 THEN 'Percentage'
		WHEN 4 THEN 'Enum'
		WHEN 5 THEN 'Date'
		WHEN 6 THEN 'Text'
		ELSE 'Unspecified'
	 END AS DATA_TYPE
FROM
	HSP_MEMBER m
INNER JOIN 
	HSP_OBJECT o ON m.MEMBER_ID = o.OBJECT_ID
INNER JOIN
	HSP_OBJECT op ON o.PARENT_ID = op.OBJECT_ID
INNER JOIN
	HSP_OBJECT od ON m.DIM_ID = od.OBJECT_ID
WHERE
	od.OBJECT_NAME = 'Product'

执行结果

获取维度权限

--QUERY 4:Member Access 
--The query returns Planning for members and forms.
SELECT O.OBJECT_NAME MEMBER,
       (select OA.OBJECT_NAME
          from HSP_OBJECT OA
         where OA.OBJECT_ID = AC.USER_ID) LOGIN_ID,
       Case AC.ACCESS_MODE
         When 1 then
          'READ'
         When 3 then
          'WRITE'
         When -1 then
          'DENY'
       End as ACCESS_MODE,
       Case AC.FLAGS
         When 0 then
          'MEMBER'
         When 5 then
          'CHILDREN'
         When 6 then
          'ICHILREN'
         When 8 then
          'DESCENDANTS'
         When 9 then
          'IDESCENDANTS'
       End as ACCESS_LEVEL,
       OT.TYPE_NAME
  From HSP_OBJECT O, HSP_ACCESS_CONTROL AC, HSP_OBJECT_TYPE OT
 where O.OBJECT_ID = AC.OBJECT_ID
   and O.OBJECT_TYPE = OT.OBJECT_TYPE

 按照维度获取

SELECT O.OBJECT_ID,
       O.Object_Type,
       O.OBJECT_NAME MEMBER_NAME,
       (select oa.object_name
          from HSP_ALIAS A, HSP_OBJECT OA
         where a.member_id = o.object_id
           and oa.object_id = a.alias_id) Alias_name, -- begin case statement 
       case M.consol_op3
         When 0 then
          '+'
         When 1 then
          '-'
         When 2 then
          '*'
         When 3 then
          '\'
         When 4 then
          '%'
         When 5 then
          '^'
         When 6 then
          '~'
       end as consol_value, -- end of case 
       PO.PARENT_ID,
       PO.OBJECT_NAME PARENT_NAME,
       PO.OBJECT_TYPE
  FROM HSP_OBJECT PO, HSP_OBJECT O, HSP_MEMBER M
 where PO.OBJECT_ID = O.PARENT_ID
   and M.member_id = O.object_id
   and O.Object_Type = 33  --33 代表一个维度类型

三、详细SQL-带加减乘除

在11.1.2.2和更早版本中,这是一个简单的解码。每种计划类型都有单独的列。从11.1.2.3开始,他们更改了HSP_MEMBER的结构。现在,我们只有一个CONSOL_OP字段,它再次使用位掩码。更糟糕的是,该位掩码包含多个值,因为找出一个值还不够痛苦!那么我们如何将多个值存储在一个整数中呢?

在这种情况下,他们再次使用位掩码,每个值使用三个位。因此,要存储一个十进制数1,它将变为001。当我们组合多个值时,我们将从右向左移动。因此,如果我要以此顺序存储小数点1和小数点2,则该值将变为010001。然后,此值将存储为整数。存储的整数实际上比我检查过的盒子要大很多,但是出于我们今天的目的,我们不在乎。

那么,我们如何实际确定每种计划类型的合并运算符?对于第一种计划类型,这是一个简单的操作。我们可以只使用我们的按位运算符或BITAND函数来检查该值而没有任何麻烦。当我们尝试在第二位置及以后的位置执行此操作时,就会遇到真正的困难。我们知道每个值都存储在3位中。这意味着我们只需要移三位即可检查下一个值。为此,我们只需将数字乘以我们要平移的头寸数量的乘方即可。因此,对于第二种计划类型,我们将2移至3的幂。对于第三种计划类型,我们将2移至6的幂。但是最后一件事。在执行此操作之前,我们应该检查USED_IN字段以确认我们甚至需要检查操作员。因此,这里去:

SQL SERVER

SELECT
    o.OBJECT_NAME AS MEMBER_NAME
	,op.OBJECT_NAME AS PARENT_NAME
	,od.OBJECT_NAME AS DIMENSION_NAME
    ,CASE m.DATA_STORAGE
		WHEN 0 THEN 'Store Data'
		WHEN 1 THEN 'Never Share'
		WHEN 2 THEN 'Label Only'
		WHEN 3 THEN 'Shared Member'
		WHEN 4 THEN 'Dynamic Calc and Store'
		WHEN 5 THEN 'Dynamic'
	 END AS DATA_STORAGE
	 ,CASE m.DATA_TYPE
		WHEN 0 THEN 'Unspecified'
		WHEN 1 THEN 'Currency'
		WHEN 2 THEN 'Non-currency'
		WHEN 3 THEN 'Percentage'
		WHEN 4 THEN 'Enum'
		WHEN 5 THEN 'Date'
		WHEN 6 THEN 'Text'
		ELSE 'Unspecified'
	 END AS DATA_TYPE
	 ,CONSOL_OP
	,CASE WHEN m.USED_IN & 1 = 1 THEN 
		CASE 
			WHEN m.CONSOL_OP & 6 = 6 THEN '^' 
			WHEN m.CONSOL_OP & 5 = 5 THEN '~' 
			WHEN m.CONSOL_OP & 4 = 4 THEN '%' 
			WHEN m.CONSOL_OP & 3 = 3 THEN '/' 
			WHEN m.CONSOL_OP & 2 = 2 THEN '*' 
			WHEN m.CONSOL_OP & 1 = 1 THEN '-' 
			ELSE '+' END
		ELSE
			NULL
		END AS CONSOL1_OP
	,CASE WHEN m.USED_IN & 2 = 2 THEN 
		CASE 
			WHEN m.CONSOL_OP & POWER(2,3)*6 = POWER(2,3)*6 THEN '^' 
			WHEN m.CONSOL_OP & POWER(2,3)*5 = POWER(2,3)*5 THEN '~' 
			WHEN m.CONSOL_OP & POWER(2,3)*4 = POWER(2,3)*4 THEN '%' 
			WHEN m.CONSOL_OP & POWER(2,3)*3 = POWER(2,3)*3 THEN '/' 
			WHEN m.CONSOL_OP & POWER(2,3)*2 = POWER(2,3)*2 THEN '*' 
			WHEN m.CONSOL_OP & POWER(2,3)*1 = POWER(2,3)*1 THEN '-' 
			ELSE '+' END
		ELSE
			NULL
		END AS CONSOL2_OP
	,CASE WHEN m.USED_IN & 4 = 4 THEN 
		CASE 
			WHEN m.CONSOL_OP & POWER(2,6)*6 = POWER(2,6)*6 THEN '^' 
			WHEN m.CONSOL_OP & POWER(2,6)*5 = POWER(2,6)*5 THEN '~' 
			WHEN m.CONSOL_OP & POWER(2,6)*4 = POWER(2,6)*4 THEN '%' 
			WHEN m.CONSOL_OP & POWER(2,6)*3 = POWER(2,6)*3 THEN '/'
			WHEN m.CONSOL_OP & POWER(2,6)*2 = POWER(2,6)*2 THEN '*' 
			WHEN m.CONSOL_OP & POWER(2,6)*1 = POWER(2,6)*1 THEN '-' 
			ELSE '+' END
		ELSE
			NULL
		END AS CONSOL3_OP
FROM
	HSP_MEMBER m
INNER JOIN 
	HSP_OBJECT o ON m.MEMBER_ID = o.OBJECT_ID
INNER JOIN
	HSP_OBJECT op ON o.PARENT_ID = op.OBJECT_ID
INNER JOIN
	HSP_OBJECT od ON m.DIM_ID = od.OBJECT_ID
WHERE
	od.OBJECT_NAME = 'Account'

Oracle 

SELECT
  o.OBJECT_NAME AS MEMBER_NAME
  ,op.OBJECT_NAME AS PARENT_NAME
  ,od.OBJECT_NAME AS DIMENSION_NAME
  ,CASE m.DATA_STORAGE
    WHEN 0 THEN 'Store Data'
    WHEN 1 THEN 'Never Share'
    WHEN 2 THEN 'Label Only'
    WHEN 3 THEN 'Shared Member'
    WHEN 4 THEN 'Dynamic Calc and Store'
    WHEN 5 THEN 'Dynamic'
    END AS DATA_STORAGE
  ,CASE m.DATA_TYPE
    WHEN 0 THEN 'Unspecified'
    WHEN 1 THEN 'Currency'
    WHEN 2 THEN 'Non-currency'
    WHEN 3 THEN 'Percentage'
    WHEN 4 THEN 'Enum'
    WHEN 5 THEN 'Date'
    WHEN 6 THEN 'Text'
    ELSE 'Unspecified'
    END AS DATA_TYPE
  ,CONSOL_OP
  ,CASE WHEN BITAND(m.USED_IN,1) = 1 THEN 
    CASE 
      WHEN BITAND(m.CONSOL_OP,6) = 6 THEN '^' 
      WHEN BITAND(m.CONSOL_OP,5) = 5 THEN '~' 
      WHEN BITAND(m.CONSOL_OP,4) = 4 THEN '%' 
      WHEN BITAND(m.CONSOL_OP,3) = 3 THEN '/' 
      WHEN BITAND(m.CONSOL_OP,2) = 2 THEN '*' 
      WHEN BITAND(m.CONSOL_OP,1) = 1 THEN '-' 
      ELSE '+' END
    ELSE
      NULL
    END AS CONSOL1_OP
  ,CASE WHEN BITAND(m.USED_IN,2) = 2 THEN 
    CASE 
      WHEN BITAND(m.CONSOL_OP,POWER(2,3)*6) = POWER(2,3)*6 THEN '^' 
      WHEN BITAND(m.CONSOL_OP,POWER(2,3)*5) = POWER(2,3)*5 THEN '~' 
      WHEN BITAND(m.CONSOL_OP,POWER(2,3)*4) = POWER(2,3)*4 THEN '%' 
      WHEN BITAND(m.CONSOL_OP,POWER(2,3)*3) = POWER(2,3)*3 THEN '/' 
      WHEN BITAND(m.CONSOL_OP,POWER(2,3)*2) = POWER(2,3)*2 THEN '*' 
      WHEN BITAND(m.CONSOL_OP,POWER(2,3)*1) = POWER(2,3)*1 THEN '-' 
      ELSE '+' END
    ELSE
      NULL
    END AS CONSOL2_OP
  ,CASE WHEN BITAND(m.USED_IN,4) = 4 THEN 
  CASE 
    WHEN BITAND(m.CONSOL_OP,POWER(2,6)*6) = POWER(2,6)*6 THEN '^' 
    WHEN BITAND(m.CONSOL_OP,POWER(2,6)*5) = POWER(2,6)*5 THEN '~' 
    WHEN BITAND(m.CONSOL_OP,POWER(2,6)*4) = POWER(2,6)*4 THEN '%' 
    WHEN BITAND(m.CONSOL_OP,POWER(2,6)*3) = POWER(2,6)*3 THEN '/' 
    WHEN BITAND(m.CONSOL_OP,POWER(2,6)*2) = POWER(2,6)*2 THEN '*' 
    WHEN BITAND(m.CONSOL_OP,POWER(2,6)*1) = POWER(2,6)*1 THEN '-' 
    ELSE '+' END
  ELSE
    NULL
  END AS CONSOL3_OP
FROM
	HSP_MEMBER m
INNER JOIN 
	HSP_OBJECT o ON m.MEMBER_ID = o.OBJECT_ID
INNER JOIN
	HSP_OBJECT op ON o.PARENT_ID = op.OBJECT_ID
INNER JOIN
	HSP_OBJECT od ON m.DIM_ID = od.OBJECT_ID
WHERE
	od.OBJECT_NAME = 'Account'

结果

SQL SERVER

ORACLE 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值