美文网首页BI学习笔记
BI技巧丨矩阵甘特图

BI技巧丨矩阵甘特图

作者: Fabric丨白茶 | 来源:发表于2023-05-13 20:28 被阅读0次

    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的初学者。


    相关文章

      网友评论

        本文标题:BI技巧丨矩阵甘特图

        本文链接:https://www.haomeiwen.com/subject/mjkkkdtx.html