2014年12月15日 星期一

QlikView 超強的 Data Modeling- Crosstable精靈教你如何轉換表格

你是不是也有下圖這類型表格資料,尤其在做年度預算時更是常常出現;這類的資料在QV裡就像是"一塊小蛋糕",我們可以利用精靈的方式就可以將資料滙入囉!一點都不需要在次資料表格的加工


=====================================================================
步驟說明:
 
選擇table files點選你的檔案,接著點選下一步


你會發現這張報表有些表頭資料是我們不需要的,你可以選擇"Delete Marked" ,但是考量到以後我可能有重覆的資料要滙入所以還是套用判斷式比較好,接下來我們使用此方法來示範

選擇conditional deleted ,注意我下圖中有圈選欄1這是我拿來判斷,當欄1有空值時就刪除不要滙入資料


按OK 後就會出現像下圖一樣,表頭空白的資料不見了。


接著下一次,我們來處理交叉表格的處理
首先,我們先訂義Label ,再點選Cosstable 


出現此畫面時,就是在定義你的横軸資料跟原本的維度資料,
紅色的地方指的就是不需要轉換方向的欄位
綠色指的是要轉換方向的維度,並且可以重新命名為"Month"
藍色指的是資料值,重新命名為"AMT" 然後確定



看到了嗎,資料已經從橫向變成直的囉!


2014年12月2日 星期二

如何加快QlikView速度及效能-1


如何加快QlikView速度及效能



  • Allow Minimize  縮小時QV 不會運算,當打開來時才會運算

  •  Calculation Condition  如果條件不符合時,則資料不會運算,且資料內容可以呈現ERROR 提示訊息

  • Data Model Scenarios and Solutions 

  • Complex Dimensions and Expressions  盡量減少複雜的維度計算,及Count() 方式,
如果要減少COUNT() 你可以在Script語法裡增加一個虛欄位OrderRecordCounter , 例如 :
LOAD
OrderID,
1 as OrderRecordCounter
Resident Facts;

之後要統計時只需要用SUM(OrderRecordCounter)即可


2014年11月24日 星期一

QlikView 語法攻略- 列出維度欄位控制選擇條件

最近在國外BLOG 看到一個範例與大家分享
這個範例原本是在說明另一種使用Chart Object 呈現像multibox選擇條件的方式
但是其中使用了一項控制方式特別拿出來跟大家說明一下
因為這樣的應用再進階一點可以控制到使用維度的互動,或是User 可用的維度呈現控制
















箭頭下方的Multibox Fields 即為維度清單列表, 使用者勾選了那些表格則會在上方呈現欄位供使用者條件選擇.接下來我們來拆解這個小丿步吧!


首先  1: 在語法裡必需要新增一個自定的維度清單TABLE
Multibox:
LOAD * INLINE
[
%Multibox
Year,
Name,
City,
Country,
Product,
Salesperson
];

而Multibox Fields  就是拿取%Multibox 欄位利用List Box 來呈現

動作 2:  建立一變數名稱為eMultiboxShow
         公式:   Index('|' & Concat(%Multibox, '|') &   '|', '|' & $1 & '|') > 0

         Concat(%Multibox, '|')  指是的選擇欄位的合併, 例如: 選了year , name
        則資料的組成就會變為   year|name
        那整個公式的測試請改為下列 , 例如 'Year'   ; 有發現嗎原本公式是$1 但現在用'Year'取代         了, 這個的意思是$1是傳入的參數的第一位,只是我們現在直接用Year 來使用  
      *替代語法*  Index('|' & Concat(%Multibox, '|') &   '|', '|' & 'Year' & '|') 

      {Examples index() 找出字串位置 :  
                            index( 'abcdefg', 'cd' ) returns 3
                  index( 'abcdabcd', 'b', 2 ) returns 6
                            index( 'abcdabcd', 'b', -2 ) returns 2
     }
    運用了Index() 查字串的特性,所以會得到>0 的位置

動作 3: 啓動條件  在Chart Object
       
             在啟用條件式用填入 $(eMultiboxShow('Year'))
              $() 是使用變數的意思,eMultiboxShow 是我們剛剛設的變數名稱,需要傳入值來取代$1 這數是傳用'Year'  這個就會和*替代語法*一樣了, 有發現嗎


以上很簡單的方式就能控制條件了。
而原本的Multibox 改進的方式可參考國外網站

2014年11月2日 星期日

Document Chaining - 檔案鏈接 大資料量分析方式之一

其實我們大部份的分析行為都是針對統計運算後的數值來解析, 但是
實際上我們都是利用明細資料來運算出來的, 也因為如此以前的OLAP 方式就會變成效能愈來愈差的狀況,但實際上我們應當要將資料的屬性切分開來,怎麼說呢?
其實就是引導使用者先以高視角的方式分析出資料,找出自己想看的資料區間後,再引導使用者查看明細資料,這樣的做法可以加快且有效率的讓使用者可以快速分析問題, 又不用一開始就開一個很大的明細檔來分析。

