想法是 - 为此,您需要从现有表格派生的另一个表格,其中包含将显示在图表上的 x 轴值。
我从这样的数据开始:-
表 1
那么,让我们在这个 Table1 上生成轴列(Calculated Column):-
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)
这个AxisCol的数据类型是“Text”。
在表1中生成月份年份列(计算列)
Month Year = FORMAT(Table1[Date], "MMM YY")
Year = YEAR(Table1[Date])
将这两列的数据类型也设置为“文本”。
创建一个新表:-
Axis_Table = DISTINCT(Table1[AxisCol])
这已经创建了断开连接的表。
现在,创建 Date_Col(计算列)以在 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
现在,您可以在 Axis_Table 中创建排序顺序(计算列)
Sort Order = DATEDIFF((Axis_Table[Date_col]),MAX(Axis_Table[Date_col]),MONTH)
现在作为Measure的最终输出,
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
可以根据您的过滤器选择和您可能拥有的其他条件更改此度量。
最终的视觉效果是这样的,
使用工具提示中的排序顺序,然后按排序顺序对视觉对象内的轴进行排序。
然后,您可以在 axis_col 上的表之间创建关系,以便切片器工作。
然后您可以使用此条件格式区分轴 -
conditional formatting = IF(LEN(SELECTEDVALUE(Axis_Table[AxisCol])) = 4,1,0)
如果您难以理解解决方案,请告诉我。
如果你能得到它为你工作的答案,请接受它。