1. 程式人生 > >一起學微軟Power BI系列-使用技巧(5)自定義PowerBI時間日期表

一起學微軟Power BI系列-使用技巧(5)自定義PowerBI時間日期表

1.日期函式表作用

    經常使用Excel或者PowerBI,Power Pivot做報表,時間日期是一個重要的緯度,加上做一些鑽取,時間日期函式表不可避免。所以今天就給大家分享一個自定義的做日期表的方法,當然自己使用Excel用公式做一個也很快,八仙過海各顯神通。我對C#比較瞭解,就用自己最瞭解的方式做了一個。大家可以自己擴充,或者可以把需求提供我,我統一完善。比如下面這個表(來自一個Power Pivot課程)。

    因為日期函式表主要在建模的時候進行關聯,所以是比較固定的,不像業務資料會變動,所以根據所在專案的特殊情況,一次性生成一個時間段的資料足夠用了,大不了,更新一下。那先看看我們初級版的日期函式表的結構。

2.日期函式表結構

    我這裡做的格式主要是和上圖基本一直,把年份,月份,星期,,季度,月度第N天,年度第N天進行了計算。計算過程都比較簡單,都在C#中完成。

3.程式碼實現過程

    資料庫設計,如果大家有新增需求,直接可以在原始碼的“時間日期表.cs”修改即可,注意格式。如果熟悉XCode的同學,當然是輕車熟路。由於當初設計已經很久了,XML檔案已經找不到了,否則更方便。

    程式碼很簡單就2個主要方法,在“時間日期表.Biz.cs”中的GenerateTable中,上程式碼:

/// <summary>
/// 從指定的日期開始,生成指定天數的時間日期表
/// </summary>
/// <param name="date">起始日期</param>
/// <param name="days">生成的天數,一般一次性生成個前後5年差不多了</param>
public static void GenerateTable(DateTime date, int days)
{
	int i = 0;
	string[] Day = new string[] { "星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六" };

	EntityList<DateTimePeriod> list = new EntityList<DateTimePeriod>();
	while (i < days)
	{
		var model = new DateTimePeriod();
		model.STAT_DATE = date;
		model.DATES = Convert.ToInt32(date.ToString("yyyyMMdd"));
		model.YEAR_MONTH = Convert.ToInt32(date.ToString("yyyyMM"));
		model.YEAR = (short)date.Year;
		model.MONTH = date.Month.ToString() + "月";
		int week = Convert.ToInt32(model.STAT_DATE.DayOfWeek);
		model.WEEK = Day[week];
		model.QUARTER = (short)Math.Ceiling(date.Month / 3.1);//季度數,向上取整
		model.DAYS_MONTH = (short)date.Day;
		model.DAYS_YEAR = (short)date.DayOfYear;
		model.DAYS_WEED = (short)(week == 0 ? 7 : week);
		model.MONTH_YEAR = (short)date.Month;
		model.WEEK_YEAR = (short)GetWeekOfYear(date);

		list.Add(model);
		i++;
		date = date.AddDays(1);
	}
	list.Save(true);
}
/// <summary>
/// 該日期是每年中的第幾周
/// </summary>
/// <param name="date"></param>
/// <returns></returns>
private static int GetWeekOfYear(DateTime date)
{
	//一.找到第一週的最後一天(先獲取1月1日是星期幾,從而得知第一週週末是幾)
	int firstWeekend = 7 - Convert.ToInt32(DateTime.Parse(date.Year + "-1-1").DayOfWeek);

	//二.獲取今天是一年當中的第幾天
	int currentDay = date.DayOfYear;
	//三.(今天 減去 第一週週末)/7 等於 距第一週有多少周 再加上第一週的1 就是今天是今年的第幾周了
	//    剛好考慮了惟一的特殊情況就是,今天剛好在第一週內,那麼距第一週就是0 再加上第一週的1 最後還是1
	return Convert.ToInt32(Math.Ceiling((currentDay - firstWeekend) / 7.0)) + 1;
}

    在控制檯中執行該方法,可以在bin目錄中找到"時間日期表.db",生成的資料就在裡面,因為我習慣了使用sqlite檔案,大家可以自己匯出檔案到excel,我在後面提供了工具下載,和Excel版本,會程式的朋友改一改,挺快。

  注意配置檔案的連線字串名稱不能隨便修改好,當然也可以生成到其他資料庫,不過貌似都沒必要。

