如何使用DAX函数解决动态图表标题
您可能知道,Power BI中的图表(以及许多其他可视化)具有可以设置为任何静态文本的标题。您可以通过选择图表,转到“可视化对象”窗格中的“格式”选项卡,然后更改“标题”部分中的属性(如下所示)来完成此操作:

但是,如果您希望图表标题根据所选内容而改变呢?例如,您可能正在使用切片器或过滤器来允许用户选择他们想要查看数据的月份。在这种情况下,您可能想要添加一个标题,显示实际上已选择了哪一月; 如果报告使用过滤器,或者要打印报告,这将特别重要。遗憾的是,内置的Title Text属性不能用于显示动态值,但在本文章中,小悦将向您展示如何使用DAX解决此问题。
以下是包含动态图表标题的报告的简单示例:

小悦创建了一个简单的测试数据集,其中只有两个字段一个月份,一个数量,该报告包含一个柱形图,其中显示按月份显示的数量。还有一个切片器,用户可以选择一个月或多个月,在顶部有一个标题,列出在切片机中选择并显示在图表中的日期名称。
解决方案分为两部分
第一部分是创建一个度量。它将返回图表标题所需的文本,这依赖于DAX函数ConcatenateX()。这是衡量标准的DAX:
Title = "你选中了 "
& CONCATENATEX(
VALUES(Sheet1[月]),
Sheet1[月],
", "
)
这里,Values()函数用于返回包含所有选定月份的表,然后将其传递给ConcatenateX()以获取包含逗号分隔的日期名称列表的文本值。
第二部分涉及如何显示度量返回的值。在上面的报告中,小悦使用了卡片可视化,将上面的度量放入“字段”区域,然后关闭“格式”选项卡上的“类别标签”,以便仅显示度量返回的值,而不显示度量本身的名称:


这就是重新创建上述报告所需的全部内容。
对上述代码进行优化
我们可以将列表中的最后一个逗号更改为“和”,给每个月的值后面加一个月,而不是简单的以逗号分隔的月值列表:
此外,如果显示了所有月份,最好不显示非常长的月份列表,而是显示一些默认文本,如图:

