一起学微软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中,上代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
/// <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/


本文转自叶小钗 h数据之巅博客园博客,原文链接:http://www.cnblogs.com/asxinyu/p/Power_BI_Skills_DateTime_Table.html,如需转载请自行联系原作者

相关文章
|
12月前
|
存储 数据可视化 数据挖掘
【数据可视化和BI技术】数据可视化和BI技术的原理、方法和工具,如Tableau、Power BI
【数据可视化和BI技术】数据可视化和BI技术的原理、方法和工具,如Tableau、Power BI
231 0
|
2月前
|
BI 索引
【Azure Power BI】在Power BI中获取十进制随机数后,转换十六进制作为颜色值示例
【Azure Power BI】在Power BI中获取十进制随机数后,转换十六进制作为颜色值示例
|
2月前
|
BI
【Azure Power BI】Power BI获取SharePoint List列表后,如何展开List/Table中的字段,以及使用逗号拼接为一个字符串
【Azure Power BI】Power BI获取SharePoint List列表后,如何展开List/Table中的字段,以及使用逗号拼接为一个字符串
|
4月前
|
BI
Power BI获取SharePoint List列表后,如何展开List/Table中的字段,以及使用逗号拼接为一个字符串
在Power BI中,从SharePoint List获取数据时遇到Table和List混合的数据源,直接展开会导致“笛卡尔积”效应,生成过多行。目标是保持行数不变,将Table中的字段与List值用逗号分隔显示在同一行。解决方法包括:1) 添加新列,从Table中提取List的Column2值;2) 使用Text.Combine函数合并List中的值。具体操作步骤包括选择列并自定义新列,然后展开List并以逗号分隔。通过这些步骤,可以将Table转换为所需的字符串格式。完整的Power BI Query代码展示了这一过程。参考链接提供了更多详情。
|
5月前
|
DataWorks 安全 数据库
DataWorks产品使用合集之在DataWorks中,使用Power BI Desktop来连接Hologres数据库需要设置白名单如何解决
DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。
111 2
|
5月前
|
运维 分布式计算 DataWorks
DataWorks产品使用合集之dataworks为子账号创建DataWorks访问密钥的基本步骤如何解决
DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。
66 0
|
5月前
|
数据建模 BI 数据处理
Power BI案例-医院数据集的仪表盘制作
Power BI案例-医院数据集的仪表盘制作
|
5月前
|
数据可视化 数据建模 数据挖掘
Power BI案例-连锁糕点店数据集的仪表盘制作
Power BI案例-连锁糕点店数据集的仪表盘制作
|
5月前
|
SQL 数据可视化 数据建模
大数据分析利器之Power BI,你是否已经掌握?
大数据分析利器之Power BI,你是否已经掌握?
109 0
|
5月前
|
BI 数据可视化 数据建模
Power BI案例-连锁糕点店数据集的仪表盘制作
Power BI案例-连锁糕点店数据集的仪表盘制作

热门文章

最新文章