当前位置: 首页 > article >正文

PowerBI 根据条件选择获得不同的表格 因为IF和SWITCH只能返回标量而不能返回表格 Power BI

PowerBI 根据条件选择返回不同的表格 因为IF和SWITCH只能返回标量而不能返回表格 Power BI
自定义日期筛选套件

根据条件得到不同的表格

背景

在设置自定义对比日期时,需要根据选择的内容返回不同的表格作为CALCULATE的表格参数进行计算。Power BI-自定义范围

图1:Power BI-自定义范围的日期套件组件

在Power BI 设置了如上的对比日期组件套件。以上的日期组件中,在点击了自定义范围,并输入跨越天数,左边的会根据选择的开始时间和结束时间进行对比期和基准期的设置。

如上图所示,截图选择了开始时间和结束时间分别为:2023/11/12~2024/3/12时,会根据右边的对比方式进行对比期的调整。这次选择的是自定义范围,跨越天数30天,则
对比期为:2023/11/12~2023/12/12
基准期为:2024/03/12~2024/04/11
度量的对比值和基准值需要按照以上对应日期进行计算。结果如下图所示。

Power BI-自定义范围的度量

图2:Power BI-自定义范围的度量

为了实现该功能,需要先检测图1的套件组件的选择,并根据选择返回对应的日期表格作为度量计算的条件。

代码实现

1、IFSWITCH的伪实现

注:以下1.1和1.2两段代码均会报错,因为IF和SWITCH只允许返回标量而不允许返回表格。

1.1 IF
IF(UnitSec = "日", FILTER(ALL('日期表'), '日期表'[DateKey] = BaseDate),
   IF(UnitSec = "年", FILTER(ALL('日期表'), '日期表'[Year] = BaseYear),
      IF(UnitSec = "季", FILTER(ALL('日期表'), '日期表'[Year] = BaseYear && '日期表'[Quarter] = BaseQuarter),
         IF(UnitSec = "月", FILTER(ALL('日期表'), '日期表'[Year] = BaseYear && '日期表'[Month] = BaseMonth),
            IF(UnitSec = "周", FILTER(ALL('日期表'), '日期表'[Year] = BaseYear && '日期表'[Week] = BaseWeek), BLANK())
         )
      )
   )
)
1.2 SWITCH
SWITCH (
     TRUE (),
     UnitSec = "日", FILTER (ALL('日期表'), '日期表'[DateKey] = BaseDate ),
     UnitSec = "年", FILTER (ALL('日期表'), '日期表'[Year] = BaseYear ),
     UnitSec = "季", FILTER (ALL('日期表'), '日期表'[Year] = BaseYear && '日期表'[Quarter] = BaseQuarter ),
     UnitSec = "月", FILTER (ALL('日期表'), '日期表'[Year] = BaseYear && '日期表'[Month] = BaseMonth ),
     UnitSec = "周", FILTER (ALL('日期表'), '日期表'[Year] = BaseYear && '日期表'[Week] = BaseWeek )
 )

2.真实实现 UNION+ADDCOLUMNS

基本思路:通过对各自的日期表格进行标记拼接,而后返回过滤值进行筛选拼接的表格即可

VAR UnionTable =
UNION(
	ADDCOLUMNS(
		SELECTCOLUMNS(FILTER(ALL('日期表'), '日期表'[Year] = BaseYear),"DateKey",[DateKey])
		, "FILTERNUM", "年"
		)
	, ADDCOLUMNS(
		SELECTCOLUMNS(FILTER(ALL('日期表'), '日期表'[Year] = BaseYear && '日期表'[Quarter] = BaseQuarter),"DateKey",[DateKey])
		, "FILTERNUM", "季"
		)
	, ADDCOLUMNS(
		SELECTCOLUMNS(FILTER(ALL('日期表'), '日期表'[Year] = BaseYear && '日期表'[Month] = BaseMonth),"DateKey",[DateKey])
		, "FILTERNUM", "月"
		)
	, ADDCOLUMNS(
		SELECTCOLUMNS(FILTER(ALL('日期表'), '日期表'[Year] = BaseYear && '日期表'[Week] = BaseWeek),"DateKey",[DateKey])
		, "FILTERNUM", "周"
		)
	, ADDCOLUMNS(
		SELECTCOLUMNS(FILTER(ALL('日期表'),'日期表'[DateKey] = BaseDate),"DateKey",[DateKey])
		, "FILTERNUM", "日"
		)
)

RETURN
	SELECTCOLUMNS(FILTER(UnionTable,[FILTERNUM]=UnitSec),"DateKey",[DateKey])

http://www.kler.cn/a/372862.html

相关文章:

  • 智慧小区:科技之光点亮幸福家园
  • C++——写一函数,将一个3x3的整型矩阵转置。用指针或引用方法处理。
  • 数据清理——确保数据质量的关键步骤
  • Leetcode224 -- 基本计算器及其拓展
  • 别被忽悠了 Lua 数组真的也可以从 0 开始索引?
  • 初体验鸿蒙 HarmonyOS NEXT开发
  • 《Python游戏编程入门》注-第4章3
  • Scala 的trait
  • 钉钉平台开发小程序
  • Linux 常用命令二
  • 空间音频技术
  • 计算机视觉常用数据集Foggy Cityscapes的介绍、下载、转为YOLO格式进行训练
  • WinUI AOT 发布
  • 输电线路云台变焦视频监控装置在智能识别和数据安全方面有哪些具体的优势和措施?
  • 【设计模式系列】代理模式(八)
  • python爬虫抓取豆瓣数据教程
  • redis:基本全局命令-键管理(1)
  • 同WiFi网络情况下,多个手机怎么实现不同城市的IP
  • MATLAB下的四个模型的IMM例程(CV、CT左转、CT右转、CA四个模型),附源代码可复制
  • yocto 下基于SDK的 tcpdump 移植
  • 爬虫利器playwright
  • ts:常见的内置数学方法(Math)
  • Java项目练习——学生管理系统
  • MR30分布式IO:石化行业的智能化革新
  • IIC学习总结
  • CodeS:构建用于文本到 SQL 的开源语言模型