我有一个数据集,其中包含多年的月度值(按月和其他属性分组,因此每个月可以有多个记录,尽管我认为这对问题不重要)
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
和日期层次结构中的Year
和Month
被认为是日期层次结构)。
我的问题是,由于数据跨度较长,因此图表很大,我希望能够将一年的数据(例如2017、2018)减少到其月平均水平。
结果图表的x轴为:
avg 2017 - avg 2018 - jan.2019 - feb. 2019 ...
这样做的想法是能够从一年的每月平均值向下追溯到每月的值,尽管我不知道这是否可能?
通过以下方法,我设法获得了月平均值:
year_monthly_avg =
AVERAGEX (
SUMMARIZE ( data, data[month] ),
CALCULATE ( SUM ( data[val] )
)
我可以在单独的条形图中显示(以轴为年)。
答案 0 :(得分:1)
想法是-为此,您需要从现有表格中获取另一个表格,该表格将保存您的x轴值。
我从这样的数据开始:-
表1
因此,然后让我们在此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)
可以根据您选择的过滤器和其他条件来更改此度量。
最终视觉效果如下
使用“工具提示”中的“排序顺序”,然后按照“排序顺序”对视觉对象中的轴进行排序。
然后可以在axis_col上的表之间创建关系,以使切片器正常工作。
然后您可以使用此格式通过条件格式来区分轴-
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
如果您正在努力了解解决方案,请告诉我。
接受答案,如果它可以为您工作。