alt

BOSS:白茶,我们最近有很多项目,能不能做个甘特图?

白茶:没问题!(应用市场上随便找个甘特图就OK了嘛!)

BOSS:对了,不要那种点进来会有点卡,等半天的那种,要保持速度!

白茶:(#¥%@!&)没问题!

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

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

Gantt和Gantt Chart By MAQSoftware。

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

案例数据:

alt

alt

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

alt

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

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

模型关系更新如下:

alt

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

思考一下

接下来需要做什么?

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

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

alt

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

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

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

alt alt

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

alt

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

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

展示效果如下:

alt

alt alt

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