Key Attribute和Key Column:蘋果和桔子
“SQL Server 2005分析服務裡面的Key Attribute和Key Column有什麼關係呢?”今天在和一夥對微軟的分析服務和商業智慧技術感興趣的朋友們聊天的時候,有幾位突然問了這個問題。
確實,兩個概念裡面都有Key這個字,但是他們之間究竟有什麼關係呢?我的答案是他們就是蘋果和桔子,沒有多大關係。兩個概念雖然都是在多維資料庫的維度物件中存在的,但是兩者扮演的確實截然不同的角色。
Key Attribute
Key Atribute是一個維度的主鍵屬性,Key Attribute決定了一個維度例項中成員的最小粒度取值。拿日期時間舉個例子,如果時間維度中我們設定一個精度為小時的日期時間值或與其一一對應的某列作為Key Attribute,那麼就代表時間維度最小粒度的成員就應該是表示一個精度到小時的確切時間,如果Key Attribute是天,那麼時間維度最小粒度的成員就是精度到天。
正是因為如此,維度的Key Attribute也是用於連線維度與度量組、維度與維度之間的連線依據(除了事實維度關係外,這種維度關係表示維度成員和度量值成員是一一對應的關係)。那上面的例子來說,如果我們設定一個精度為小時的欄位為Key Attribute,那麼我們度量值在時間維度上的聚合就可以達到小時級別,否則就只能達到天級別。
因此,一個維度,只能有一個Key Attribute,就像一張關係型的表只能有一個主鍵一樣(要說這兩者概念差不多也沒有大錯,通常維度表的主鍵就是維度的Key Attribute)。
Key Column
那麼Key Column呢?Key Column是用來確定一個Attribute成員取值的標準的列或列的組合。一個Attribute的成員通常是該Atrribute在資料來源對應維度表中的列中的所有唯一值(注意,是唯一值),例如商品類別名稱,如果你在商品類別表中有30個唯一值,那麼商品類別Atrribute就會生成30個成員。
不過這種情況會有特例,比如說時間維度,時間維度表裡面的Semester,如果我們僅僅依據Semester來判斷Semester Attribute的成員的,那麼這個Attribute就只會有2個成員:上半年和下半年,而實際情況並非如此。
2002年的上半年與2003年的上半年在Semester Attribute中通常應該被看作是不同的Memeber,除非使用者希望認為2002年的上半年和2003年的上半年應該被視為同一個成員。那麼如何讓分析服務在計算多維資料庫的時候能分辨出2002年的上半年和2003年的上半年呢?就必須要在Semester的Key Column裡面同時繫結Year和Semester兩列。那麼客戶不需要區別呢?當然就只要繫結Semester一個列就可以啦。
因此,一個Attribute裡面會有多少個成員,是由這個Attribute的Key Column決定的。說句題外話,至於Attribute中每個成員的顯示值和後臺實際值,則是分別由Name Column和Value Column決定的。
附
對於上面這個問題的深入分析就需要看客戶的實際需求,如果客戶看一下所有銷售定單中上半年的退訂率和下半年的退訂率,那麼在Semester Attribute中同時繫結Year和Semester就不能直接給出正確的結果。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/9079672/viewspace-405419/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- js keyup、keypress和keydown事件JS事件
- valueforkey和objectforkey區別Object
- onkeyup和onkeydown事件的區別事件
- calcMode, keyTimes和keySplines 屬性
- 如何處理redis叢集中hot key和big keyRedis
- Mybatis中updateByPrimaryKeySelective和updateByPrimaryKey的用法區別MyBatis
- oracle資料庫primary key和unique key的異同Oracle資料庫
- AttributeError: 'dict' object has no attribute 'has_key'ErrorObject
- Entity Framework Code-First(9.1):DataAnnotations - Key AttributeFramework
- keyclaok~keycloak存到cookie中的值和session_stateCookieSession
- keystone和beaengine的編譯編譯
- Git 中 SSH Key 生成和配置Git
- Flutter Key的原理和使用(三) LocalKey的三種型別Flutter型別
- 關於primary key和foreign key的問題處理
- MGETkey[key…]
- Flutter Key的原理和使用 (一) 沒有Key會發生什麼Flutter
- Map按照key和value進行排序排序
- memcache的item key和序列化
- Java交換map的key和value值Java
- Dictionary key 根據ASCII排序並拼接key和value並HMACMD5-iOSASCII排序MacACMiOS
- Entity Framework Code-First(9.9):DataAnnotations - ForeignKey AttributeFramework
- Vue進階(么伍么):el-table-column :key應用Vue
- git生成ssh key和多賬號支援Git
- mysql specified key was too long與Index column size too large. The maximum column size is 767 bytes.MySqlIndex
- With KEY & With Table KEY 的使用
- keyup,keypress,keydown事件的區別事件
- db2 -attribute of key are miss in result set . db2 錯誤DB2
- Redis中KEYS和SCAN命令的區別和建議Redis
- mysql中key 、primary key 、unique key 與index區別MySqlIndex
- Redis熱點key大keyRedis
- Spark入門(五)--Spark的reduce和reduceByKeySpark
- Git賬號註冊和SSH_KEY配置Git
- REDIS 快取的穿透,雪崩和熱點keyRedis快取穿透
- e.keyCode和e.which使用
- spark RDD,reduceByKey vs groupByKeySpark
- js的事件屬性altKey,ctrlKey,shiftKey介紹JS事件
- Keycloak棄用大多數Keycloak介面卡,包括Spring Security和Spring BootSpring Boot
- Hbase rowKey 最佳實踐 和 mysql id 對比MySql