BI技巧丨矩阵甘特图

news2024/11/26 9:53:48

BOSS:白茶,我们最近有很多项目,能不能做个甘特图?
白茶:没问题!(应用市场上随便找个甘特图就OK了嘛!)
BOSS:对了,不要那种点进来会有点卡,等半天的那种,要保持速度!
白茶:(#¥%@!&)没问题!

日常分析时,当我们需要针对某一个连续事件进行进度更新的时候,往往会采用甘特图来进行展示,这样肉眼看起来直观,方便一眼定位到目前的项目节点。

在应用市场中,有两个应用可以帮助大家满足制作甘特图的需求:
Gantt和Gantt Chart By MAQSoftware。

除了使用应用市场的应用以外,还可以通过内置的矩阵,来实现甘特图的制作。对比市场的应用,内置的图表无论是性能上还是兼容性上都会更优一些。
案例数据:

案例数据只有两张表,一张维度表,索引使用,一张项目状态表。将数据导入到PowerBI中,模型关系如下:

白茶模拟的数据比较简单,但实际应用中,会存在项目中断重启的情况,因此为了能够在完整的维度下展示,我们需要构建一张日期表。

Dim_Data = 
VAR MaxxData =
    MAX (
        MAXX ( ALL ( 'Fact_Status' ), [开始日期] ),
        MAXX ( ALL ( 'Fact_Status' ), [结束日期] )
    )
VAR MinxData =
    MIN (
        MINX ( ALL ( 'Fact_Status' ), [开始日期] ),
        MINX ( ALL ( 'Fact_Status' ), [结束日期] )
    )
VAR Result =
    GENERATE (
        CALENDAR ( MinxData, MaxxData ),
        VAR DA = [Date]
        VAR FactYear =
            YEAR ( DA )
        VAR FactQuarter =
            "Q" & FORMAT ( DA, "Q" )
        VAR FactMonth =
            FORMAT ( DA, "M" )
        VAR FactDAY =
            DAY ( DA )
        RETURN
            ROW (
                "年度", FactYear,
                "季度", FactQuarter,
                "月份索引", VALUE ( FactMonth ),
                "月份", FactMonth & "月",
                "日", FactDAY
            )
    )
RETURN
    Result

模型关系更新如下:

注:新生成的日期表,不需要和原本的模型建立关系。

思考一下
接下来需要做什么?
1
2
3
获取事实表的开始日期和结束日期,再根据维度表进行条件判断即可。
编写如下DAX:
开始日期:

001.StartData = 
MONTH ( SELECTEDVALUE ( 'Fact_Status'[开始日期] ) )

结束日期:

002.EndData = 
MONTH ( SELECTEDVALUE ( 'Fact_Status'[结束日期] ) )

维度日期:

003.ConditionData = 
SELECTEDVALUE ( 'Dim_Data'[月份索引] )

条件判断:

004.ProjectStatus = 
VAR ConditionStatus =
    IF (
        AND (
            [003.ConditionData] >= [001.StartData],
            [003.ConditionData] <= [002.EndData]
        ),
        1,
        0
    )
VAR Result =
    IF (
        AND ( HASONEFILTER ( 'Dim_Sort'[项目阶段] ), ConditionStatus = 1 ),
        1,
        BLANK ()
    )
RETURN
    Result

将度量值拉到矩阵中进行展示如下:

看起来矩阵已经有甘特图的样子了,我们继续编写如下代码:
配色:

005.FillColor = 
IF ( [004.ProjectStatus] = 1, "#00B050", "#FFFFFF" )

将上述度量值,设置为矩阵值的背景和字体颜色:

再对矩阵一些细节进行调整,展示效果如下:

可以看到,已经将甘特图的样式,在矩阵中复现。除了根据日期节点进行判断以外,我们也可以加一些其他元素做判断,例如:项目的状态、当前日期节点等。
这里我们用当前日期节点判断标识一下:

006.FillColorToday = 
VAR TodayMonth =
    MONTH ( TODAY () )
VAR Result =
    IF (
        [004.ProjectStatus] = 1,
        IF ( [003.ConditionData] = TodayMonth, "#FF0000", "#00B050" ),
        "#FFFFFF"
    )
RETURN
    Result

展示效果如下:

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

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

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

相关文章

二、数据结构1:单链表 模板题+算法模板(单链表)

文章目录 算法模板单链表题目模板 模板题单链表原题链接题目思路题解 算法模板 单链表题目模板 // head存储链表头&#xff0c;e[]存储节点的值&#xff0c;ne[]存储节点的next指针&#xff0c;idx表示当前用到了哪个节点 int head, e[N], ne[N], idx;// 初始化 void init() …

【001】C++的第一个程序Hello World

C的第一个应用程序&#xff08;Hello World程序&#xff09; 引言一、代码二、代码解释三、注意事项四、注释语句总结 引言 &#x1f4a1; 作者简介&#xff1a;专注于C/C高性能程序设计和开发&#xff0c;理论与代码实践结合&#xff0c;让世界没有难学的技术。 &#x1f449;…

《JavaEE》网络编程套接字

文章目录 Socket我们来解释一下上面叫做有无连接我们再来理解一下上面是可靠传输和不可靠传输面向字节流与面向数据报的区别&#xff08;后期会具体分析这个&#xff09;全双工 单双工 UDPDatagramSocketDatagramPacket我们来尝试写一下UDP版本的代码 TCPServerSocketSocket我们…

什么年代了?不会还有人不会插件化吧?

一&#xff0e;到底什么是插件化开发 插件化开发是将整个app拆分成很多模块&#xff0c;这些模块包括一个宿主和多个插件&#xff0c;每个模块都是一个apk&#xff0c;最终打包的时候将宿主apk和插件apk分开或者联合打包。 为什么要将一定要使用插件化开发呢&#xff1f; 宿…

【Linux】一文带你掌握Linux权限!

Linux权限 问题一&#xff1a;Linux下的用户分类有哪些&#xff1f;问题二&#xff1a;什么叫做权限&#xff1f;问题三&#xff1a;见一见没有权限是什么现象(看看就好了)问题四&#xff1a;权限的修改问题。chmodchownchgrp 问题五&#xff1a;其他问题(三个小问题)文件的初始…

51单片机(十五)直流电机驱动(PWM)

❤️ 专栏简介&#xff1a;本专栏记录了从零学习单片机的过程&#xff0c;其中包括51单片机和STM32单片机两部分&#xff1b;建议先学习51单片机&#xff0c;其是STM32等高级单片机的基础&#xff1b;这样再学习STM32时才能融会贯通。 ☀️ 专栏适用人群 &#xff1a;适用于想要…

【并发编程】深入理解Java并发之synchronized实现原理

文章目录 一、synchronized 实现同步示例二、synchronized 典型错误示例三、Java 对象头与 Monitor四、synchronized代码块底层原理五、synchronized方法底层原理六、Java虚拟机对synchronized的优化 一、synchronized 实现同步示例 public class MyThread extends Thread{pri…

分布式事务之Seata讲解

文章目录 1 Seata1.1 简介1.2 架构1.3 四种事务模式1.3.1 XA1.3.1.1 定义1.3.1.2 优缺点1.3.1.3 代码中实现 1.3.2 AT1.3.2.1 定义1.3.2.2 全局锁1.3.2.2.1 AT模式脏写问题1.3.2.2.2 全局锁 1.3.2.3 AT模式优缺点1.3.2.4 与XA模式区别1.3.2.5 代码中实现 1.3.3 TCC模式1.3.3.1 …

云服务器配合CookieCloud插件,实现浏览器网站Cookie同步

CookieCloud是由方糖开发的一个浏览器网站Cookie同步工具&#xff0c;Cookie是一个可以短时间代表我们登录身份的凭证&#xff0c;CookieCloud同步Cookie其实就是在同步登录状态&#xff0c;由一个浏览器插件和一个可以自行搭建的服务器端组成&#xff0c;可以定时地、在本地加…

linux pl320 mbox控制器驱动分析 - (2) 消息传递示例

linux pl320 mbox控制器驱动分析 - &#xff08;2&#xff09;消息传递示例 1 Messaging from Core0 to Core12 Back-to-back messaging from Core0 to Core13 Messaging from Core0 to Cores 1, 2, and 3 using Auto Acknowledge4 Auto Link messaging from Core0 to Core1 us…

算法设计 || 第5题:钓鱼问题-北京大学网站在线算法题(贪心算法)

目录 &#xff08;一&#xff09;题目网址视频网址 &#xff08;二&#xff09;手写草稿思考 Part1: 慕课PPT Part2: 笨蛋的学习 &#xff08;一&#xff09;题目网址视频网址 北京大学网站在线算法题&#xff1a;1042 -- Gone Fishing (poj.org) 视频讲解&#xff08;北…

进一步了解傅里叶变换的应用(附案例代码)

傅里叶变换&#xff08;Fourier Transform&#xff09;是一种非常常见的数学工具&#xff0c;能够将一个函数&#xff08;或时域信号&#xff09;分解成一些基本频率的合成。它使我们可以将时域信号&#xff08;例如波形图&#xff09;转换成频域信号&#xff0c;因而更容易地看…

ArcGIS按比例缩放图斑

今天介绍一下&#xff0c;在ArcGIS中&#xff0c;当我们需要按比例缩放图斑时&#xff0c;该如何操作呢。 可以使用“缩放”工具对要素进行缩放&#xff08;使整个要素变大或变小&#xff09;。在处理比例略有误差的数据&#xff08;例如&#xff0c;来自多个源的细分宗地&…

ChatGPT背后的大预言模型 以及《ChatGPT全能应用一本通》介绍

大型语言模型已经彻底改变了我们通过自然语言处理进行交互的方式&#xff0c;使得更多的基于语言的应用程序成为可能&#xff0c;例如语言翻译&#xff0c;问答&#xff0c;文本摘要和聊天机器人。 由于这些模型是在大量文本数据集&#xff08;如书籍&#xff0c;文章和社交媒…

C learning_13 操作符前篇(条件操作符、 逗号表达式、 下标引用、函数调用和结构成员、 表达式求值)

目录 条件操作符 逗号表达式 下标引用、函数调用和结构成员 1. [ ] 下标引用操作符 2. ( ) 函数调用操作符 3. 访问一个结构的成员 表达式求值 1.隐式类型转换 2.算术转换 3.操作符的属性 条件操作符 条件操作符是一种用于简化条件表达式的运算符。它通常表示为问号 …

《游戏编程模式》--重访设计模式--学习

序 在线阅读地址&#xff1a; 命令模式 Design Patterns Revisited 游戏设计模式 (tkchu.me) 参考文章&#xff1a; GameDesignPattern_U3D_Version/Assets/002FlyweightPattern at master TYJia/GameDesignPattern_U3D_Version GitHub 看到了没见过的观点&#xff1a;…

我的算法基础实验代码-下篇

第一题 题目介绍 输入一些数值&#xff0c;求出现的次数最多的数。如果有多个并列&#xff0c;则从大到小输出。 解题思路 代码实现 package com.nineWeek;import java.util.*;/*** author WangYH* version 2021.1.3* date 2023/5/7 18:29*/public class NumMostTimes {pu…

第十四届蓝桥杯b组c/c++

D:飞机降落&#xff08;全排列&#xff09; #include<iostream> #include<cstring> using namespace std;const int N 12; int n; struct node{int t, d, l; //t为此飞机的最早降落时间 d为盘旋时间 l为降落所需时间 }p[N]; bool st[N];//DFS求全排列模型 bool d…

【真题解析】系统集成项目管理工程师 2021 年下半年真题卷

本文为系统集成项目管理工程师考试(软考) 2021 年上半年真题&#xff0c;包含答案与详细解析。考试共分为两科&#xff0c;成绩均 ≥45 即可通过考试&#xff1a; 综合知识&#xff08;选择题 75 道&#xff0c;75分&#xff09;案例分析&#xff08;问答题 4 道&#xff0c;75…

ChatGPT 学习与使用总结

ChatGPT 学习与使用总结 最近ChatGPT大火&#xff0c;2023有可能就是AGI元年了。近两个月使用下来&#xff0c;ChatGPT给我最深刻的感觉就是它所具备的理解和思维能力&#xff0c;第一次体验时真的是非常震撼&#xff0c;完全是之前各种『人工智障』智能助理所不能比拟的&…