同一图中的近日期的年份和月份的X轴

时间:2019-06-28 10:10:06

标签: powerbi dax

我有一个数据集,其中包含多年的月度值(按月和其他属性分组,因此每个月可以有多个记录,尽管我认为这对问题不重要)

       month     val  ...   
1 2017-01-01 17.0700
2 2017-01-01 17.0700
3 2017-02-01  2.4432
.. .........   .....
4 2019-04-01 61.0800
5 2019-04-01 40.7200
6 2019-05-01 20.3600

我可以正确地可视化条形图中的每月数据(每年month和日期层次结构中的YearMonth被认为是日期层次结构)。

我的问题是,由于数据跨度较长,因此图表很大,我希望能够将一年的数据(例如2017、2018)减少到其月平均水平。 结果图表的x轴为: avg 2017 - avg 2018 - jan.2019 - feb. 2019 ... 这样做的想法是能够从一年的每月平均值向下追溯到每月的值,尽管我不知道这是否可能?

通过以下方法,我设法获得了月平均值:

year_monthly_avg =
            AVERAGEX (
                SUMMARIZE ( data, data[month] ),
                CALCULATE ( SUM ( data[val] )
            )   

我可以在单独的条形图中显示(以轴为年)。

1 个答案:

答案 0 :(得分:1)

想法是-为此,您需要从现有表格中获取另一个表格,该表格将保存您的x轴值。

我从这样的数据开始:-

表1

Given Data

因此,然后让我们在此Table1上生成轴列(计算列):-

sbrc ...

此AxisCol的数据类型为“文本”。

生成表1中的月份和年份列(计算列)

AxisCol = 
       Var MaxYear = MAX((Table1[Date].[Year]))
       Var Required_Year = YEAR(Table1[Date])
       Var YearDiff = MaxYear - Required_Year
       Var output = IF(YearDiff = 0, FORMAT(FORMAT(Table1[Date], "MMM YY"),"string"), FORMAT(Required_Year, "@"))
       Return (output)

也将这两列的数据类型设置为“文本”。

创建一个新表:-

Month Year = FORMAT(Table1[Date], "MMM YY") 
Year = YEAR(Table1[Date]) 

现在已创建断开连接的表。

现在,创建Date_Col(计算列)以找到Axis_Table内的排序顺序。

Axis_Table = DISTINCT(Table1[AxisCol]) 

现在,您可以在Axis_Table中创建排序顺序(计算列)

Date_col = 
        Var RequiredVal = VALUE(Axis_Table[AxisCol])
        Var Year_or_Month_year = IF(LEN(RequiredVal) = 4, "Year", "Month Year")
        Var year_split = VALUE("20" & RIGHT(Axis_Table[AxisCol],2))
        Var Month_split = (LEFT(Axis_Table[AxisCol],3))
        Var month_num = SWITCH(Month_split, "Jan", 1, "Feb", 2, "Mar", 3, "Apr"  
               , 4, "May", 5, "Jun", 6, "Jul", 7, "Aug"  
               , 8, "Sep", 9, "Oct", 10, "Nov", 11, "Dec"  
               , 12)  
        Var myDate = if(Year_or_Month_year = "Year",DATE(RequiredVal,1,1),DATE(year_split, month_num,1))
        Return myDate

现在将最终输出作为 Measure

Sort Order = DATEDIFF((Axis_Table[Date_col]),MAX(Axis_Table[Date_col]),MONTH)

可以根据您选择的过滤器和其他条件来更改此度量。

最终视觉效果如下

enter image description here

使用“工具提示”中的“排序顺序”,然后按照“排序顺序”对视觉对象中的轴进行排序。

然后可以在axis_col上的表之间创建关系,以使切片器正常工作。

enter image description here

enter image description here

然后您可以使用此格式通过条件格式来区分轴-

ValueReq = 
            var required_axis_val = SELECTEDVALUE(Axis_Table[AxisCol])
            Var requiredaxis = LEN(required_axis_val)
            Var output1 = CALCULATE(AVERAGE(Table1[Value]), FILTER(Table1,Table1[Month Year] = required_axis_val))
            Var output2 = CALCULATE(AVERAGE(Table1[Value]),FILTER(Table1, Table1[Year] = required_axis_val))
            var out_req = IF(requiredaxis = 4, output2, output1)
            return out_req

enter image description here

如果您正在努力了解解决方案,请告诉我。

接受答案,如果它可以为您工作。