这是用于完成所有这些操作的度量的DAX:
Title2 =
VAR SelectedDays = VALUES('Sheet1'[月])
VAR NumberOfSelectedDays = COUNTROWS(SelectedDays)
VAR NumberOfPossibleDays = COUNTROWS(ALL('Sheet1'[月]))
VAR AllButLastSelectedDay = TOPN(NumberOfSelectedDays-1, SelectedDays)
VAR LastSelectedDay = EXCEPT(SelectedDays, AllButLastSelectedDay)
RETURN
"你 " &
IF(NumberOfSelectedDays=NumberOfPossibleDays, "没有对月份进行筛选",
"选中了 " & IF(NumberOfSelectedDays=1, "", CONCATENATEX(AllButLastSelectedDay,'Sheet1'[月], "月, ") & " 月和 ") & LastSelectedDay & "月")
1.Power BI免费下载:http://www.yeacer.com/
Microsoft Power BI Desktop中文最新版:下载地址
2.欢迎加入的Power BI技术群,目前正在学习阶段,有兴趣的朋友可以一起学习讨论。
Power Data技术交流群:702966126 (验证注明:博客园Power BI)
更多精彩内容请关注微信公众号:悦策PowerBI
如果您觉得阅读本文对您有帮助,请点一下“推荐”按钮,您的“推荐”将是我最大的写作动力!欢迎各位转载,作者博客:https://www.cnblogs.com/yeacer/
如何使用DAX函数解决动态图表标题的更多相关文章
- INDIRECT函数实现动态图表的跨数据抓取
涉及函数: indirect函数:通常有两种用法.直接指定单元格地址和隐式指定单元格地址.直接指定:=indirect("A4"),则会返回A4单元格所显示的内容.参数给定的既是字 ...
- EXCEL 2010学习笔记—— 动态图表
今天梳理一下动态图表的相关内容,做一个简单的整理 关键的操作点: 1.插入动态控制器:开发工具->插入->表单控件 对控件进行修改 右键 设置控件格式->单元格链接 用来作为if ...
- 使用Visifire+ArcGIS API for Silverlight实现Graphic信息的动态图表显示
原文:使用Visifire+ArcGIS API for Silverlight实现Graphic信息的动态图表显示 首先来看一看实现的效果: PS:原始的程序中更新曲线数据时添加了过渡的效果,具体可 ...
- ecshop 完美解决动态ip登录超时和购物车清空问题
ecshop 完美解决动态ip登录超时和购物车清空问题 ECSHOP模板/ecshop开发中心(www.68ecshop.com) / 2014-05-06 前一段时间,ECSHOP开发中心的一个客户 ...
- 用Chart控件绘制动态图表
进行程序设计时,选用一个合适的ActiveX控件,有时可大大减少编程工作量.ActiveX 控件(又称OCX)基于COM技术,作为独立的软件模块,它可以在任何程序设计语言中插入使用.本文仅以VC++为 ...
- C++学习之路—多态性与虚函数(一)利用虚函数实现动态多态性
(根据<C++程序设计>(谭浩强)整理,整理者:华科小涛,@http://www.cnblogs.com/hust-ghtao转载请注明) 多态性是面向对象程序设计的一个重要特征.顾名思义 ...
- mbos之动态图表设计
前言 所谓,一图胜千言.人脑有80%的部分专门用于视觉处理.而随着数据时代的全面来临,我们自然有必要将数据转化为图形与图表. Mbos是一个快速,稳定的云端轻应用开发平台.帮助企业快速开发移动应用,加 ...
- python函数的动态传参.作用域与命名空间
一.动态传参1.*表示动态传参. 可以接受所有的位置参数传参的时候自动的把实参打包成元组 交给形参 def chi(*food): print(food) chi() # 动态传参可以不传参数 chi ...
- python 函数的动态参数 命名空间,作用域以及函数嵌套,global和nonlocal (重点)
*** 坚持坚持,即使你不太强*** 1.函数的动态传参 2.函数的命名空间及作用域 3.函数嵌套 4.global和nonlocal关键字 一.函数的动态传参 1. *args: 位置参数动态传参, ...
随机推荐
- hdu 1257 LIS (略坑5
---恢复内容开始--- 最少拦截系统 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) ...
- Utils--前台调用后台接口工具类
Utils--前台调用后台接口工具类 package com.taotao.manage.httpclient; import java.io.IOException; import java.net ...
- Kali配置教程
1.配置软件源 所有操作没有说明,都是以root身份执行. 打开一个终端执行: cat >> /etc/apt/sources.list <<EOF deb http://mi ...
- e2e 测试 出现的错误
每次开始学习vue的新知识时,总在环境这一块出现很多坑.这次我来记录一下,我在搭建vue e2e测试框架是踏过的坑吧. 我们都只知道,使用vue init webpack 项目名字<项目名字不能 ...
- vim 文本会在末尾自动添加换行 md5文件和数据只不对应
在linux系统 vim md5data # 打开文件 写入 abc 保存 md5sum md5Data 的计算值和openssl代码计算值不一样 原因在于linux文本文件末尾自动添加了换行 解 ...
- matlab画图变粗脚本
http://blog.sina.com.cn/s/blog_708637950100uag0.html figure_FontSize=18;set(get(gca,'XLabel'),'FontS ...
- Notation, First Definitions 转 http://brnt.eu/phd/node9.html
LaTeX command Equivalent to Output style Remarks \textnormal{...} {\normalfont...} document font fam ...
- python小数据池,代码块知识
一.什么是代码块? 根据官网提示我们可以获知: A Python program is constructed from code blocks. A block is a piece of Pyth ...
- 逆袭之旅DAY09.东软实训.接口
2018年7月5日 package day0705.teacher.test1usb; /** * 测试类 * @author Administrator * */ public class UsbI ...
- LY.JAVA面向对象编程思想概述
面向对象 2018年7月5日 逆袭之旅DAY09 2018年7月5日 逆袭之旅DAY09 2018-07-07