BI技巧丨粒度切换

2024-02-04 02:48
文章标签 技巧 切换 bi 粒度

本文主要是介绍BI技巧丨粒度切换,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

白茶在很久之前,写过关于笛卡尔积的两个函数。

GENERATE函数与CROSSJOIN函数。

传送门:《笛卡尔积》

那么这两个函数之间具体的区别是什么呢?在实际用途中的区别呢?

本期白茶来解释一下二者之间的核心点:上下文传递问题

在微软的官方介绍中并未提及两个函数的区别。

但是从语法上看GENERATE参数只能是两个,CROSSJOIN参数可以是多个。

但是实际使用上,二者还有一个核心的关键点,就是GENERATE函数可以传递第一参数的上下文,而CROSSJOIN函数不能传递第一参数上下文。

白茶将通过一组案例数据进行说明:

这是白茶随机模拟的数据,将其导入到PowerBI中,建立日期表以及模型关系如下:

编写如下度量值:

GENRATE =
GENERATE ({ "当月", "当季", "当年" },SUMMARIZE ('销售明细','销售明细'[商品名称],"INDEX", SWITCH ( [Value], "当月", 1, "当季", 2, "当年", 3 ),"数据",SWITCH ([Value],"当月", TOTALMTD ( SUM ( '销售明细'[销售数量] ), 'DATE'[Date] ),"当季", TOTALQTD ( SUM ( '销售明细'[销售数量] ), 'DATE'[Date] ),"当年", TOTALYTD ( SUM ( '销售明细'[销售数量] ), 'DATE'[Date] )))
)

结果如下:

这段代码是什么意思呢?

1.首先是利用输入模式,直接输入了三个时间粒度的标识字段作为第一参数;

2.然后利用SUMMARIZE函数生成一个表,添加了“数据列”和“索引列”;

3.SUMMARIZE函数利用GENERATE函数传递第一参数上下文的功能,根据条件判定进行计算。

这样的话就对“商品名称”这一列进行了不同时间粒度的汇总。

动态效果如下:

根据切片器的选择,可以在表中呈现不同时间粒度汇总的结果。

那么别忘了,还有CROSSJOIN函数呢。

输入如下代码:

CROSSJOIN =
CROSSJOIN ({ "当月", "当季", "当年" },SUMMARIZE ('销售明细','销售明细'[商品名称],"INDEX", SWITCH ( [Value], "当月", 1, "当季", 2, "当年", 3 ),"数据",SWITCH ([Value],"当月", TOTALMTD ( SUM ( '销售明细'[销售数量] ), 'DATE'[Date] ),"当季", TOTALQTD ( SUM ( '销售明细'[销售数量] ), 'DATE'[Date] ),"当年", TOTALYTD ( SUM ( '销售明细'[销售数量] ), 'DATE'[Date] )))
)

与上面的代码对比,二者除了使用函数区别外,没有任何区别。

结果如下:

结果无法得出,白茶第一次遇到这个问题的时候,思考了很久,感觉即在意料之外,也在情理之中。

首先是GENERATE这个函数本身只有两个参数,那么进行上下文传递的时候,可以说已经被划定范围了,这样的话虽然代码计算的速度慢,但是会有结果。

而CROSSJOIN函数可以有多个参数,如果内部允许上下文传递的话,从一参,到二参,到三参等等,会导致迭代的速度变得巨卡无比,甚至无法得出结果。

可以说从性能的角度考虑,微软在设计CROSSJOIN函数的时候,就已经考虑到这个问题了,因此其不具备内部上下文传递的功能。

小伙伴们❤GET了么?

白茶会不定期的分享一些函数卡片

(文件在知识星球[PowerBI丨需求圈])

这里是白茶,一个PowerBI的初学者。

这篇关于BI技巧丨粒度切换的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/676171

相关文章

Java 枚举的常用技巧汇总

《Java枚举的常用技巧汇总》在Java中,枚举类型是一种特殊的数据类型,允许定义一组固定的常量,默认情况下,toString方法返回枚举常量的名称,本文提供了一个完整的代码示例,展示了如何在Jav... 目录一、枚举的基本概念1. 什么是枚举?2. 基本枚举示例3. 枚举的优势二、枚举的高级用法1. 枚举

