2014年7月31日 星期四

QlikView 也能套印報表 ( How to setting a official report in QlikView )

除了彈性互動的分析之外,QlikView也可以產生公司套表的報表格式,例如有表頭的公司名稱啦,及表尾的簽名欄;而且設計這些Reports一點都不難,只要掌握幾個技巧你也可以輕鬆的設定報表,並可以定時的產品PDF 檔案出來。


  • 編輯報表,新增一張報表

  • 報表設定 , 用來調整紙張邊界,頁首頁尾的文字




  • 頁面設定 , 所有控制頁面內容設計 (包含橫向還是直向紙張,長表格資料跨頁以及頁首,頁尾的說明文字)
*資料表格會跨頁時請選 "多選頁"



* 若資料要以某個主題作為篩選分頁時,請勾選下列

* 若資料有前後頁說明,或是你要Show出篩選分頁的內容時,可以將簡介高度設為5%左右,再將分頁的欄位拉至此空間裡就可以達到每一頁分頁時都可以看到是以那個資料作為篩選分頁的內容。


重新用顏色視別設定的區域圖



接著我們就可以來列印看看囉 :) 






2014年7月9日 星期三

將整理好的資料排程滙出成TXT 檔 export txt file format from MARCO


如何將整理好的資料排程滙出成TXT 檔

