Power BI / DAX - динамическое сравнение за изменяющийся период времени - PullRequest
0 голосов
/ 10 мая 2018

Сначала позвольте мне рассказать вам о данных, с которыми я работаю.Это веб-данные из Google Analytics за последние 6-8 недель, поэтому у меня есть даты, значения и множество измерений.Вот что я пытаюсь сделать с этим в Power Bi.

Я хотел бы сравнить сумму значений для определенного периода с соответствующим периодом.НО!формулы обычного параллельного периода не применимы в моем случае (или, возможно, я ошибаюсь, и я могу как-то их использовать), потому что мне нужна следующая логика в моем сравнении: если в фильтрах выбрано меньше или равно семи дням, чем сравнениес долями семь дней назад (поэтому, если выбраны два дня, сравните с двумя днями недели назад), если выбрано более семи дней, сравните с предыдущим периодом того же размера (поэтому, если выбрано 13 дней, сравните с 13 днями напрямуюдо) Плюс я бы хотел, чтобы эта мера реагировала на фильтрацию на стороне измерения.Мне нужна разница в процентах, но в настоящее время я работаю над мерой, которая может, по крайней мере, вернуть мне значение, основанное на логике выше.

Вот что у меня получилось (ниже).Я искал это решение здесь и, честно говоря, я понимаю только половину его.

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

Я прошу сообщество помочь мне оптимизировать этот сценарий или, возможно, найти другое решение для моей проблемы.

Большое спасибо заранее!

Sessions Past Period = 
CALCULATE(SUM (ci_dashboard_v7[Sessions]), FILTER ( ALL ( ci_dashboard_v7 ),  
COUNTROWS (FILTER ( ci_dashboard_v7, EARLIER ( ci_dashboard_v7[Date] ) = DATEADD (  ci_dashboard_v7[Date],IF(DISTINCTCOUNT(ci_dashboard_v7[Date])<7,-7,DISTINCTCOUNT(ci_dashboard_v7[Date])), DAY )
&& ci_dashboard_v7[WMC_partner_lvl1]=EARLIER(ci_dashboard_v7[WMC_partner_lvl1])
&& ci_dashboard_v7[WMC_partner_lvl2]=EARLIER(ci_dashboard_v7[WMC_partner_lvl2])
&& ci_dashboard_v7[Campaign]=EARLIER(ci_dashboard_v7[Campaign])
&& ci_dashboard_v7[cd003]=EARLIER(ci_dashboard_v7[cd003])
&& ci_dashboard_v7[cd135]=EARLIER(ci_dashboard_v7[cd135])
&& ci_dashboard_v7[Channel]=EARLIER(ci_dashboard_v7[Channel])
&& ci_dashboard_v7[Channel_simple]=EARLIER(ci_dashboard_v7[Channel_simple])
&& ci_dashboard_v7[Date]=EARLIER(ci_dashboard_v7[Date])
&& ci_dashboard_v7[Country]=EARLIER(ci_dashboard_v7[Country])
&& ci_dashboard_v7[Domain]=EARLIER(ci_dashboard_v7[Domain])
&& ci_dashboard_v7[Week]=EARLIER(ci_dashboard_v7[Week])
&& ci_dashboard_v7[Week_day]=EARLIER(ci_dashboard_v7[Week_day])
&& ci_dashboard_v7[Year_current]=EARLIER(ci_dashboard_v7[Year_current])
&& ci_dashboard_v7[Week_current]=EARLIER(ci_dashboard_v7[Week_current])
&& ci_dashboard_v7[Week_before_current]=EARLIER(ci_dashboard_v7[Week_before_current])
&& ci_dashboard_v7[is_CRM]=EARLIER(ci_dashboard_v7[is_CRM])
&& ci_dashboard_v7[WMC_tm]=EARLIER(ci_dashboard_v7[WMC_tm])
&& ci_dashboard_v7[Platform]=EARLIER(ci_dashboard_v7[Platform])
&& ci_dashboard_v7[Device]=EARLIER(ci_dashboard_v7[Device])
&& ci_dashboard_v7[OS]=EARLIER(ci_dashboard_v7[OS])
&& ci_dashboard_v7[WMC_type]=EARLIER(ci_dashboard_v7[WMC_type])
&& ci_dashboard_v7[Source_Accengage_Pigeon]=EARLIER(ci_dashboard_v7[Source_Accengage_Pigeon])
&& ci_dashboard_v7[WMC_tool]=EARLIER(ci_dashboard_v7[WMC_tool])
&& ci_dashboard_v7[WMC_full]=EARLIER(ci_dashboard_v7[WMC_full])
&& ci_dashboard_v7[Source]=EARLIER(ci_dashboard_v7[Source])
))))

1 Ответ

0 голосов
/ 11 мая 2018

В этом решении предполагается, что в столбце ci_dashboard_v7 [Date] есть только даты (без раз).

Вот что вы можете попробовать:

  1. Создать таблицу календаря и вызвать ее Дата .Самый простой способ сделать это - создать вычисляемую таблицу со следующей формулой: Date = CALENDARAUTO()
  2. Создать отношение один-ко-многим между 'Дата' [Дата] и ci_dashboard_v7 [Date]
  3. Скрыть столбец ci_dashboard_v7 [Date] и использовать только 'Date' [Date] в слайсерах
  4. Создайте следующую меру:

    Sessions Past Period =
    CALCULATE (
        SUM ( ci_dashboard_v7[Sessions] ),
        DATEADD ( 'Date'[Date], - MAX ( 7, COUNTROWS ( 'Date' ) ), DAY )
    )
...