4.資源

    Excel檔案下載(2010年-2020年)時間日期表Excel.rar

   微軟Power BI技術交流群: 564786745 (驗證註明:部落格園Power BI) 

相關推薦

一起微軟Power BI系列-使用技巧(5)定義PowerBI時間日期

1.日期函式表作用     經常使用Excel或者PowerBI,Power Pivot做報表,時間日期是一個重要的緯度,加上做一些鑽取,時間日期函式表不可避免。所以今天就給大家分享一個自定義的做日期表的方法,當然自己使用Excel用公式做一個也很快,八仙過海各顯神通。我對C#比較瞭解,就用自己最瞭解的

一起微軟Power BI系列-使用技巧(3)Power BI安卓手機版安裝與體驗

  Power BI有手機版,目前支援安卓,蘋果和WP,不過沒有WP手機,蘋果在國內還不能用,要FQ和用就不測試了。安卓的我也也是費了九牛二虎之力才把app下載下來,把方法分享給大家。     FQ太麻煩,所以建議大家不要用了。同時我也使用了很多第三方的線上網站下載google商店的app工具,結果

一起微軟Power BI系列-使用技巧(6) 連線Sqlite資料庫

    好久沒有研究Power BI了,看到高飛大神弄的東西,太慚愧了。今天有個小東西,資料在Sqlite裡面,想倒騰到Power BI Desktop裡面折騰一下,結果發現還不直接支援。所以只好硬著頭皮上去搞,否則又倒騰到Excel也費神。我看到支援ODBC驅動,想想肯定有辦法。來看看Power BI

一起微軟Power BI系列-使用技巧(4)Power BI中國版企業環境搭建和帳號問題

    千呼萬喚的Power BI中國版終於落地了,相信12月初的微軟技術大會之後已經鋪天蓋地的新聞出現了,不錯,Power BI中國版真的來了,但還有些遺憾,國際版的一些重量級服務如power bi embeded,都還暫時不能用,但相信會很快,等了一年,也不在乎多等點時間了,而且中國版的一些服務已經可

一起微軟Power BI系列-使用技巧(1)連線Oracle與Mysql資料庫

  說起Oracle資料庫,以前沒用過Oracle不知道,但是這1年用Oracle後,發現真的是想狂吐槽,特別是那個.NET驅動和連結字串,特別奇葩。總歸是和其他資料庫不一樣,標新立異,不知道為何。另外如果想去Oracle官網搞點東西,比啥都難,密碼設定強度要求很高,經常記不住,每次都是重置密碼再進去,總

一起微軟Power BI系列-使用技巧(2)連線Excel資料來源錯誤解決方法

  上一篇文章一起學微軟Power BI系列-使用技巧(1)連線Oracle與Mysql資料庫中,我們介紹了Power BI Desktop中連線Oracle和Mysql的方法,其實說到底還是驅動的問題,還有就是坑爹的驅動版本問題。換了新電腦,在匯入模型時,居然碰到了Excel匯入錯誤的情況。順便記下來吧。其

Pyramid Analytics宣布無縫集成BI Office和微軟Power BI Desktop

機制 desktop 數據 dash 進行 解決 ffi 數據決策 web 全球領先的企業商業智能(BI)軟件提供商Pyramid Analytics與微軟聯手,憑借完善的分析平臺BI Office強化Power BI Desktop的個人生產力功能。新的“Pu

微軟Power BI 的數據可視化技術workshop

