1. 程式人生 > >MDX語法學習(一)filter與iif的使用

MDX語法學習(一)filter與iif的使用

當我們建好立方體之後,就可以使用MDX語法大展拳腳,下面我們以一個簡單的例子逐步展開
先介紹一下我們的立方體,通過這個例子來學習filter與iif的使用。 我們首先談需求 需求一:得到20095月,產品BM00000001的各城市年累計處方量 需求分析: 度量值:年累計處方量[Year_Pres_Quantity] 維度:[cust].[City_Name].[City_Name] 條件:[月份].&[2009-05-01T00:00:00][material].[Material].&[BM00000001] 因此,構造我們的MDX如下: select [Measures].[Year_Pres_Quantity] on 0         ,non empty [cust].[City_Name].
[City_Name] on 1
    from [醫院銷售分析]     WHERE ([月份].&[2009-05-01T00:00:00] ,[material].[Material].&[BM00000001]) 需求二:得到20095月,產品BM00000001的各城市目標醫生的年累計處方量 注意:這裡多了一個要求,必須是目標醫生的 在我們的傳統SQL中,這是很容易實現的,我們在where中增加一個where是否目標醫生=true 即可 但是,在MDX中,where後面只能接維度,是否目標醫生並不是我們的維度 那麼,怎麼辦呢? 輪到filter上場了 構造我們的MDX如下:     select ([Measures]
.[Year_Pres_Quantity]) on 0
        ,non empty filter([cust].[City_Name].[City_Name] ,[Measures].[是否目標醫生]=true) on 1     from [醫院銷售分析]     WHERE ([月份].&[2009-05-01T00:00:00] , [material].[Material].&[BM00000001]) 需求三:得到20095月,產品BM00000001的各城市目標醫生和非目標醫生各自的年累計處方量 在我們的傳統SQL中,這種需求可以通過case when 來實現,那麼在MDX裡有沒有類似的東西呢? 當然有,輪到