這方式簡單來說就是分析像EXCEL 的樞紐分析, 點選要的分析區域後再查看明細.

那在QlikView 的執行方式是什麼呢?
我們可以利用類似的方法叫做"Document Chaining"

會有一個事先滙總的分析資料, 利用維度條件串接明細資料條件
如下圖, 左方是一個滙總的分析,其維度有日期及地點,
右方是一個明細資料,其維度有日期及地點,
各位有發現了嗎?    沒錯,就是會相同的維度分析資料
也就是利用這個方式, 使用者可以快速分析又快速查詢資料

實現方法:
先製做兩個APP , 一個為匯總資料, 一個為明細資料 , 其中都有共用的維度
在滙總的APP 裡建立一個按鈕, 這按鈕是USER 確定要查詢明細時使用,

建立Actions ,

2014年10月31日 星期五

QlikView 語法攻略 - ValueList


ValueList

返回一個set資料,呈現於計算中的維度。
valuelist函數可以創建一個維度資料的圖表(Chart object),可以通過重述與圖表表達的相同參數的valuelist函數來引用對應於一個特定的表達的圖表值。

所以不是資料一定都要用Inline 寫在Script 裡,若是臨時用表或是一次性使用的維度都可以運用此函數。

使用方式 :
下方圖例就是利用valuelist 來產生一個陣列的表


下載範例: http://community.qlik.com/docs/DOC-5011

2014年9月10日 星期三

QlikView 語法攻略 - Aggr 進階彙總函數

Aggr 進階彙總函數

其實這個函數用很簡單的比喻就是像是SQL 的Group By 的感覺,舉個例子:


 原始資料的列表:














Count 各Sales 有多少個客戶










Aggr彙總出上一步驟中Count 各Sales 有多少個客戶的值,所以下表即呈現1,2,3,5
而解釋下表就是;
賣出一個客戶的sales 有2個,賣出2個客戶的Sales 有1個







以上大家應該可以有解單的了解了,接下來我們來進階挑戰一下:

問題一, 如果我的欄位是CycleGroup 或是Drill-down 欄位呢, 那怎麼寫這變動的欄位呢?
解答: 
----------------------------------------------------------------------------------------------------------------------------
將欄位改為[$(=GetCurrentField(CycleGroup))] 即可
Aggr(count(Customer), [$(=GetCurrentField(CycleGroup))])

問題二 , 我不知道客戶是選擇了什麼欄位,如何變動判斷?
解答:
-------------------------------------------------------------------------------------------------------------------------------
此時我會建議大家利用字串組合的方式來達成這個目的,
如: 建立一個變數
變數 v_DimStrif(GetSelectedCount(SalesRep)>0,', SalesRep')&if(GetSelectedCount(Customer)>0,', Customer' ) 
修改語法變成 字串組合方式如下:
=$(='Aggrcount(Customer) ' & v_DimStr &' )'  )
特別注意:$(=’’) 是字串組合的意思

如此一來就能彈性動態的Aggr 進階彙總囉!!

2014年8月4日 星期一

什麼是Partial Reload 如何部份更新資料?

你有多少龐大的資料需要每天,每小時更新一次?
或者是當日資料的修改資料要定時的上傳分析?
Partial Reload 允許的QlikView應用時,添加或更換的資料表到資料模型裡,同時保留現有的表不會受到影響。由於選擇更換的資料表資料量已經變少了,所以更能Reload重新加載變得更快。

如何讓Partial Reload生效,最重要的就是要在語法裡增加前置提示  Replace 或 Add
例如:
  Table1:
  LOAD s_store_id, s_store_id From store.csv;                            //(這是正常的 relaod)
  Add LOAD s_store_id, s_store_id From Newstore.csv;            //(這是 Partial reload)

Table1:
   LOAD s_store_id, s_store_id From store.csv;                          //(這是正常的 relaod)
   Replace LOAD s_store_id, s_store_id From Newstore.csv;     //(這是 Partial reload)

正常的 relaod - 第一語句將執行產生Table1, 但立刻被第二句取而代之的是 Newstore 的內容但是表的名稱是 Table1;
Partial reload- 第一語句不會被執行, 但立刻被drop掉,第二句取而代之的是 Newstore的內容但是表的名稱是 Table1

下圖為資料表 store.csv     










下圖為資料表 Newstore.csv

執行後的結果為:
s_store_sk = 1 的資料s_store_id 變成test 了 , 第15,16的新資料也進來了

範例下載Sample 請按此
在我的範例中有提供三種不同的更新語法可以參考哦!!