text pow 實戰 watermark nag 技術 圖片 微軟 分享圖片 2018年2月9日的微軟技術愛好者的免費講座活動。實戰演示介紹微軟Power BI數據可視化大屏技術分享。深受大家好評!微軟Power BI 的數據可視化技術workshop

微軟Power BI商業智能免費workshop

nec repo alt sig jpg eve bus shadow reat What is power BI ?Power BI is a suite of business analytics tools that deliver insights througho

2017年8月微軟合作夥伴培訓—微軟Power BI培訓

industry microsoft publish time reat int pro with images Free training of Microsoft partners Microsoft Power BI is built for the analyst

sharepoint 2016 學習系列篇(16)-定義列表應用篇-(5)列表的快速編輯功能

平時我們都是通過新增按鈕進行新增資料,其實還有一種更加方便使用,而且快捷的方式錄入資料,就是列表的快速編輯功能,這裡我們來演示下,這個功能的好用之處。開啟前面建立好的使用者資訊表,點選快速編輯(edit

c#系列——盛派定義異常原始碼分析(八)

### 前言 接著異常七後,因為以前看過盛派這塊程式碼,正好重新整理一下。 ### 正文 #### BaseException 首先看下BaseException 類: 繼承:public class BaseException : ApplicationException 這個Applicati

python學習筆記5-定義函數

函數調用 筆記 取值 修改 args pytho class 名稱 func 1 自定義函數   (1)函數代碼塊以def關鍵字開頭,然後函數標識符名稱和圓括號   (2)任何傳入參數和自變量必須放在圓括號中間。圓括號之間可以用於定義參數   (3)函數的第一行語句可以選擇

Hadoop學習筆記—5.定義類型處理手機上網日誌

clas stat 基本 手機上網 oop interrupt pil 依然 手機號碼 一、測試數據:手機上網日誌 1.1 關於這個日誌   假設我們如下一個日誌文件,這個文件的內容是來自某個電信運營商的手機上網日誌,文件的內容已經經過了優化,格式比較規整,便於學習研究。

Excel技巧定義選項卡

excel 自定義 http clas .com 圖片 什麽 是你 分享圖片 Excel不僅可以自己創建選項卡和組,還可以重命名或更改內置選項卡和組的順序。直接說可能很難理解,下面我直接演示效果吧。 看紅色的選框,大家一看圖片就知道我要表達什麽意思了吧?我是怎麽操作的呢?請

每天點SpringCloud(三):定義Eureka集群負載均衡策略

log util domain 避免 can val 如果 dba filters 相信看了 每天學點SpringCloud(一):簡單服務提供者消費者調用,每天學點SpringCloud(二):服務註冊與發現Eureka這兩篇的同學都了解到了我的套路,沒錯,本篇博客同樣是

Docker 系列四(定義倉庫).

html 交互 reload 寫入 get ror tls 比較 nexus3 一、Docker hub 交互 Docker hub 是 Docker 官方維護的一個公共倉庫,大部分需求都可以通過在 Docker hub 中直接下載鏡像來完成。接下來,來看一下怎麽

laravel 5 定義全局函數,怎麽弄呢?

bsp psr-4 log ide r.js 增加 function apps fun 在app/Helpers/(目錄可以自己隨便來) 下新建一個文件 functions.php 在functions.php 中加入這個方法 然後在 bootstrap/autoload

數據庫系列之mysql 定義函數function,函數和存儲過程的區別

0.11 必須 def cte fec return語句 cit 新的 too mysql 自定義函數function,函數和存儲過程的區別 https://blog.csdn.net/u010365819/article/details/80470448 1.MySQL自

Excel定義顏色美化單元格顏色配置技巧定義顏色主題

ref 行修改 col ffffff 字體 自定義 技術分享 course 常見問題 用戶可以在內置主題的基礎上,對主題的顏色和字體等進行修改,然後保存為新的主題,以方便在其它工作簿中使用!(常見問題)Excel按條件填充顏色顏色配置技巧與自定義顏色主題 【解決方法,教程視