一起学微软Power BI系列-使用技巧(5)自定义PowerBI时间日期表
1.日期函数表作用
经常使用Excel或者PowerBI,Power Pivot做报表,时间日期是一个重要的纬度,加上做一些钻取,时间日期函数表不可避免。所以今天就给大家分享一个自定义的做日期表的方法,当然自己使用Excel用公式做一个也很快,八仙过海各显神通。我对C#比较了解,就用自己最了解的方式做了一个。大家可以自己扩充,或者可以把需求提供我,我统一完善。比如下面这个表(来自一个Power Pivot课程)。
本文原文地址:http://www.cnblogs.com/asxinyu/p/Power_BI_Skills_DateTime_Table.html
因为日期函数表主要在建模的时候进行关联,所以是比较固定的,不像业务数据会变动,所以根据所在项目的特殊情况,一次性生成一个时间段的数据足够用了,大不了,更新一下。那先看看我们初级版的日期函数表的结构。
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.资源
代码打包:时间日期表C#代码.rar
数据库文件(2010年-2020年):时间日期表Sqlite数据库.rar
Excel文件下载(2010年-2020年):时间日期表Excel.rar
微软Power BI技术交流群: 564786745 (验证注明:博客园Power BI)
技术博客:http://www.cnblogs.com/asxinyu/
论坛讨论区:http://www.newlifex.com/
一起学微软Power BI系列-使用技巧(5)自定义PowerBI时间日期表的更多相关文章
- 一起学微软Power BI系列-使用技巧(2)连接Excel数据源错误解决方法
上一篇文章一起学微软Power BI系列-使用技巧(1)连接Oracle与Mysql数据库中,我们介绍了Power BI Desktop中连接Oracle和Mysql的方法,其实说到底还是驱动的问题, ...
- 一起学微软Power BI系列-使用技巧(4)Power BI中国版企业环境搭建和帐号问题
千呼万唤的Power BI中国版终于落地了,相信12月初的微软技术大会之后已经铺天盖地的新闻出现了,不错,Power BI中国版真的来了,但还有些遗憾,国际版的一些重量级服务如power bi emb ...
- 一起学微软Power BI系列-使用技巧(1)连接Oracle与Mysql数据库
说起Oracle数据库,以前没用过Oracle不知道,但是这1年用Oracle后,发现真的是想狂吐槽,特别是那个.NET驱动和链接字符串,特别奇葩.总归是和其他数据库不一样,标新立异,不知道为何.另外 ...
- 一起学微软Power BI系列-使用技巧(6) 连接Sqlite数据库
好久没有研究Power BI了,看到高飞大神弄的东西,太惭愧了.今天有个小东西,数据在Sqlite里面,想倒腾到Power BI Desktop里面折腾一下,结果发现还不直接支持.所以只好硬着头皮上去 ...
- 一起学微软Power BI系列-使用技巧(3)Power BI安卓手机版安装与体验
Power BI有手机版,目前支持安卓,苹果和WP,不过没有WP手机,苹果在国内还不能用,要FQ和用就不测试了.安卓的我也也是费了九牛二虎之力才把app下载下来,把方法分享给大家. FQ太麻烦,所以建 ...
- 一起学微软Power BI系列-官方文档-入门指南(3)Power BI建模
我们前2篇文章:一起学微软Power BI系列-官方文档-入门指南(1)Power BI初步介绍 和一起学微软Power BI系列-官方文档-入门指南(2)获取源数据 中,我们介绍了官方入门文档与获取 ...
- 一起学微软Power BI系列-官方文档-入门指南(4)Power BI的可视化
在前面的系列文章中,我们介绍了官方有关获取数据,以及建模的原始文档和基本介绍.今天继续给大家介绍官方文档中,有关可视化的内容.实际上获获取数据和建模更注重业务关系的处理,而可视化则关注对数据的解读.这 ...
- 一起学微软Power BI系列-官方文档-入门指南(5)探索数据奥秘
我们几篇系列文章中,我们介绍了官方入门文档与获取数据等基本知识.今天继续给大家另外一个重点,探索数据奥秘.有了数据源,有了模型,下一步就是如何解析数据了.解析数据的过程需要很多综合技能,不仅仅是需要掌 ...
- 一起学微软Power BI系列-官方文档-入门指南(1)Power BI初步介绍
我们在前一篇文章微软新神器-Power BI,一个简单易用,还用得起的BI产品中,我们初步介绍了Power BI的基本知识.由于Power BI是去年开始微软新发布的一个产品,虽然已经可以企业级应用, ...
随机推荐
- 如何一步一步用DDD设计一个电商网站(八)—— 会员价的集成
阅读目录 前言 建模 实现 结语 一.前言 前面几篇已经实现了一个基本的购买+售价计算的过程,这次再让售价丰满一些,增加一个会员价的概念.会员价在现在的主流电商中,是一个不大常见的模式,其带来的问题是 ...
- NodeJs之OS
OS Node.js提供了一些基本的底层操作系统的模块OS. API var os = require('os'); console.log('[arch] 操作系统CPU架构'+os.arch()) ...
- Asp.net Core中使用Session
前言 2017年就这么悄无声息的开始了,2017年对我来说又是特别重要的一年. 元旦放假在家写了个Asp.net Core验证码登录, 做demo的过程中遇到两个小问题,第一是在Asp.net Cor ...
- IOS FMDB 获取数据库表和表中的数据
ios开发中,经常会用到数据库sqlite的知识,除了增,删,改,查之外,我们说说如何获取数据库中有多少表和表相关的内容. 前言 跟数据库使用相关的一般的增删改查的语句,这里就不做解释了.在网上有很多 ...
- PayPal高级工程总监:读完这100篇论文 就能成大数据高手(附论文下载)
100 open source Big Data architecture papers for data professionals. 读完这100篇论文 就能成大数据高手 作者 白宁超 2016年 ...
- XAMARIN ANDROID 二维码扫描示例
现在二维码的应用越来越普及,二维码扫描也成为手机应用程序的必备功能了.本文将基于 Xamarin.Android 平台使用 ZXing.Net.Mobile 做一个简单的 Android 条码扫描示 ...
- SVN的使用
- join Linq
List<Publisher> Publishers = new List<Publisher>(); Publisher publish1 = new Publisher() ...
- MySQL 优化之 ICP (index condition pushdown:索引条件下推)
ICP技术是在MySQL5.6中引入的一种索引优化技术.它能减少在使用 二级索引 过滤where条件时的回表次数 和 减少MySQL server层和引擎层的交互次数.在索引组织表中,使用二级索引进行 ...
- Linux监控工具介绍系列——OSWatcher Black Box
OSWatcher Balck Box简介 OSWatcher Black Box (oswbb)是Oracle开发.提供的一个小巧,但是实用.强大的系统工具,它可以用来抓取操作系统的性能指标,用 ...