2017-01-12 3 views
0

У меня есть отчет Power BI с несколькими строками (это отчет P и L), отображаемый в визуализации списка.Список отчетов с каждой строкой, показывающей процент одной конкретной строки.

Это заселена с видом на SQL

Одна из линий «Общий доход»

мне нужно каждую строку, чтобы показать свою долю от общего дохода в процентах:

т.е.

LINE   MTH  % 
------------------------ 
Line1   5 10 
Total Revenue 50 100 
Line2   20 40 
Line3   4  8 
Line4   12 24 

Обратите внимание, что MTH не суммирует общий доход, поэтому я не могу просто взять итог, мне нужно взять линию под названием T ОБЩИЙ доход как знаменатель

Вот прекрасный пример того, что я пытаюсь сделать здесь:

https://msdn.microsoft.com/en-us/library/ee634760.aspx

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

LINE   MTH  % 
------------------------ 
Line1   5  
Total Revenue 50 50 
Line2   20  
Line3   4  
Line4   12  

Вот мой DAX:

MTH% = 
    SUMX(
     CALCULATETABLE(
     'vw_PandL', 
     'vw_PandL'[Line]="TOTAL REVENUE" 
     ) 
     , 
      [MTH] 
) 

Насколько я могу судить, единственное различие между моим выражением и примером на веб-странице состоит в том, что на веб-странице используется размер отдельно для фильтрации строки, тогда как выражение может использовать столбец в таблица для фильтрации строк

Пример Дано на веб-странице:

=SUMX(CALCULATETABLE(
     'InternetSales_USD', 
     'DateTime'[CalendarYear]=2006 
    ) 
, [SalesAmount_USD]) 

Основываясь на комментариях ниже это должно работать, но это не работает для меня

Я п ой также пытался:

CALCULATE(
    SUM([MTH]), 
    FILTER(ALL('vw_PandL'), 
     [Line]="TOTAL REVENUE") 
     ) 

который получает мне итог по всем направлениям для ИТОГО ДОХОДОВ, но игнорирует фильтры отчета. Это ближе.

Функция ALLEXCEPT предназначена для того, чтобы отфильтровывать все, кроме указанных столбцов, однако, когда я пытаюсь это сделать, я получаю тот же результат.Он по-прежнему не принимает к сведению моих дат и сайта фильтров:

CALCULATE(
    SUM([MTH]), 
    FILTER(ALLEXCEPT('vw_PandL','vw_PandL'[DateKey],'vw_PandL'[DimSiteKey]), 
     [Line]="TOTAL REVENUE") 
     ) 

Update 1:

мне удалось воспроизвести это в простых моделях

Среди многих вещей, что я Жду» Следует отметить, что колонка LINE сортируется по другому столбцу SortZZ

Вычисление, заданное в ответе @Foxan Ng, отлично работает, но как только я сортирую строку Cola mn, он показывает поведение, о котором я упомянул: показатель общей выручки появляется только на линии общего дохода

После дальнейшего расследования: мне даже не нужно сортировать его, я могу просто поместить столбец SortZZ в список, и это сломает calc.

Решение

Окончательное функционирование известково было:

Total Revenue = 
CALCULATE(
    SUM([MTH]), 
    FILTER(
     ALLEXCEPT('vw_PandL','vw_DimPeriod'[Period],'DimSite'[Site]), 
     'vw_PandL'[Line] = "Total Revenue") 
) 

Хитрость заключается в ALLEXCEPT

Мои отношения и ломтерезки настроены следующим образом:

  • vw_PandL является таблица
  • vw_DimPeriod факт присоединился к нему на PeriodCode
  • DimSite также присоединился к нему на SiteKey

При использовании любого из следующих ALLEXCEPT выражений, вычисление не выполнил свои ломтерезки. То есть, этот показатель был общий итог по линии во всех периодов и сайтов:

  1. Ссылаясь присоединиться ключей в таблице фактов:

    ALLEXCEPT('vw_PandL','vw_PandL'[PeriodCode],'vw_PandL'[SiteKey])

  2. со ссылкой присоединиться ключей в размерах:

    ALLEXCEPT('vw_PandL','vw_DimPeriod'[PeriodCode],'DimSite'[SiteKey])

Единственный способ, которым я мог бы получить известково в честь моих ломтерезки было использовать реальное поле, которое я физически, используя в своей ломтерезки, другими словами, метка

ALLEXCEPT('vw_PandL','vw_DimPeriod'[Period],'DimSite'[SiteName]) 

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

+0

В приведенном выше примере (таблица с столбцами LINE и MTH и соответствующий DAX) столбец MTH% вычисляет, как вы ожидаете (50 для всех строк). Я не могу воспроизвести ситуацию, которую вы описываете, где 50 отображается только в строке «Общий доход». – Leonard

+0

Спасибо за ваш ответ - хорошо, что дает мне что-то, чтобы пойти –

+0

Я сделал некоторые изменения. Теперь я нашел что-то, что дает мне результат в каждой строке, но у меня есть фильтры, и они не применяются. –

ответ

0

Пример, который вы предоставили, фактически работает, за исключением того, что вы должны создать его как Measure вместо Calculated Column. Measure работает с фильтром, тогда как Calculated Column останется прежним, даже если применяются фильтры.

Создать Measure называется Total Revenue:

Total Revenue = 
SUMX(
    CALCULATETABLE(
     'vw_PandL', 
     'vw_PandL'[Line] = "Total Revenue" 
    ), 
    [MTH] 
) 

Создать другой Measure называется %:

% = VALUES(vw_PandL[MTH])/[Total Revenue] 

И он будет работать с фильтрами применяются.

В 2015 году: 2015

Для 2016 года: 2016

зависят от характера набора данных, то %Measure может быть изменен, как показано ниже, так что будет работать без фильтров:

% = SUM(vw_PandL[MTH])/[Total Revenue] 

Total

Надеюсь, это поможет.


Edit:

Я изменил Total Revenue на альтернативное решение, которое вы предоставили, и он работает с отсортированной случае колонка:

Total Revenue = 
CALCULATE(
    SUM([MTH]), 
    FILTER(
     ALLEXCEPT('vw_PandL', vw_PandL[DateKey]), 
     [Line] = "Total Revenue" 
    ) 
) 

Нет фильтра: sorted, no filter

Фильтр применявшейся : sorted, filter applied

+0

Спасибо. Я очень ценю, что вы тратите время на приготовление примера. Вы второй человек, который демонстрирует, что это работает, как описано. Однако, когда я использую этот калькулятор, он появляется только на общей линии доходов. Он не повторяется на других строках. Очевидно, должно быть что-то, что я делаю по-другому, поэтому я буду воссоздавать, как есть, и попытаться выяснить, в чем разница. Еще раз спасибо –

+0

@ Nick.McDermaid Когда я создал «Общий доход» как «Столбец», он появляется только в строке с «Total Revenue». Когда я создал его как «Мера», он появляется в каждой строке. Возможно, это то, с чем вы столкнулись? –

+0

Это определенно мера. Я не мог видеть его как столбец на вкладке таблицы (так что это не столбец), но в любом случае я удалил и воссоздал его с помощью _right click/new measure_, и я скопировал ваше точное выражение, а остальные строки определенно пусты. Я убежден, что есть некоторые проблемы с моей моделью.Может быть, потому, что столбец «строка» находится в таблице фактов, а не как отдельный размер? В вашем рабочем примере столбец _Line_ в отдельном измерении или находится в таблице фактов (та же таблица, в которой находится «MTH')? –

Смежные вопросы