前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >简单清爽的 PowerBI 单日期选择器

简单清爽的 PowerBI 单日期选择器

作者头像
BI佐罗
发布2019-12-10 15:05:12
4.5K0
发布2019-12-10 15:05:12
举报
文章被收录于专栏:PowerBI战友联盟
在 PowerBI 中如果构造一个单日期的选择器:

上述案例反应了用户选择了一个日期,然后所有的数据计算以该日期为基准,只显示最近 X 天的,X 由滑竿切片器给定。

如图所示,默认情况下 PowerBI 无法让人选择单个日期,但在现实中,这个需求非常常见,现在来实现之。

构造日期滑竿

先用 DAX 构建这个日期滑竿,如下:

代码语言:javascript
复制
DatePicker =
SELECTCOLUMNS(
    GENERATESERIES( DATE( 2019 , 1 , 1 ) , DATE( 2019 , 12 , 31 ) , 1 ) ,
    "Date" , [Value]
)

拖拽到界面,如下:

它的问题在于:

  • 不需要旮沓,要去掉
  • 不需要两个输入框

设置单日期框

要实现单日期框效果,需要对滑竿做 3 个简单设置:

  • 调整大小
  • 将响应式开关设置为关闭状态
  • 不显示切片器标头和滑块

于是可以得到:

实现控件

这里要实现单日期选择框控件,因此加入一些点缀,如下:

其实现方式只需要使用组合即可,如下:

这样,我们就可以复用这个自己构造的控件了。

实现按日期基准的 X 天内数据显示

首先看下效果:

这里直接给出度量值的写法:

代码语言:javascript
复制
KPI.ByDatePicker =
VAR vDateSelected = MIN( 'Var.DateList'[Date] )
VAR vDateContext = SELECTEDVALUE( Model_Calender[日期] )
RETURN
IF(
    vDateContext >= ( vDateSelected - [X.Value] ) &&
    vDateContext <= vDateSelected ,
    [KPI.Auto]
)

这样就可以实现按 日期选择 以及 时间天数 的筛选效果。

但问题是,每个原有的 KPI 都需要针对日期选择框写一个 ByDatePicker 版的 KPI,这违反了 DRY 原则。也是我们不能接受的,为此,我们来考虑一个优化方案。

实现统一筛选

先看下效果:

这里采用的方法是:度量值用做筛选器。

这是 PowerBI 的一个重要特性,可以用度量值作为筛选器。下面给出其实现。

度量值:DatePicker.Date

先实现一个基本度量值:

代码语言:javascript
复制
DatePicker.Date = MIN( 'DatePicker'[Date] )

这也许在其他场景也可以用得上。

度量值:DatePicker.IsValid

这是最重要的度量值:

代码语言:javascript
复制
DatePicker.IsValid =
// 依赖于 X 选择器
VAR vDatePoint = [DatePicker.Date]
VAR vDateRange =
    DATESINPERIOD( DatePicker[Date] , vDatePoint , -[Var.X.Value] , DAY )
VAR vDateInContext = SELECTEDVALUE( Model_Calender[日期] )
RETURN ( vDateInContext IN vDateRange ) + 0

这里面涉及 3 个技巧:

  • 巧用了动态参数滑竿 X;
  • 巧用了日期智能函数 DATESINPERIOD;
  • ( vDateInContext IN vDateRange ) + 0 才是神来之笔。

作为一个思考题留给读者,这里为何要返回:

( vDateInContext IN vDateRange ) + 0 而不是 ( vDateInContext IN vDateRange ) 呢?

总结

本文从零构建了单日期选择器并给出了很有效的案例来将此应用通用化。

有些 PowerBI 自身的原生功能,经过一定改良就可以实现不错的效果哦,本文只是一个开始。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-12-04,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 PowerBI战友联盟 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 构造日期滑竿
  • 设置单日期框
  • 实现控件
  • 实现按日期基准的 X 天内数据显示
  • 实现统一筛选
  • 度量值:DatePicker.Date
  • 度量值:DatePicker.IsValid
  • 总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档