Ось X с Годом, а также Годом Месяца для ближайших дат на том же графике - PullRequest
1 голос
/ 28 июня 2019

У меня есть набор данных, который содержит месячные значения за многие годы (сгруппированные по месяцам и другим атрибутам, поэтому для каждого месяца может быть несколько записей, хотя я не думаю, что это имеет значение для проблемы):

       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] )
            )   

Который я могу отобразить на отдельной гистограмме (год на оси).

1 Ответ

1 голос
/ 28 июня 2019

Идея в том, чтобы сделать это, вам нужна еще одна таблица, полученная из существующей таблицы, в которой хранятся значения оси x, которые будут на графике.

Я начал стакие данные: -

Таблица 1

Given Data

Итак, давайте сгенерируем столбец оси (Вычисляемый столбец) в этой Таблице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)

Тип данных этого AxisCol - «Текст».

Создание столбца «Год» и «Год» (вычисляемый столбец) в таблице 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)

Теперь конечный результат в виде Мера ,

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

Используйте порядок сортировки в подсказках, а затем сортируйте ось внутри визуального элемента по сортировкеЗаказ.

Затем вы можете создать связь между таблицами на axis_col для работы слайсеров.

enter image description here

enter image description here

Вы можете затем дифференцировать ось с условным форматированием, используя это -

conditional formatting = IF(LEN(SELECTEDVALUE(Axis_Table[AxisCol])) = 4,1,0) 

enter image description here

Позвольте мнезнать, если вы изо всех сил пытаетесь понять решение.

Примите ответ, если сможете заставить его работать на вас.

...