自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(20)
  • 收藏
  • 关注

原创 ​如何使用PowerBI建立星型模型的一些思考​

星型模型对于BI工具来说很重要,一个良好的模型能够使度量的建立变得简单,一个良好的模型能够使报表具有更好的性能,一个良好的模型能够减少预期之外的错误等等通常情况下一个星型模型对应一个分析主题,它由一个事实表和多个维度表组成,其中事实表是星型模型的核心,由分析变量和维度代理键组成,分析变量存放事实数据,维度代理键用于连接维度表。维度表是星型模型的外围,存放分析维度数据,由维度的代理键,维度层次属性,维度的描述信息组成数据的组织形式在建立模型之前,应该要梳理清楚业务逻辑,业务逻辑决定了数据的组织方式

2021-11-02 23:56:49 573

原创 2021-10-13

关于RLS的文章已经写了有好多了,包括:1. PowerBI中RLS是如何传播的?2..在使用PowerBI时不开启应用双向安全筛选器的情况下该如何实现RLS?3. .当一个用户出现在多个角色中时,RLS如何工作的?欢迎加入我们上面的文章介绍了RLS的传递方向,双向安全筛选器的作用,如何在不使用双向安全筛选器的情况下实现RLS,那今天这篇文章看一看如何使用一张权限表实现多角色的RLS功能,使用一张权限表的最大好处是方便维护,尤其是在用户离职或者转岗的情况下,我们不用在Service端

2021-10-13 01:11:22 125

原创 CALCULATE的筛选器参数多种写法

摘要CALCULATE 筛选器参数一个迭代器. 找到合适的粒度对控制结果和性能至关重要。本文描述了创建复杂DAX筛选器的可用选项注意:本文是描述的是参数为表筛选器时的情景,不考虑那些Directive参数(例如ALL, USERELATIONSHIP, CROSSFILTER,…),这些函数是不通过返回一列值修改筛选上下文。CACULATE中筛选器的基本原理当CALCULATE中的筛选器参数全部都是表表达式,例如返回值为一张表中的一列或者多列,甚至是一整张表时:CALCUL

2021-10-10 00:56:58 1240

原创 PowerBI工具提示的用法

在PowerBI中,工具提示(tooltips)是用来为可视化对象中的数据点提供详细信息或提供上下文中的其他信息的一种方法。如图1. 可视化对象中并没有数据标签,但只要将鼠标悬停于我们感兴趣的数据点上,我们就可以看到该点的详细数值。 图1如图2中,该可视化对象中原本只有2个度量值:RevenueTY 和Revenue Var % to Budget ,那我们可以通过工具提示(tooltips),再加上一个度量值:Customer# -将此度量值...

2021-10-08 22:11:07 3218

原创 当一个用户出现在多个角色中时,RLS如何工作的?

当一个用户出现在多个角色中时,RLS如何工作的?2021年9月29日22:37PowerBI官方文档建议在配置权限表时,尽量使用一个角色授予所有用到的权限,在这里先不讨论如何建立一个角色配置所有的权限。在这里我们先讨论多角色的情景,当我们建立一个具有多个角色的模型时,某些用户同时出现在了多个角色,这个时候RLS呈现的结果是什么样的?这里有一份成绩表,包括班级,科目,成绩三列,然后我们有不同的老师负责不同的科目及班级。举一个比较符合现实意义的情景:每个班级都会有一个班主任,该老

2021-10-07 22:22:30 877

原创 PowerBI动态切换矩阵表的维度

我平常工作中利用PowerBI制作的报表是企业级的,意味着其权限非常重要,不同角色的人看到的数据是不一致的,这个需要严格限定的;由于是企业级的,所以报表中的KPI肯定不能覆盖所有部门的需求,即便一个企业级报表制作完成了,不同角色的人查看时,还可能需要根据自己部门的特色定制化一些分析指标, 这个时候就需要一些明细数据,各部门再根据自己关心的指标去做分析或者报告,一种方案可以直接给一张大宽表,供各个角色的人去下载,然后再去汇总,但是如果powerbi能够将汇总的这一步做完,不更节省其他人的时间么?所以利用Pow

