dax 筛选 包含某个字_DAX分享9:DAX中用变量来计算动态filter context中数值

文章写起来真的也挺麻烦的。坚持坚持!加油加油!

2efe57382901542ef812a0d0643c52df.png

本次分享的需求描述如下:

在Power BI中创建一个页面,页面显示一个Table和两个Slicer。其中Slicer的内容也列在Table里。Table里需要一个计算值,这个计算值要求对Table中的一个非Slicer里的字段做汇总计算。

转换成显示页面如图所示。

3d8cffd07903d56f4c6d909dcb6fad5f.png

熟悉的Product数据表。

两个Slicer分别是Brand和Color。同时Brand和Color还显示在Table里面。计算的数值内容是统计不同的Manufacturer生产多少种Product,即针对且只针对Manufacturer做分组(group by)计算Product。当选择不同的Brand和Color时,数值也要根据实际显示的Product再计算对Manufacturer做汇总。

19e8891ee93981c799db422253d46b8e.png
DAX分享9效果图https://www.zhihu.com/video/1110165158554456064

其实这种需求还是很常见的。不知道大家有没有什么好的方法。目前来说我觉得最简单的方法就是定义变量了。先把最简单的方法说一下,然后再把如果不用变量会遇到的问题分享一下。

var test =

VAR manu = MAX('Product'[Manufacturer])

RETURN

COUNTROWS(

FILTER(ALLSELECTED('Product'),'Product'[Manufacturer] <= manu))

就这么定义一下就ok了。so easy!

下面我们聊一聊如果不用变量可能出现的问题。

不考虑变量的话,首先对于针对其中一个字段做group by分组计算的话,这样改写filter context的行为,我们首先可以想到的是用CALCULATE函数。因为只针对Manufacturer,所以想到用ALLEXCEPT函数可以得到如下数据值列:

count per manufacturer = CALCULATE(COUNT('Product'[Product Name]),ALLEXCEPT('Product','Product'[Manufacturer]) )

1c6c85e8c83efa0600178b3b7b253dcb.png

er,这样做当然是不全面的。因为两个在Table里但是也显示在Slicer字段,如果选择了不同的Slicer数据时,count per manufacturer数据值是不会发生变化的。

比如,选择了Color的Azure,在Table里面显示了14条Product Name的的数据,并且都是在一个Manufacturer下面,所以,数据字段我期望的显示应该是14而不是132.

3c79fa8aa148d48c1edc0311cadc12c4.png

这个count per manufacturer就像是Manufacturer的属性一样了,第一次计算好了之后,就不会变化了。现在我们开始考虑怎么在数据表里面接受外来filter的影响。首先想到的函数是ALLSELECTED()。但是,ALLEXCEPT函数是不能内嵌ALLSELECTED函数的。ALLSELECTED可以考虑到外部的筛选,但是如何做group by分组计算呢?此路不通。然后我想到了万能的CALCULATE+FILTER,FILTER里面可以有ALLSELECTED函数,但是后面的参数这么实现动态的Manufacturer的抓取呢?

如果看过我之前分享的HASONEVALUE的同学,会不会想到用这个HASONEVALUE呢?我通过HASONEVALUE去抓取Slicer是否被选择,然后再分情况计算,就像之前DAX分享8里面的做法那样呢?嘿嘿,挺不错的吖~~不过,也不对。这里重点说一下!HASONEVALUE或者HASONEFILTER说,如果数据字段被筛选了,就是TRUE,没有被筛选就是FALSE。什么要被筛选了呢?在Slicer里面选择算是,在Table里面作为字段也算是~~~也就是说,对于这里的Brand和Color,HASONEVALUE的返回值永远都是TRUE。是不是很酸爽很好玩。

378b6336df0efc928f5c9bd98316e016.png

er,如果按照SQL逻辑来说,我比较期望,让我的查询结果,先和Brand,Color做关联,然后再去计算group by的分组计算。想法是好的,但在实现的时候,报表其实做的是一个over partition的开窗计算,先计算好结果,然后又成为了一个属性。

好吧,现在你明白了吧。有的时候,比如动态查询的时候,就是非变量不行的时候了。记住!敲黑板!针对动态的filter context的时候,首选变量表达式。so easy!

055fed42bf3c4d1c55da0292c9f41a51.png

欢迎关注DAX Share!