步驟1:
Edit Module  ( Ctrl+M )  , 增加下列語法
/*===============================
Sub exp()

Dim strNow, strDD, strMM, strYYYY, strFulldate
strYYYY = DatePart("yyyy",Now())
strMM = Right("0" & DatePart("m",Now()),2)
strDD = Right("0" & DatePart("d",Now()),2)
fulldate = strYYYY & strMM & strDD

set obj = ActiveDocument.GetSheetObject("CH06")

obj.Export "C:\ProgramData\QlikTech\Documents\DataName"&fulldate&".txt","|" 
ActiveDocument.Save
Application.Quit
End Sub

/*===============================
說明:  CH06 是你要滙出資料表的ObjectID 
obj.Export 後為檔名而 "|" 為輸出時的欄位間隔符號





步驟2:
           加入一個OnPostReload 的Trigger ;
            下列圖中我有先指定只要前一天的資料條件,再執行Marco



以上存好後再用command 的方式執行就會自動出現滙出的TXT 檔案囉.



2014年7月3日 星期四

QlikView 語法攻略 - 改變用IF 換成用Pick + Match

每次在寫資料計算判斷時寫了一大堆的IF 都讓我不知道該怎麼看語法到底對應到那個去了,
就想到在SQL 語句裡常寫的CASE....WHEN.....END 方式;
我們先來看之前的笨笨寫法如下.

if(status=A,green,
         if(status=B,Amber,
                  if(status=C,Red,Grey))).

看到了嗎,上頭一堆IF 的判斷,再亂一點我就看不出來是在true 還是false 的條件了
所以我改了寫法如下

pick( match(status, 'A', 'B', 'C')+1, 
         'Grey'       ,
         'green'     ,
         'Amber'    ,
         'Red'
      )

說明: status 是欄位; 判斷欄位內容中是'A' 還是'B'還是'C' , 而+1 是為了其它值使用.

QlikView - Set Analysis 日期時間分析

常常寫到要做日期期間比較的分析,整理一下公式如下:


上月
sum({$<Year={'$(=Year(AddMonths(Max(OrderTime),-1)))'}
    ,Month={'$(=Month(AddMonths(max(OrderTime),-1)))'}
    ,[Shop Name]=>} SalesAmt)
 
說明:
OrderTime 是一日期欄位
Max(OrderTime) 是取得目前條件日期選擇中最大的日期
Month(AddMonths(max(OrderTime),-1) 取得少一個月的月份資料;利用此方式才能真正抓到1月份時的上個月是12月份資料。


指定月份期間   

Sum({<, ,Date={'>=$(=AddMonths(Date, -1 ) )<=$(=AddMonths(Date,-1))'}>}SalesAmt)
上年同月
sum({$<Year={'$(=Max(Year)-1)'} , [Shop Name]=>}  SalesAmt)
去年
Sum({$<Year={$(=Max(Year)-1)}>}  SalesAmt
本月() 可用為YTM
sum({$<Month={">0<$(=max(Month)+1)"}  ,[Shop Name]=> } SalesAmt)

Command line execute Reload / partial Reload 指令更新資料

個人版也可以自動化的重新更新資料!

最近有需要寫到Batch 批次檔執行的動作,剛好有也和大家來分享,如何利用指令的方式讓QV執行Reload

Command Reload
"C:\Program Files\QlikView\QV.exe" /r  "documentName.qvw"


Partial Reload
"C:\Program Files\QlikView\QV.exe" /rp " documentName.qvw"




@rem * Command Line Arguments (QVCMD) *
@rem ********************************************
@rem * /r  = Open, Reload, Save, Close *
@rem * /rp = Open, Partial Reload, Save, Close *
@rem * /l  = Open, Reload *
@rem * /p  = Open, Partial Reload *
@rem * /v  = Pass Variables eg /vBatchFlag=1 *
@rem ********************************************

2014年4月1日 星期二

And-Mode:How to find your customer 原來QlikView 不是只有綠色 也有紅色


QlikView 本身有綠白灰三個顏色,分別代表是"選擇,答案及非關連"
其實,QlikView 也有紅色的耶


上圖的例子綠色表示And 紅色表示Not ;
意境是 : 找出我的客戶群中有買Atles Lussekofta , Basket Shoes 產品,但是沒有買 Cap的客戶是誰? 

建立一個table ,串接資料將客戶對應多筆產品的資料組成一個新表格
andModeJoin:
Load CustomerID, Customer Resident Customers;
Join (andModeJoin)LOAD OrderID, CustomerID Resident Order_Header;
Join (andModeJoin)LOAD ProductID, OrderID Resident Order_Details;
Join (andModeJoin)LOAD ProductID, ProductName Resident Products;

這表格的長像如下:
customer01 product1
customer01 product2
customer02 product1....

這是直接應用在同一個欄位上的方式,其實QV也有另種方式,是利用Alternate 方式來讓前台人可以分析兩個相同欄位,但是用Alternate 沒有And 的關係他是OR 的方式;
意境是 : 找出我的客戶群中有買Atles Lussekofta 或是 Basket Shoes 產品的客戶中,但是沒有買 Cap的特定客戶是誰?

命名一個Excluding  Alternate : 在document 屬性設定>一般 > Alternate
建立一個Chart , 其運算式為
sum({$<ProductName = p({$} ProductName) - p({[Excluding]} ProductName)>} UnitPrice)





2014年3月28日 星期五

Naming your field names in QlikView 取一個你看的懂的欄位名稱

擁有一個乾淨友好的使用者介面看得懂的欄位名稱,是一套針對使用者操作的一個關鍵。

在分析資料時,往往在資料庫裡的資料欄位跟前端拉取資料命名會不太一樣,如果要前端看的懂的欄位名稱在QlikView 中欄位別名,必需要使用 "as" 來重新命名,如下圖例子:


在前端取德欄位會像這樣

那如果都我要用中文欄位呢?都取別名實在太辛苦了,萬一我的資料源來及欄位很多時,這種做法實在是太不科學了。

接下來就是要教各位一個小小的技巧,讓我們可以方便取名
Step 1:  利用一個List box 將所有欄位滙出來
             請選擇系統欄位$Field
             列出資料後,直接滙出到Excel

Step 2:  利用剛滙出的EXCEL 檔案,增加一個欄位為使用者識別的欄位


Step 3: 回到Script 編輯器中,將剛那個EXCEL檔案滙入
           使用MAPPING LOAD statement 於語法編輯器

Step 4: Applying the field name map
            請在語法的最後加入一行,Using 後的就是剛滙入的表格名稱
      RENAME FIELDS USING FieldMap;

*在這裡有一個要注意的地方,如果在步驟3所Mapping 的欄位沒有包含全部欄位時,則欄位名稱會以舊的為主

Step 5: 重新Reload 資料後,剛你所設定的欄位名稱就出來囉.