一起学微软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是去年开始微软新发布的一个产品,虽然已经可以企业级应用, ...
随机推荐
- 【疯狂造轮子-iOS】JSON转Model系列之二
[疯狂造轮子-iOS]JSON转Model系列之二 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 上一篇<[疯狂造轮子-iOS]JSON转Model系列之一> ...
- IE的F12开发人员工具不显示问题
按下F12之后,开发人员工具在桌面上看不到,但是任务栏里有显示.将鼠标放在任务栏的开发人员工具上,出现一片透明的区域,选中之后却出不来.将鼠标移动到开发人员工具的缩略图上,右键-最大化,工具就全屏出现 ...
- OpenCASCADE Job - dimue
- MVC CodeFirst简单的创建数据库(非常详细的步骤)
最近在学习MVC的开发,相信有过开发经验的人初学一个新的框架时候的想法跟我一样最关心的就是这个框架如何架构,每个架构如何分工,以及最最关键的就是如何与数据库通信,再下来才是学习基础的页面设计啊等 ...
- [C#] 走进异步编程的世界 - 开始接触 async/await
走进异步编程的世界 - 开始接触 async/await 序 这是学习异步编程的入门篇. 涉及 C# 5.0 引入的 async/await,但在控制台输出示例时经常会采用 C# 6.0 的 $&qu ...
- Kooboo CMS技术文档之二:Kooboo CMS的安装步骤
在IIS上安装Kooboo CMS Kooboo CMS安装之后 安装的常见问题 1. 在IIS上安装Kooboo CMS Kooboo CMS部署到正式环境相当简单,安装过程是一个普通MVC站点在I ...
- 你真的会玩SQL吗?之逻辑查询处理阶段
你真的会玩SQL吗?系列目录 你真的会玩SQL吗?之逻辑查询处理阶段 你真的会玩SQL吗?和平大使 内连接.外连接 你真的会玩SQL吗?三范式.数据完整性 你真的会玩SQL吗?查询指定节点及其所有父节 ...
- css元素水平居中和垂直居中的方式
关于居中的问题,一直处于疑惑不解的状态,知道的几种方法好像也不是每一次都会起到作用,所以更加迷惑.主要是不清楚该 在什么情况下采用哪种解决方法,所以,整理了一些方法,梳理一下思路,做一个总结. 1. ...
- 玩转ajax
1.什么是ajax? Ajax 是 Asynchronous JavaScript and XML(以及 DHTML 等)的缩写. 2.ajax需要什么基础? HTML 用于建立 Web 表单并确定应 ...
- 【干货分享】流程DEMO-采购预算编制
流程名: 采购预算编制 业务描述: 在月初由计财部进行预算编辑,提交审批后预算生效 流程相关文件: 流程包.xml WebService业务服务.xml WebService.asmx WebSe ...