b9aa79deabe24038c6feae73d8faa327.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/504168.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

c++怎么实现数字数组的删除数字_C/C++数据结构:栈结构解析,最简单解析,让你一遍就会...

上一章节针对于C语言最基本的数据结构链式结构体做了解析&#xff0c;不清楚的可以回顾一下。本章节主要针对于C语言的基础数据结构栈做以解析。数据结构之栈栈(stack)又名堆栈&#xff0c;它是一种运算受限的线性表。限定仅在表尾进行插入和删除操作的线性表。这一端被称为栈顶…

【总结记录】面向对象设计OOP三大特性(封装、继承、多态)、七大基本原则的理解(结合代码、现实实例理解)

文章目录一. 三大特征的理解&#xff08;1&#xff09;封装&#xff08;2&#xff09;继承&#xff08;3&#xff09;多态&#xff08;4&#xff09;面向对象、面向过程的对比二. 七大基本原则的理解&#xff08;1&#xff09;单一职责原则&#xff08;2&#xff09;开放封闭原…

arcmap shp导出cad无反应_如何使用ArcMap将Excel数据转换为shp数据

1. 概述对ArcMap而言&#xff0c;除了shapefile等数据源&#xff0c;还可以将包含地理位置的表格数据以 XY 坐标的形式添加到地图中&#xff0c;比如Excel格式的数据&#xff0c;如果包含有坐标数据在里面&#xff0c;就可以通过导入XY数据的方式将Excel数据导入&#xff0c;最…

【总结记录】《MySQL必知必会》读后笔记,结合 leetcode 例题理解

文章目录一. 《MySQL知会》读后笔记1. 零散的前文知识2. 连接数据库3. 检索数据&#xff08;重点开始了&#xff09;4. 排序、过滤数据5. 通配符、正则表达式6. 汇总数据7. 分组数据&#xff08;1&#xff09;GROUP BY&#xff08;数据分组&#xff09;&#xff08;2&#xff0…

如何使用CNN进行物体识别和分类_RCNN物体识别

R-CNN&#xff0c;图片识别目标检测(Object Detection)是图像分类的延伸&#xff0c;除了分类任务&#xff0c;还要给定多个检测目标的坐标位置。R-CNN是最早基于CNN的目标检测方法&#xff0c;然后基于这条路线依次演进出了SPPnet,Fast R-CNN和Faster R-CNN&#xff0c;然后到…

nfs服务器_Kubernetes集群下部署NFS持久存储

NFS是网络文件系统Network File System的缩写&#xff0c;NFS服务器可以让PC将网络中的NFS服务器共享的目录挂载到本地的文件系统中&#xff0c;而在本地的系统中来看&#xff0c;那个远程主机的目录就好像是自己的一个磁盘分区一样。kubernetes使用NFS共享存储有两种方式&…

c语言 指针_C 语言指针详解