React实现原生APP切换效果

《React实现原生APP切换效果》最近需要使用Hybrid的方式开发一个APP,交互和原生APP相似并且需要IM通信,本文给大家介绍了使用React实现原生APP切换效果,文中通过代码示例讲解的非常... 目录背景需求概览技术栈实现步骤根据 react-router-dom 文档配置好路由添加过渡动画使用

不删数据还能合并磁盘? 让电脑C盘D盘合并并保留数据的技巧

《不删数据还能合并磁盘?让电脑C盘D盘合并并保留数据的技巧》在Windows操作系统中,合并C盘和D盘是一个相对复杂的任务,尤其是当你不希望删除其中的数据时,幸运的是,有几种方法可以实现这一目标且在... 在电脑生产时,制造商常为C盘分配较小的磁盘空间,以确保软件在运行过程中不会出现磁盘空间不足的问题。但在

Python中列表的高级索引技巧分享

《Python中列表的高级索引技巧分享》列表是Python中最常用的数据结构之一,它允许你存储多个元素,并且可以通过索引来访问这些元素,本文将带你深入了解Python列表的高级索引技巧,希望对... 目录1.基本索引2.切片3.负数索引切片4.步长5.多维列表6.列表解析7.切片赋值8.删除元素9.反转列表

Spring Boot实现多数据源连接和切换的解决方案

《SpringBoot实现多数据源连接和切换的解决方案》文章介绍了在SpringBoot中实现多数据源连接和切换的几种方案,并详细描述了一个使用AbstractRoutingDataSource的实... 目录前言一、多数据源配置与切换方案二、实现步骤总结前言在 Spring Boot 中实现多数据源连接

Python中处理NaN值的技巧分享

《Python中处理NaN值的技巧分享》在数据科学和数据分析领域,NaN(NotaNumber)是一个常见的概念,它表示一个缺失或未定义的数值,在Python中,尤其是在使用pandas库处理数据时,... 目录NaN 值的来源和影响使用 pandas 的 isna()和 isnull()函数直接比较 Na

Oracle数据库执行计划的查看与分析技巧

《Oracle数据库执行计划的查看与分析技巧》在Oracle数据库中,执行计划能够帮助我们深入了解SQL语句在数据库内部的执行细节,进而优化查询性能、提升系统效率,执行计划是Oracle数据库优化器为... 目录一、什么是执行计划二、查看执行计划的方法(一)使用 EXPLAIN PLAN 命令(二)通过 S

Ilya-AI分享的他在OpenAI学习到的15个提示工程技巧

Ilya(不是本人,claude AI)在社交媒体上分享了他在OpenAI学习到的15个Prompt撰写技巧。 以下是详细的内容: 提示精确化:在编写提示时,力求表达清晰准确。清楚地阐述任务需求和概念定义至关重要。例:不用"分析文本",而用"判断这段话的情感倾向:积极、消极还是中性"。 快速迭代:善于快速连续调整提示。熟练的提示工程师能够灵活地进行多轮优化。例:从"总结文章"到"用

购买磨轮平衡机时应该注意什么问题和技巧

在购买磨轮平衡机时,您应该注意以下几个关键点: 平衡精度 平衡精度是衡量平衡机性能的核心指标,直接影响到不平衡量的检测与校准的准确性,从而决定磨轮的振动和噪声水平。高精度的平衡机能显著减少振动和噪声,提高磨削加工的精度。 转速范围 宽广的转速范围意味着平衡机能够处理更多种类的磨轮,适应不同的工作条件和规格要求。 振动监测能力 振动监测能力是评估平衡机性能的重要因素。通过传感器实时监

滚雪球学Java(87):Java事务处理:JDBC的ACID属性与实战技巧!真有两下子!

咦咦咦,各位小可爱,我是你们的好伙伴——bug菌,今天又来给大家普及Java SE啦,别躲起来啊,听我讲干货还不快点赞,赞多了我就有动力讲得更嗨啦!所以呀,养成先点赞后阅读的好习惯,别被干货淹没了哦~ 🏆本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,助你一臂之力,带你早日登顶🚀,欢迎大家关注&&收藏!持续更新中,up!up!up!! 环境说明:Windows 10