赞
踩
1.尽量避免直接使用事实表上的日期列来参与时间智能函数的使用
2.时间智能函数往往要求日期列的值要按天连续
3.尽量单独创建一个calendar表,基于calendar表使用时间智能函数
4.calendar表需要按天连续,没有重复值,没有空值,日期列是date类型
5.不要使用datetime类型的列,尽量使用date类型列,因为达特time包含时间,函数在处理时性能比较差
6.避免在calendar表和事实表时间使用双向交叉筛选
7.calendar表和事实表建立关系需要基于date类型的日期列,如果是其他类型的类建立关系,时间智能函数无法正确使用
8.时间函数在directquery中不能使用。
1.月份排序如果需要倒序的,可以将month_no*-1,作为排序列
2.dateadd虽然是表函数,但可以利用它和filter结合计算指定一天所对应的相隔日期
3.添加自定义列取当前天,并在slicer中默认当前天
当前天 = if(format(dimdate[date],"MM/DD/YYYY" )= format(today(),"MM/DD/YYYY"),"current date",convert(dimdate[date],string))
4.默认根据日历表去前一天,并在slicer中默认前一天
previous date = if('sales'[date_flag]=format(dateadd(filter(all('calendar'[date]),format('calenda'[date],"MM/DD/YYYY")=format(today(),'MM/DD/YYYY')),-1,day),"MM/DD/YYYY"),"yesterday",'sales'[date_flag])
6.默认上个月底month ending
lastmonthending = if('sales'[date flag]=EOMONTH(today(),-1),"Last Month End",format('Sales'[Date Flag],"MM/DD/YYYY"))
7.时区加减小时的问题
dateadd函数只能将date日期作为参数传入,不能将带有日期和时间的列作为参数。
直接在带时间的日期列上进行加减,如:
date[datetime]+(1/24)*8 -- 加8小时
date[datetime]+1 --加1天
以日期/时间格式返回指定的日期 。
DATE(<year>, <month>, <day>)
计算当前上下文中表达式的 year-to-date 值 (年末总和)。注意辨析与datesytd(指定日期年初到年末的累计和)的区别。
TOTALYTD(<expression>,<dates>[,<filter>][,<year_end_date>])
下面的示例公式创建一个度量,该度量计算 Internet 销售的**“年累积总额”**或“年累积总和”。
= TOTALYTD(SUM(InternetSales_USD[SalesAmount_USD]),DateTime[DateKey])
以日期/时间格式返回指定月份数之前或之后的月份的最后一天的日期 。 使用 EOMONTH 来计算适逢当月最后一天的到期日期或截止日期。
EOMONTH(<start_date>, <months>)
下面的表达式返回 2008 年 5 月 31 日,因为月份参数舍入为 2。
= EOMONTH("March 3, 2008",1.5)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。