iif上場了 構造我們的MDX如下: WITH MEMBER [目標醫生年累計處方量] AS 'IIf([Measures].[是否目標醫生]=false, [Measures].[Year_Pres_Quantity],null)' MEMBER [非目標醫生年累計處方量AS 'IIf([Measures].[是否目標醫生]=true, [Measures].[Year_Pres_Quantity],null)'     select {[目標醫生年累計處方量], [非目標醫生年累計處方量]} on 0        ,non empty [cust].[City_Name].[City_Name] on 1        from [醫院銷售分析]        WHERE ([月份].&[2009-05-01T00:00:00] ,[material].[Material].&[BM00000001]) 其實,我還試圖過直接寫在MDXselect中,不過不行,會報錯,原因,我還搞不清楚,有哪位大蝦明白的話,不凡指點一二,難道是切片技術不能直接寫在Select中?     select (IIf([Measures].[是否目標醫生]=false, [Measures].[Year_Pres_Quantity],0)        ,IIf([Measures].[是否目標醫生]=true, [Measures].[Year_Pres_Quantity],0)) on 0        ,non empty [cust].[City_Name].[City_Name]         on 1        from [醫院銷售分析]        WHERE ([月份].&[2009-05-01T00:00:00],[material].[Material].&[BM00000001]) 出錯:Axis0 函式需要引數使用一個元組集表示式。實際使用的卻是字串或數值表示式。 需求四:得到20095月,產品BM00000001的各城市目標醫生和非目標醫生各自的年累計處方量,並且要得到總計欄 粗一看,這個需求和需求三沒啥區分,不就是要得到總計嗎,資料倉庫裡得到總計很容易哪,用merber就可以了,我們來寫寫 WITH MEMBER [目標醫生年累計處方量] AS 'IIf([Measures].[是否目標醫生]=false, [Measures].[Year_Pres_Quantity],null)' MEMBER [非目標醫生年累計處方量AS 'IIf([Measures].[是否目標醫生]=true, [Measures].[Year_Pres_Quantity],null)'     select {[目標醫生年累計處方量], [非目標醫生年累計處方量]} on 0        ,non empty [cust].[City_Name].merber   on 1        from [醫院銷售分析]        WHERE ([月份].&[2009-05-01T00:00:00] ,[material].[Material].&[BM00000001]) 看看,把[cust].[City_Name]. [City_Name]改為[cust].[City_Name].merber 總計就出現啦!是不是大功告成了呢? 別急,仔細看看,咦,為什麼目標醫生和非目標醫生下的小計值都是一樣的? 哎,這就是資料倉庫的特色哪 任何一個東西都不是十全十美的 資料倉庫,他的速度之所以這麼快,是因為他用立方體把很多資料都事先存好了,這樣,你要總計,他就能直接給你找出來,不需要二次計算,可是,如果你要iif之後的小計,他就無能為力了,因為他沒有存這樣的資料哪!

相關推薦

MDX語法學習()filteriif的使用

當我們建好立方體之後,就可以使用MDX語法大展拳腳,下面我們以一個簡單的例子逐步展開 先介紹一下我們的立方體,通過這個例子來學習filter與iif的使用。 我們首先談需求 需求一:得到2009年5月,產品BM00000001的各城市年累計處方量 需求分析: 度量值:年累計處方量[Year_Pres_Q

Swift基礎學習()基本語法

postfix 合數 語言特性 初學者 表達式 public 能夠 dict 命名   Swift 簡介(贊美一番,收集了多篇 關於Swift 學習教程的語言簡介一直以為英語和漢語混寫的時候只是英語字母結尾的地方打空格,原來是英語字母的開頭和結尾都要加一個空格,英語字母

thinkphp5學習()——thinkphp5的目錄結構開發規範

控制 配置 helper ole url database 數據 tab 工具配置 開發規範: 目錄和文件 目錄使用小寫+下劃線; 類庫、函數文件統一以.php為後綴; 類的文件名均以命名空間定義,並且命名空間的路徑和類庫文件所在路徑一致; 類文件采用駝峰法命名(首字母大

前端學習入門-angular2-Typescript基本語法

十分 有用 angular2 聲明 else 存在 turn 只知道 his   基礎類型   布爾值   最基本的數據類型就是簡單的true/false值,在JavaScript和TypeScript裏叫做boolean(其它語言中也一樣)。 let isDon

Spring Cloud學習() 服務的註冊發現(Eureka)

demo ice with gap 註冊中心 rop esc ann model 1 創建服務註冊中心 在這裏,我需要用的組件是Spring Cloud Netflix的Eureka ,eureka是一個服務註冊和發現模塊。 1.1 創建model工程作為服務註冊中心

robot framework學習——測試資料語法

Robot Framework通過檔案的副檔名來選擇使用何種解析器. 副檔名不分大小寫. 可以識別的副檔名包括: HTML: .html, .htm 和 .xhtml TSV: .tsv 純文字: .txt 和特殊的&nbs

robot framework學習——測試數據語法

文本編輯器 src https moni bubuko test creat 忽略 ctu Robot Framework通過文件的擴展名來選擇使用何種解析器. 擴展名不分大小寫. 可以識別的擴展名包括: HTML: .html, .htm 和 .xhtml TSV: .

基於Kubernetes的機器學習微服務系統設計系列——()概念構想

內容提要 系統構想 微服務化 Docker容器 Kubernetes   隨著資訊科技的進步,網際網路的應用日新月異。計算機新技術的發展也是突飛猛進。當前,雲端計算、AI、機器學習、自然語言處理、物聯網等成為熱點話題。隨之而興起的技術

建構函式原型鏈和麵向物件的學習()

下面文章所有的例子(關於什麼是建構函式) 例子中完整的js程式碼在文章最下面 第一個例子 function fun(){                 this.na

BCode解碼練習 bittorrent 學習() 種子檔案分析bitmap點陣圖

在學習BT協議中的一個小練習 參考了 https://github.com/airtrack/bitwave 具體B編碼解釋 可以自行搜尋或者參考 這篇文章  bittorrent 學習(一) 種子檔案分析與bitmap點陣圖 程式碼 1 #pragma

ExtJs學習 Ext.define Ext.create 方法總結

/** *@summary Ext.define 與 Ext.create方法的學習 */ Ext.define('TestDefine', { extend:'Ext.window.Window',

Hibernate學習之hql sql hql 語法詳解

Hibernate中查詢:     createQuery( String qlString)使用的是HQL語句;     createNativeQuery (String sqlString)使用的是SQL語句;   關係HQL與SQL區別:    hql 語法詳解:   

JavaWeb學習筆記及案例()JSPEL表示式和JSTL

1.JSP 1.1JSP的三大指令 page include taglib 指令的寫法 <%@ 指令名字 %> 1.1.1jsp的page指令 1.extends 用於指定jsp翻譯成java檔案後,繼承的父類是誰,一般不改 2.s

資料結構演算法之美 課程筆記 如何抓住重點,系統高效地學習資料結構演算法?

什麼是資料結構?什麼是演算法? 從廣義上講,資料結構就是指一組資料的儲存結構。演算法就是操作資料的一種方法。 從狹義上講,是指某些著名的資料結構和演算法,比如佇列、棧、堆、二分查詢、動態規劃等。 那資料結構和演算法有什麼關係呢? 資料結構和演算法是相輔相成的。資料結構是為演算法服務的

Spring學習——配置檔案註解(

bean標籤 一、屬性 name 給被管理的物件起個名字,獲得物件時根據該名稱獲得物件 可以重複,可以使用特殊字元 class 被管理物件的完整類名 id 與name屬性功能一樣 名稱不可重複,不能使用特殊字元 儘量使用name

、如何學習資料結構演算法

什麼是資料結構?什麼是演算法?(是什麼) 資料結構是為演算法服務的,演算法要作用在特定的資料結構之上。 因此,我們無法孤立資料結構來講演算法,也無法孤立演算法來講資料結構; 舉例: 圖書館儲藏書籍你肯定見過吧?為了方便查詢,圖書管理員一般會將書籍分門別類進行“

Ubuntu 16.04 TX2 學習筆記() 系統軟體源更新

1.系統更新 ~$: sudo apt-get update ~$: sudo apt-get dist-update 2.更改軟體源 TX2的軟體源為國外伺服器,網速會很慢,需要換國內的ARM源。 備份/etc/lib路徑下的source.list檔案,然後在終端

SpringMVC學習()——SpringMVC介紹入門

SpringMVC介紹 SpringMVC是什麼? SpringMVC和Struts2都屬於表現層的框架,它是Spring框架的一部分,我們可以從Spring的整體結構中看得出來: SpringMVC處理流程 SpringMVC處理流程如下圖

MongoDB學習筆記()簡介安裝

[mongodb-org-3.6] name = MongoDB Repository baseurl = https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/3.6/x86_64/ gpgcheck = 1 enabled = 1 gpgk

2.1Python基礎語法)之註釋資料型別:

返回總目錄 目錄: 1.註釋 2.亂碼 3.變數 4.資料型別 5.資料的轉換 6.動態,靜態和強型別,弱型別 (一)註釋:(編譯時是被編譯器忽略的) 1.註釋的分類: 2.特殊註釋: (二)亂碼:(主要出現在2.x版本) 對亂碼的理解: 其實出