(给CPP开发者加星标&#xff0c;提升C/C技能)作者&#xff1a;C语言与CPP编程 / 自成一派123(本文来自作者投稿)1为什么使用指针假如我们定义了 char a’A’ &#xff0c;当需要使用 ‘A’ 时&#xff0c;除了直接调用变量 a &#xff0c;还可以定义 char *p&a &#xff0c…

idea修改代码后不重启项目_使用DevTool实现SpringBoot项目热部署

前言最近在开发的时候&#xff0c;每次改动代码都需要启动项目&#xff0c;因为有的时候改动的服务比较多&#xff0c;所以重启的次数也就比较多了&#xff0c;想着每次重启等待也挺麻烦的&#xff0c;就打算使用DevTools工具实现项目的热部署热部署是什么大家都知道在项目开发…

c++ 单例模式_Redis单例、主从模式、sentinel以及集群的配置方式及优缺点对比

redis作为一种高效的缓存框架&#xff0c;使用是非常广泛的&#xff0c;在数据存储上&#xff0c;在运行时其将数据存储在内存中&#xff0c;以实现数据的高效读写&#xff0c;并且根据定制的持久化规则不同&#xff0c;其会不定期的将数据持久化到硬盘中。另外相较于其他的NoS…

jenkins 插件目录_10 个 Jenkins 实战经验,助你轻松上手持续集成

众所周知&#xff0c;持续构建与发布是我们日常工作中要面对的的一个重要环节&#xff0c;目前很多公司都采用 Jenkins 来搭建符合需求的 CI/CD 流程&#xff0c;作为一个持续集成的开源工具&#xff0c;它以安装启动方便&#xff0c;配置简单&#xff0c;上手容易的特点&#…

jdbc 批量insert_JDBC相关知识解答

1. JDBC_PreparedStatement插入大量数据_批处理插入_效率比较(1) jdbc新增大量数据时, 如何处理能提高效率?答&#xff1a;使用批处理提高效率(2) 什么是批处理? JDBC如何进行批处理?答&#xff1a;批处理&#xff1a;在与数据库的一次连接中&#xff0c;批量的执行条 SQL 语…

python 实现显著性检测_强!汽车车道视频检测:python+OpenCV为主实现

1 说明&#xff1a;1.1 完整版&#xff1a;汽车车道动态视频检测讲解和注释版代码&#xff0c;小白秒懂。1.2 pythonOpenCVmoviepynumpy为主的技术要点。1.3 代码来源&#xff1a;https://github.com/linghugoogle/CarND-Advanced-Lane-Lines #虽然感觉也是fork别人的&#xff…

如何学习c语言 零基础20天学会C语言

C语言开发 学习C语言不是一朝一夕的事情&#xff0c;但也不需要花费十年时间才能精通。如何以最小的代价学习并精通C语言是本文的主题。请注意&#xff0c;即使是“最小的代价”&#xff0c;也绝不是什么捷径&#xff0c;而是以最短的时间取得最多的收获&#xff0c;同时也意味…

学习C/C++的简单方法

如何学习C呢。C和C是很多专业的必修课&#xff0c;尤其对计算机专业来说&#xff0c;更是重中之重。C语言是早期发展的高级语言&#xff0c;具备执行速度快&#xff0c;语法优美等特点。是底层高效率系统的首选开发语言。今天就和大家分享一下怎么学好C/C语言吧 _ 怎么学好C、…

python数据预处理代码_Python中数据预处理(代码)

本篇文章给大家带来的内容是关于Python中数据预处理&#xff08;代码&#xff09;&#xff0c;有一定的参考价值&#xff0c;有需要的朋友可以参考一下&#xff0c;希望对你有所帮助。1、导入标准库import numpy as np import matplotlib.pyplot as plt import pandas as pd 2、…

零基础想学好C语言编程,首先要掌握的是正确的学习思路!

如果新手要学习编程&#xff0c;一些前辈都会建议从Python、PHP、Java开始学。 不过&#xff0c;有些程序员是直接从C语言强势入门编程的。 那么&#xff0c;如何学习C语言呢?下面提供4种入门C语言的方法&#xff1a; 0、刷题 绝大多数的程序员学编程的时候&#xff0c;还…

C/C++初学者快速提升?

如今&#xff0c;软件开发行业继续向前大步迈进。信息技术越来越吃香&#xff0c;越来越多人学习学习c语言&#xff0c;那么如何系统有效的学习C语言?下面分享给大家的有效学习语言的方法&#xff0c;希望可以帮到你! 一、了解大纲&#xff0c;通览教材 想学好C语言最重要的一…

pytorch 矩阵相乘_深度学习 — — PyTorch入门(三)

点击关注我哦autograd和动态计算图可以说是pytorch中非常核心的部分&#xff0c;我们在之前的文章中提到&#xff1a;autograd其实就是反向求偏导的过程&#xff0c;而在求偏导的过程中&#xff0c;链式求导法则和雅克比矩阵是其实现的数学基础&#xff1b;Tensor构成的动态计算…

codeblocks如何让输出结果 空格_简单讲讲如何实现两个正整数相加,然后输出这个结果...

首先吧&#xff0c;两个整数123 456&#xff0c;相加得到579&#xff0c;我们就得输出579&#xff0c;这个很容易操作&#xff0c;但是如果是&#xff1a;1212161596156198115645646886148461554 2671232162176217624372497590415915915029125 呢&#xff1f;long ? long lo…

C语言和其他高级语言的最大的区别是什么?

提到C语言&#xff0c;我们知道C语言和其他高级语言的最大的区别就是C语言是要操作内存的&#xff01; 我们需要知道——变量&#xff0c;其实是内存地址的一个抽像名字罢了。在静态编译的程序中&#xff0c;所有的变量名都会在编译时被转成内存地址。机器是不知道我们取的名字…