2021-10-07 13:31:32 2397 1

原创 PowerBI-DAX-DATESINPERIOD

DATESINSPERIOD返回一张只有一列的日期区间, 其语法如下:DATESINPERIOD(<dates>, <start_date>, <num of intervals>, <interval>)参数:dates: 日期列Start_date: 开始日期Num of intervals: 由开始日期向前滚动或向后滚动的数量Interval: 设置start_date按天滚动还是按月滚动或按季度滚动或按年滚动注:该函数只

2021-07-25 00:50:24 754

原创 PowerBI-DAX-DATESYTD

DATESYTD函数返回一张表,包含此年度至给定日期的一组日期例如:2021年5月23日 对应的YTD日期,对应的是2021年1月1日至2021年5月23日之间的日期DATESYTD的语法如下:DATESYTD(dates, [year_to_end])其语法比较简单,只有2个参数:dates,一列包含日期的列Year_to_end,指定了年末是哪一天,默认为12/31关于DATESYTD的几个知识点:1. 若dates不是唯一值,DATESYTD会返回最大日期的YTD日

2021-07-22 00:18:40 625

原创 在加入ALL函数后,CALCULATE函数内外筛选器的交互过程

在加入ALL函数后,CALCULATE函数内外筛选器的交互过程2021年7月10日21:39在上篇文章中,我们提到了calculate函数修改上下文的两个准则:准则一:如果列(或表)不在筛选器上下文中,则将向筛选器上下文添加新的筛选器来计算表达式准则二:如果列(或表)已在筛选器上下文中,则新筛选器将覆盖现有筛选器以计算表达式今天我们看看在CALCULATE函数内使用ALL函数后,其内外筛选器是如何交互的?两张很简单的表:学生表及成绩表,学生表记录了学生的信息,包括姓名,性

2021-07-12 22:24:23 611

原创 Calculate函数内外筛选器的交互过程

Calculate函数是PowerBI 中非常重要的一个函数,其作用是修改上下文并进行计算,包括执行行上下文转换,calculate函数利用其内部的参数修改已经存在的上下文,这里涉及到了上下文出现的前后顺序及相互作用的情况,所以理解calculate函数的执行顺序及上下文是如何交互的就变得非常重要。关于calculate函数的执行顺序的详情情况可以看这里,本篇文章我们通过一个简单的示例看看calculate函数内外的筛选器是如何交互的?以下是关于calculate函数内外上下文交互的两个准则:

2021-07-11 09:04:36 655 1

原创 PowerBI-DAX-RANKX(二)

​在这里我们猜了一下RANKX函数的工作原理:m.rankx = RANKX(Score, [m.score])(左图)m.rankx = RANKX(all(Score), [m.score])(右图)以右图为例:1. 计算查询上下文,为<姓名>这一列,此为筛选上下文2. rankx函数在表Score中创建迭代上下文,覆盖<姓名>上的筛选上下文3. 计算expression,执行上下文转换,再次变为筛选上下文,生成一个数据序列,用于排名4. 在查询上下

2021-07-04 22:45:08 435

原创 为什么有时使用rankx函数时,得到的结果为1?

刚刚开始使用rankx函数时,可能会经常碰到一个奇怪的问题,为什么我写的rankx排名结果都是1?一般情况下,你会得到一个答案:使用all函数,这时的你可能更乱了,到底为什么呢?m.rankx = RANKX(Score, [m.score])(左图) m.rankx = RANKX(all(Score), [m.score])(右图)这篇文章谈谈我个人的理解,抛砖引玉了。在上篇文章中,我们介绍了rankx函数的语法及工作原理,先简单回忆一下,想了解的详情的点这里1. rankx函数

2021-06-28 23:42:06 2116

原创 PowerBI-DAX-RANKX

Rankx函数是计算排名的函数,返回在当前上下文中生成的值(value)在由指定的表按行生成(行上下文)的数据序列中的排名简单来说就是:rankx用来计算value在一个数据序列中的排名其语法如下:Rankx(table, expression, [value, order, ties])table: 表表达式Expression: 标量表达式,该参数是在table中迭代计算的,用来生成排序的数据序列Value: 标量表达式,将要被排序的值,该参数被省略时,用当前行的ex...

