在 PowerBI 中如果构造一个单日期的选择器:
上述案例反应了用户选择了一个日期,然后所有的数据计算以该日期为基准,只显示最近 X 天的,X 由滑竿切片器给定。
如图所示,默认情况下 PowerBI 无法让人选择单个日期,但在现实中,这个需求非常常见,现在来实现之。
构造日期滑竿
先用 DAX 构建这个日期滑竿,如下:
DatePicker =
SELECTCOLUMNS(
GENERATESERIES( DATE( 2019 , 1 , 1 ) , DATE( 2019 , 12 , 31 ) , 1 ) ,
"Date" , [Value]
)
拖拽到界面,如下:
它的问题在于:
不需要旮沓,要去掉
不需要两个输入框
设置单日期框
要实现单日期框效果,需要对滑竿做 3 个简单设置:
调整大小
将响应式开关设置为关闭状态
不显示切片器标头和滑块
于是可以得到:
实现控件
这里要实现单日期选择框控件,因此加入一些点缀,如下:
其实现方式只需要使用组合即可,如下:
这样,我们就可以复用这个自己构造的控件了。
实现按日期基准的 X 天内数据显示
首先看下效果:
这里直接给出度量值的写法:
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
先实现一个基本度量值:
DatePicker.Date = MIN( 'DatePicker'[Date] )
这也许在其他场景也可以用得上。
度量值:DatePicker.IsValid
这是最重要的度量值:
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 自身的原生功能,经过一定改良就可以实现不错的效果哦,本文只是一个开始。
本文案例模板已共享至年度订阅会员专区,请尽情享用。
现已开启 PowerBI 学习中心:
进入学习中心和BI佐罗学习PBI
暗号:pbix
对于 PowerBI 新手,我们已经为初学者提供了完整的进阶通道,如下所示。
罗叔带你正确地系统化学习 PowerBI 路线图
免费体验 PowerBI:
正式开始从零正确地系统化学习 PowerBI
拖拽不能满足需求?系统化学习 DAX 来解决
需要复制粘贴成熟的 DAX 做法
按照国际可视化标准作图
从技巧到思想,为您揭示 BI 的本质
成为罗叔铁粉,关注 PowerBI 最前沿应用
关注罗叔,带你成为 PowerBI 专家
本文发布于:2024-01-30 15:37:09,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/170660023321039.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |