首页 > 其他分享 >阅读圣经丨筛选上下文与行上下文

阅读圣经丨筛选上下文与行上下文

时间:2023-07-25 10:32:06浏览次数:34  
标签:白茶 与行 示例 TOPN 筛选 上下文 DAX


阅读圣经丨筛选上下文与行上下文_计算逻辑

最近白茶在读《圣经第二版》,再加上有很多小伙伴问过白茶总计栏显示不合理的地方,白茶决定抽出一期来描述一下上下文。

(坦白说,这个地方不太好说,因为白茶对于一些地方理解的也不是很到位,只能说是一家之言。小伙伴们权当白茶瞎咧咧就好,别去较真,也请各位大佬收起手中的大刀。)

阅读圣经丨筛选上下文与行上下文_数据分析_02

先来看看本期的示例文件。

阅读圣经丨筛选上下文与行上下文_大数据_03

将其导入PowerBI中:

阅读圣经丨筛选上下文与行上下文_大数据_04

添加参数索引:

阅读圣经丨筛选上下文与行上下文_大数据_05

编写如下代码:

基础代码:

销售 =
SUM ( '示例'[销售金额] )

排名代码:

RANKX =
IF ( HASONEVALUE ( '示例'[客户] ), RANKX ( ALL ( '示例'[客户], '示例'[时间] ), [销售] ) )

TOPN排名代码:

TOPN =
IF (
    [RANKX] <= [移动平均 值],
    CALCULATE ( [销售], FILTER ( VALUES ( '示例' ), [RANKX] < [移动平均 值] ) )
)

看到这小伙伴们已经等着急了吧?来,看下面的结果:

阅读圣经丨筛选上下文与行上下文_迭代_06

小伙伴们,看明白没?

首先,左边的表,白茶放的是原始的数据文件,可以看得出来所有销售金额的总和是6822;而右边的TOPN随着参数切片器的变化而变化,但是右边的总计栏显示的不合理。

阅读圣经丨筛选上下文与行上下文_人工智能_07

一会儿白茶会继续说,继续编写代码:

解决总计TOPN =
SUMX ( SUMMARIZE ( '示例', '示例'[客户], '示例'[时间] ), [TOPN] )

结果如下:

阅读圣经丨筛选上下文与行上下文_大数据_08

小伙伴们,这次看出来区别没?优化之后的结果总计栏显示的完全正确,那么问题出现在哪里呢?

阅读圣经丨筛选上下文与行上下文_人工智能_09

其实这里面就涉及到DAX计算逻辑中的上下文概念了。

在圣经中曾提到过,DAX的计算逻辑有两种上下文:

行上下文与筛选上下文。

什么叫行上下文?

阅读圣经丨筛选上下文与行上下文_迭代_10

图片上原始数据,一行接着一行排列,这个就叫行上下文关系。说白了就是原始数据中存放的位置。

阅读圣经丨筛选上下文与行上下文_人工智能_11

在这个图片中,TOPN的显示受到切片器的筛选影响,排名大于11的不显示,这个就是筛选上下文,因为有一部分数据不符合筛选要求被踢出去了。

在DAX语言中,行上下文与筛选上下文是一个特别重要的问题,我们在进行DAX代码编写的时候,必须要考虑到这两点,不然计算结果很容易出现问题。二者就是计算环境。

圣经中有句话说的特别好:

筛选上下文是对数据进行筛选,

行上下文是对表格进行迭代。

白茶的理解就是:

筛选不迭代,迭代不筛选!

这个东西可能有的小伙伴不太理解,其实单抽出概念,每一个字白茶都认识,但是实际写DAX的时候把这几个字放在一起就懵了。

阅读圣经丨筛选上下文与行上下文_计算逻辑_12

在这段代码中,白茶利用IF使不符合条件的项目不显示,但是实际结果存在不?必然是存在的,不显示归不显示。这种情况下总计栏不会考虑你显示还是不显示的问题,它就知道,有,我就需要汇总,哪怕它看不着。

阅读圣经丨筛选上下文与行上下文_大数据_13

这段代码需要分开解释:

利用SUMMARIZE函数,构建了一个虚拟计算表,这个表显示的就是符合筛选条件的项目,按照**@冬哥**的解释就是,可见项目

[TOPN]为这个虚拟表提供了一些值,本身不符合筛选逻辑的值,直接就被PASS掉了。这里已经进行上下文转换了。

最后,SUMX只对总计生效。它只计算可见项目的可计算值。像是一些排名符合要求的组合,SUMMARIZE为它提供环境,[TOPN]提供值,由SUMX进行二者汇总。

这样的话,三者就完成了:

