有人詢問 Excel 堆疊長條圖上,要如何顯示各堆疊的百分比
資料準備,百分筆資料是利用公式從基礎資料產生
利用基礎資料產生堆疊長條圖後,點選 "台北資料標籤" ,選擇分隔符號為"換行"並勾選儲存格的值、點選資料範圍
選擇台北 Q1 - Q4 的百分比資料為資料來源,重複進行台中、高雄的設定
設定完成圖,如下
使用 Office 2013 來練習實做的
星期四, 1月 29, 2015
星期三, 1月 28, 2015
[SSRS] 分頁固定筆數
延續 [SSRS] 強迫分頁 這篇文章的問題,論壇問題出處
利用 CTE 跑出每個部門每頁 10 筆資料 Table,EX:部門有 12 位,該部門就要有 20 筆資料存在
下圖可見,雖然 Purchasing 部門只有 12 筆資料,但經過處理會產生 20 筆資料
品名下每六筆資料就進行換頁,換頁的部分我已經有爬過 Google 上面的文章搞定了,但問題出在不滿六筆該如何把它補滿六筆以下文章練習:
- 每頁要補滿 10 筆資料,沒有資料也要把資料空間顯示出來
- 設定群組檔頭,讓每一頁都可以顯示檔頭資訊
利用 CTE 跑出每個部門每頁 10 筆資料 Table,EX:部門有 12 位,該部門就要有 20 筆資料存在
;
WITH CTE AS
(
SELECT
D.DepartmentID AS DepID ,
1 AS StartNO ,
(((COUNT(D.DepartmentID) - 1) / 10) + 1) * 10 AS EndNO
FROM Person.Person AS P
JOIN HumanResources.EmployeeDepartmentHistory AS H ON P.BusinessEntityID = H.BusinessEntityID
JOIN HumanResources.Department AS D ON H.DepartmentID = D.DepartmentID
WHERE H.EndDate IS NULL
GROUP BY D.DepartmentID
UNION ALL
SELECT
DepID ,
StartNO + 1 ,
EndNO
FROM CTE
WHERE StartNO < EndNO
)
SELECT
T1.DepID ,
T2.DepName,
((T1.StartNO - 1) / 10 ) + 1 AS Group10 ,
T1.StartNO AS GroupNO,
T2.LastName,
T2.FirstName,
T2.EmailAddress
FROM CTE AS T1
LEFT JOIN
(
SELECT
D.DepartmentID AS DepID ,
D.Name AS DepName ,
ROW_NUMBER() OVER (PARTITION BY D.DepartmentID ORDER BY D.DepartmentID,P.LastName) AS GroupNO,
P.LastName ,
P.FirstName ,
A.EmailAddress
FROM Person.Person AS P
JOIN Person.EmailAddress AS A ON P.BusinessEntityID = A.BusinessEntityID
JOIN HumanResources.EmployeeDepartmentHistory AS H ON P.BusinessEntityID = H.BusinessEntityID
JOIN HumanResources.Department AS D ON H.DepartmentID = D.DepartmentID
WHERE H.EndDate IS NULL
) AS T2 ON T1.DepID = T2.DepID
AND T1.StartNO = T2.GroupNO
ORDER BY T1.DepID , T1.StartNO
OPTION (maxrecursion 0)
下圖可見,雖然 Purchasing 部門只有 12 筆資料,但經過處理會產生 20 筆資料
星期二, 1月 27, 2015
[VS] XML 註解
星期一, 1月 26, 2015
[Azure] 安裝、設定 PowerShell
學習 Azure 時,發現到有些設定,目前沒有辦法透過管理介面來設定,還是必須透過 PowerShell 來完成。
Step1:下載安裝 PowerShell
從 Windows Azure 官網 => 下載 Tag => Azure 命令列介面 => Windows 安裝
透過 Web Platform installer 5.0 來安裝 PowerShell,安裝過程會先安裝 MicrosoftAzure Cross-platform Command Line Tools
之後必須再安裝 Windows Azure PowerShell 和 Microsoft Azure PowerShell (Standalone)(Chinese)
Step1:下載安裝 PowerShell
從 Windows Azure 官網 => 下載 Tag => Azure 命令列介面 => Windows 安裝
透過 Web Platform installer 5.0 來安裝 PowerShell,安裝過程會先安裝 MicrosoftAzure Cross-platform Command Line Tools
之後必須再安裝 Windows Azure PowerShell 和 Microsoft Azure PowerShell (Standalone)(Chinese)
星期六, 1月 24, 2015
[C#] 存取修飾詞
遠距教學時提到,順道整理以前的資料
MSDN 說明
表格化
簡易圖式範例
在一個 solution 中有兩個 project,在 class A 內宣告各種存取修飾詞變數,並分別在其他 class 中標示可存取的變數
MSDN 說明
| 宣告存取範圍 | 意義 |
|---|---|
| public | 存取沒有限制 |
| protected | 存取只限於包含的類別或衍生自包含類別的型別 |
| internal | 存取只限於目前的組件 |
| protected internal | 存取只限於目前的組件或衍生自包含類別的型別 |
| private | 存取只限於包含類別 |
表格化
| 存取權 | base class | derived class | assembly | world |
|---|---|---|---|---|
| private | X | |||
| protected | X | X | ||
| internal | X | X | ||
| protected internal | X | X | X | |
| public | X | X | X | X |
簡易圖式範例
在一個 solution 中有兩個 project,在 class A 內宣告各種存取修飾詞變數,並分別在其他 class 中標示可存取的變數
- 顏色說明
- 灰色代表 Project (Assembly)
- 橘色代表 class
- 棕色代表變數
- 紅色代表可存取 class A 的變數
- 綠色代表繼承,class C 繼承 class A
| 宣告 | 預設值 |
|---|---|
| namespace | public |
| class | internal |
| member | private |
星期五, 1月 23, 2015
[SSRS] 強迫分頁
在 [SSRS] 分頁頁碼 中有網友詢問,問題如下
Step1:修正 T-SQL 語法
在 T-SQL 語法內把各組人員再進行分組,每 10 位為一組,T-SQL 邏輯可參考這篇 Blog 筆記 [SQL] 次序函數應用-資料分組
你好,我有個也是關於顯示筆數的問題想請教你,若你有閒餘時間,期望你能撥空幫我想想,我的問題如下:把 [SSRS] 分頁頁碼 這篇筆記繼續往下延伸,目標是把各組別內的人員,每 10 位為一頁
我的報表內需要顯示兩個欄位,並顯示在同一行;其中主要的欄位是品名,另一欄位則是品名的雜項支出,雜項支出顯示在每個品名的下面緊鄰著品名;目前我的品名是直接顯示在父報表內,雜項支出我是用子報表顯示於品名下方。
Question:請問我可以控制品名和雜項支出一頁只顯示六筆,超過就放下一頁。
Step1:修正 T-SQL 語法
在 T-SQL 語法內把各組人員再進行分組,每 10 位為一組,T-SQL 邏輯可參考這篇 Blog 筆記 [SQL] 次序函數應用-資料分組
SELECT
D.DepartmentID AS DepID ,
D.Name AS DepName ,
((ROW_NUMBER() OVER (PARTITION BY D.DepartmentID ORDER BY D.DepartmentID,P.LastName) - 1) / 10) + 1 AS Group10,
P.LastName ,
P.FirstName ,
A.EmailAddress
FROM Person.Person AS P
JOIN Person.EmailAddress AS A ON P.BusinessEntityID = A.BusinessEntityID
JOIN HumanResources.EmployeeDepartmentHistory AS H ON P.BusinessEntityID = H.BusinessEntityID
JOIN HumanResources.Department AS D ON H.DepartmentID = D.DepartmentID
WHERE H.EndDate IS NULL
從下圖可以看見 Purchasing 部門有 12 筆資料,也就是說 SSRS 那應該分為兩頁來顯示星期一, 1月 19, 2015
[Azure] 自動調整規模
該篇筆記為 [Azure] VM - 負載平衡和高可用性 延伸,自動調整規模是依照實際使用量自動增加或減少 "雲端服務規模"。
沒有設定可用性群組的雲端服務是無法進行自動調整規模
有設定可用性群組的雲端服務 => 調整規模 => 設定排程時間
沒有設定可用性群組的雲端服務是無法進行自動調整規模
有設定可用性群組的雲端服務 => 調整規模 => 設定排程時間
星期五, 1月 16, 2015
[SQL] 複製欄位描述
論壇問題
須先建立 Source DB 和 Destination DB ,兩個 DB 中內含的 Employ Table
實際更新測試
關鍵三語法為 ::fn_listextendedproperty、sp_updateextendedproperty 和 sp_addextendedproperty,接不可以跨 DB 使用,因此必須利用 USE DB 來切換
要把 Source DB Table 欄位描述複製至目地 DB Table 中測試環境簡易說明
須先建立 Source DB 和 Destination DB ,兩個 DB 中內含的 Employ Table
USE [Source] -- 須先建立 Source DB 和 Destination DB,然後根據需求來切換 DB
GO
-- 建立 Employ Table
CREATE TABLE [dbo].[Employ]
(
[EmpNO] [int] NOT NULL,
[EmpName] [nvarchar](20) NULL,
[Birthday] [date] NULL,
CONSTRAINT [PK_Employ] PRIMARY KEY CLUSTERED
(
[EmpNO] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
-- Destination DB 內的 Employ 則不需要下面這段
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'員工編號' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'Employ', @level2type=N'COLUMN',@level2name=N'EmpNO'
GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'員工姓名' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'Employ', @level2type=N'COLUMN',@level2name=N'EmpName'
GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'生日' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'Employ', @level2type=N'COLUMN',@level2name=N'Birthday'
GO
實際更新測試
關鍵三語法為 ::fn_listextendedproperty、sp_updateextendedproperty 和 sp_addextendedproperty,接不可以跨 DB 使用,因此必須利用 USE DB 來切換
-- #Temp 用來接收來源 DB 的 Table 欄位描述
IF OBJECT_ID('TempDB..#Temp') IS NOT NULL
DROP TABLE #Temp
CREATE TABLE #Temp (SchemaName nvarchar(128),TableName sysname,ColumnName nvarchar( 128),ColumnDescript sql_variant)
-- 切換至來源 DB
USE [Source]
-- 把欲更新的 Table 欄位描述,放進 #Temp 內
INSERT INTO #Temp (SchemaName,TableName,ColumnName,ColumnDescript)
SELECT
IST.Table_schema,
IST.Table_name,
ISC.COLUMN_NAME,
(
SELECT value
FROM fn_listextendedproperty (NULL, 'schema', IST.Table_schema, 'table', IST.TABLE_NAME, 'column', default)
WHERE name = 'MS_Description'
and objtype='COLUMN'
and objname Collate Chinese_Taiwan_Stroke_CI_AS = ISC.COLUMN_NAME
)
FROM INFORMATION_SCHEMA.TABLES IST
LEFT JOIN INFORMATION_SCHEMA.COLUMNS ISC ON IST.TABLE_NAME = ISC.TABLE_NAME
WHERE TABLE_TYPE='BASE TABLE'
AND IST.Table_name = 'Employ' -- 指定資料表名稱
-- 顯示 #Temp 內的資料
SELECT * FROM #Temp
-- 切至 Destination
USE [Destination]
-- 對 #Temp Table 跑 cursor
DECLARE curTemp CURSOR -- 宣告 Cursor 及其資料來源
FOR
(
SELECT SchemaName,TableName,ColumnName,ColumnDescript
FROM #Temp
)
OPEN curTemp -- 打開 Cursor,並建立 Cursor 與資料表關連
DECLARE
@SchemaName as nvarchar(128),
@TableName AS sysname,
@ColumnName AS nvarchar(128),
@ColumnDescript AS sql_variant
FETCH NEXT FROM curTemp INTO @SchemaName,@TableName,@ColumnName,@ColumnDescript -- 將資料存進變數中
WHILE (@@FETCH_STATUS = 0) -- 檢查是否有讀取到資料
BEGIN
-- 判斷該欄位屬性是否存在
if exists
(
select 1
from ::fn_listextendedproperty
(
N'MS_Description',
'SCHEMA',@SchemaName,
'TABLE',@TableName,
'COLUMN',@ColumnName
)
)
-- 存在:更新 MS_Description 屬性資料
EXEC sp_updateextendedproperty N'MS_Description',@ColumnDescript,N'SCHEMA',@SchemaName,N'TABLE',@TableName,N'COLUMN',@ColumnName
ELSE
-- 不存在:新增 MS_Description 屬性資料
EXEC sp_addextendedproperty N'MS_Description', @ColumnDescript, N'SCHEMA',@SchemaName, N'TABLE', @TableName, N'COLUMN', @ColumnName
FETCH NEXT FROM curTemp INTO @SchemaName,@TableName,@ColumnName,@ColumnDescript
END
CLOSE curTemp -- 關閉 Cursor,並關閉 Cursor 與資料表連結
DEALLOCATE curTemp -- 將 Cursor 物件移除
-- 顯示 [Destination] 內 Table 的欄位資訊
SELECT
IST.Table_schema,
IST.Table_name,
ISC.COLUMN_NAME,
(
SELECT value
FROM fn_listextendedproperty (NULL, 'schema', IST.Table_schema, 'table', IST.TABLE_NAME, 'column', default)
WHERE name = 'MS_Description'
and objtype='COLUMN'
and objname Collate Chinese_Taiwan_Stroke_CI_AS = ISC.COLUMN_NAME
)
FROM INFORMATION_SCHEMA.TABLES IST
LEFT JOIN INFORMATION_SCHEMA.COLUMNS ISC ON IST.TABLE_NAME = ISC.TABLE_NAME
WHERE TABLE_TYPE='BASE TABLE'
AND IST.Table_name = 'Employ' -- 指定資料表名稱
星期一, 1月 12, 2015
[Azure] VM - 負載平衡和高可用性
閱讀 MVA 上影片後的筆記文,以下為建立負載平衡和高可用性步驟
加入 => 網路服務 => 虛擬網路 => 自訂建立
輸入虛擬網路名稱、選擇位置和訂用帳戶,之後兩個設定頁面保持預設值(直接下一步,不截圖說明)
已建立的 LBInternet 虛擬網路
- Step1:建立虛擬網路
- Step2:建立雲端服務
- Step3:建立 VM 並設定 Load Balance
- Step4:Load Balance 測試
- Step5:建立高可用性群組
加入 => 網路服務 => 虛擬網路 => 自訂建立
輸入虛擬網路名稱、選擇位置和訂用帳戶,之後兩個設定頁面保持預設值(直接下一步,不截圖說明)
已建立的 LBInternet 虛擬網路
星期一, 1月 05, 2015
[Azure] 兩台 Azure VM 使用內部 IP 互 ping
在 Windows Azure 上同一個虛擬網路中的 VM 可以自由傳遞訊息,不同虛擬網路則不行
先建立一個虛擬網路
輸入名稱、選擇訂用帳戶和位置
不指定的情況下,Azure 會自動指派 DNS 伺服器
用預設子網路就行
完成虛擬網路(VMInternet)的建立
先建立一個虛擬網路
輸入名稱、選擇訂用帳戶和位置
不指定的情況下,Azure 會自動指派 DNS 伺服器
用預設子網路就行
完成虛擬網路(VMInternet)的建立




![[SSRS] 分頁固定筆數-1](https://farm8.staticflickr.com/7371/16376863842_6e81251e02_o.jpg)
![[VS] XML 備註-1](https://farm9.staticflickr.com/8588/16166791788_1e0eb3052a_o.jpg)
![[VS] XML 備註-2](https://farm9.staticflickr.com/8659/15734431043_2118322ff8_o.jpg)
![[VS] XML 備註-3](https://farm9.staticflickr.com/8578/16354382835_bda1b37ac5_o.jpg)
![[VS] XML 備註-4](https://farm8.staticflickr.com/7308/16353510702_6e6831102d_o.jpg)
![[Azure] 安裝、設定 PowerShell-1](https://farm8.staticflickr.com/7549/15978495989_cd16c1efa4_z.jpg)
![[Azure] 安裝、設定 PowerShell-2](https://farm8.staticflickr.com/7561/15542247044_b2c9330245_z.jpg)
![[Azure] 安裝、設定 PowerShell-3](https://farm8.staticflickr.com/7530/16164595095_e20cd1d395_o.jpg)

![[SSRS] 強迫分頁-0](https://farm8.staticflickr.com/7541/16145867989_91f90252c9_o.jpg)
![[Azure] 自動調整規模-1](https://farm8.staticflickr.com/7517/15907797448_999b1bf7ee_z.jpg)
![[Azure] 自動調整規模-2](https://farm8.staticflickr.com/7570/15911076608_b30f6e6754_z.jpg)

![[Azure] VM - 負載平衡和高可用性-0](https://farm8.staticflickr.com/7563/15869335477_36057d6d6f_z.jpg)
![[Azure] VM - 負載平衡和高可用性-1](https://farm8.staticflickr.com/7569/16054403692_944eb90a50_z.jpg)
![[Azure] VM - 負載平衡和高可用性-2](https://farm8.staticflickr.com/7479/16053144421_3b21080f58_o.jpg)
![[Azure] 兩台 Azure VM 使用內部 IP 互 ping-1](https://farm8.staticflickr.com/7494/15852156949_3b33415b97_z.jpg)
![[Azure] 兩台 Azure VM 使用內部 IP 互 ping-2](https://farm8.staticflickr.com/7553/16036253601_ffe01eb21a_z.jpg)
![[Azure] 兩台 Azure VM 使用內部 IP 互 ping-3](https://farm9.staticflickr.com/8605/15852151469_b90e418440_z.jpg)
![[Azure] 兩台 Azure VM 使用內部 IP 互 ping-4](https://farm8.staticflickr.com/7511/16038197525_9c5be18a4a_z.jpg)
![[Azure] 兩台 Azure VM 使用內部 IP 互 ping-5](https://farm8.staticflickr.com/7581/16036270951_0187be827e_z.jpg)