2021-06-20 21:45:02 465

原创 彻底搞懂DAX函数-ISCROSSFILTERED

这篇文章来研究一下ISCROSSFILTERED函数语法:ISCROSSFILTERED()https://docs.microsoft.com/zh-cn/dax/iscrossfiltered-function-dax该函数的作用是判断ColumnName 是否被交叉筛选,当满足下面三点中任意一点时,该值返回True:参数columnName 被筛选时同一张表中的其他列 被筛选时扩展表(related table) 被筛选时所以,本篇文章从上述三点来研究ISCROSSFILTERD

2021-04-19 22:31:40 976

原创 PowerBI中Summarize的使用方法

以下是自己在使用summarize的时候踩过的坑,现分享在这里.一. 定义关于summarize函数我的理解是分组聚合函数,以某些字段进行分组,然后再对某些字段进行聚合运算。更准确的定义可以参考官方文档。其语法:SUMMARIZE (,<groupBy_columnName>[,groupBy_columnName ]…[, , ]…)该函数至少要有两个参数即和<groupby_columnName>二. 用法在这里我想分享的内容有2点:参数groupby_colu

2021-04-17 14:18:43 6124

原创 数据源的列新增后,PowerBI在刷新时如何设置才能获取新增的列?

在利用PowerBI进行可视化时,数据源为CSV文件时,当数据源的列新增之后,点击刷新按钮,可能会发生无法将新增的列更新到PowerBI中(见下图):那碰到这种情况时,该如何进行设置/操作才能将新增列更新到数据源中呢?在这里我仅仅提供一种比较直接的方法,通过修改相关的M函数的参数进行更新,或许你会有更好的办法,欢迎在评论中提出。过程如下:点击 – 转换数据,打开power query点击–高级编辑器修改M函数(Csv.Document())的参数将Columns=3改为Columns=nu

2021-04-08 20:43:05 6721 2

原创 关于python中守护线程的认识

在一个含有线程的python程序中,当主线程的代码运行完之后,如果还有其他子线程还未执行完毕,那么主线程会等待子线程执行完毕之后,再结束;如果有一个线程必须设置为无限循环,那么该线程不结束,意味着整个python程序就不能结束,那为了能够让python程序正常退出,将这类无限循环的线程设置为守护线程,当程序当中仅仅剩下守护线程时,python程序就能够正常退出,不必关心这类线程是否执行完毕,这就是...

2020-03-22 17:53:39 665 1

原创 matplotlib如何控制legend的位置(二)?

在使用matplotlib做图时,总免不了和图例(legend)打交道,那图例到底该放在哪?该如何放到指定的位置?(本文只讨论legend的坐标系为axes的情况)上篇文章介绍了如何通过loc参数设置legend的位置:1.loc = str类型,将legend放到9个固定的位置,左上角,右上角等等2.loc =(float, float) ,通过设置lengend左小角相对于坐标轴的坐标,...

2020-01-05 00:20:49 1795 2

原创 matplotlib 到底该如何控制legend的位置?

matplotlib版本号:3.1.0import matplotlibimport matplotlib.pyplot as pltimport matplotlib.patches as mpatchesprint(matplotlib.version) # 3.1.0在使用matplotlib做图时,总免不了和图例(legend)打交道,那图例到底该放在哪?如何放到指定的位置?(本...

2020-01-04 21:38:48 4041 2

原创 pdnads.read_excel()参数知多少?

利用pandas读入数据时,经常是通过pd.read_excel(r’path.xlsx’)但有时,可能只需要表格中的某些列,当读入整张表格后,再通过索引选取需要的列,例如某个数据处理过程可能只需要[‘班级’, ‘姓名’, ‘语文’]这三列数据按以前的习惯代码可能就写成如下:import pandas as pddf = pd.read_excel(r'成绩.xlsx')new_df ...

2019-12-02 18:19:12 212

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除