行上下文转换筛选上下文→提供筛选计算值→汇总计算

有时候写DAX经常因为上下文考虑的不周到,导致计算结果出问题,没有太好的解决办法,只能说经历的多了,写的DAX多了,才会慢慢让上下文这个概念长存于心。


小伙伴们❤GET了么?

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

阅读圣经丨筛选上下文与行上下文_大数据_14

阅读圣经丨筛选上下文与行上下文_数据分析_15



标签:白茶,与行,示例,TOPN,筛选,上下文,DAX
From: https://blog.51cto.com/u_14795990/6843122

相关文章

  • java并发编程(二)---上下文切换
    一、什么是上下文切换?  即使是单核处理器也支持多线程执行代码,CPU通过给每个线程分配CPU时间片来实现这个机制。时间片是CPU分配给各个线程的时间,线程会在分配的时间片内执行任务,因为时间片非常短,所以CPU通过不停地切换线程执行,让我们感觉多个线程是同时执行的,时间片一般是几......
  • 【jQuery】smartMenu右键自定义上下文菜单插件(似web QQ)
    DEMO: http://sources.ikeepstudying.com/menu-mail-qq/ 一、这是什么样的一个插件我们都知道,默认状态下,我们右键web页面,会出现一个上下文菜单,例如下图:【jQuery】smartMenu右键自定义上下文菜单插件(似webQQ)但是,浏览器默认的右键选项有时候并不是我们所需要的,......
  • 【WebGL系列-01】获取WebGL上下文
    获取WebGL上下文获取上下文WebGL上下文是从<canvas>标签中获取到的,通过canvas对象的getContext()函数可以获取WebGLRenderingContext。跟据参数的不同,getContext()函数可以获取不同种类的渲染上下文。接口canvas.getContext(contextType:String,contextAttributes?:Objec......
  • 【WebGL系列-02】创建program上下文
    WebGL程序program对象的创建program对象由顶点着色器对象和片元着色器对象构成,因此,创建program对象包含了两部分,一个是着色器对象的创建,一个是program对象的创建。总体流程创建顶点着色器对象创建片元着色器对象创建program对象将顶点着色器和片元着色器添加到程序中将程......
  • element-ui表格实现表头快速筛选
        filterChange(obj){console.log('obj',obj)constkeys=Object.keys(obj)constvalues=Object.values(obj)console.log('keys',keys)console.log('values',values)letpltKeys=......
  • LECTOR 621阅读器用于料盘读码和筛选调试实例
    第一部分:现场需求/问题描述 客户样品为卷料盘,料盘上有一张白色标签和一个粉色标签,白色标签上有4个一维码及一个二维码(QR码),粉色标签上有一个一维码 客户要求静态读取粉色标签上一维码和白色标签QR码,客户要求在没有粉色标签的时候输出二维码,在有粉色标签的情况下既输......
  • 斯坦福博士一己之力让Attention提速9倍!FlashAttention燃爆显存,Transformer上下文长度
    前言 FlashAttention新升级!斯坦福博士一人重写算法,第二代实现了最高9倍速提升。本文转载自新智元仅用于学术分享,若侵权请联系删除欢迎关注公众号CV技术指南,专注于计算机视觉的技术总结、最新技术跟踪、经典论文解读、CV招聘信息。CV各大方向专栏与各个部署框架最全教程整理......
  • 上下文(context)在odoo14中的作用以及功能。并举例说明 。最后再总结一下。所能用到的场
    在Odoo中,上下文(context)是一个非常重要的概念。Context是一个Python字典,它在各种方法之间传递,并且可以影响这些方法的行为。Context的主要作用和功能:传递参数:在执行方法的过程中,可以通过context传递参数。这些参数可以影响方法的行为。本地化:context中有一些特殊的......
  • 大语言模型的预训练[5]:语境学习、上下文学习In-Context Learning:精调LLM、Prompt设计
    大语言模型的预训练[5]:语境学习、上下文学习In-ContextLearning:精调LLM、Prompt设计和打分函数(ScoringFunction)设计以及ICL底层机制等原理详解1.In-ContextLearning背景与定义背景大规模预训练语言模型(LLM)如GPT-3是在大规模的互联网文本数据上训练,以给定的前缀来预测生......
  • antd+vue3 tree-select 组件库 筛选结果不正确的问题
    第一次遇到这种带搜索框的下拉树状列表搜索关键字的时候出现我不想要的结果。我感觉组件它只是搜索一级列表而没有搜索二级列表,然后一节列表把它整个的二级列表带出来了。二级列表里边包含搜索关键字的所有item才是我想要的。相关代码:1<!--页面名称-->2<div......