2015-08-15 3 views
4

Я пытаюсь с помощью Power View нарисовать сумму всех остатков на счетах в разные моменты времени, чтобы я мог видеть, как изменяется сумма.DAX Dynamic Total with Power View

У меня нет истории транзакций (добавить/вычесть), только «Баланс» в определенный момент времени для каждой учетной записи.

Упрощенный пример моих данных:

Account Date Balance
a111 01 January 2015 100
a111 01 February 2015 150
b222 01 March 2015 200
c333 01 March 2015 300
b222 01 May 2015 150
d444 01 June 2015 400

Насколько я могу судить, мне нужно создать меру для создания динамического ранга на «Учетную запись», упорядоченное по последней дате. Затем я должен был бы создать вторую оценку для каждой учетной записи, где ранг = 1.

Существует аналогичный пример этой проблемы, обсуждаемый в вопросе PowerPivot DAX - Dynamic Ranking Per Group (Min Per Group), однако я не могу показать, как это отображать, как я хочу на линейном графике в Power View.

То, что я хочу, чтобы отобразить на линии графика (давая график разберется недостающие даты):

Date Balance
01 Jan 2015 100 -- Account a111 only
01 Feb 2015 150 -- Account a111 only, but the new value
01 Mar 2015 650 -- Accounts a111 (latest), b222 and c333
01 May 2015 600 -- As above, but account b222 is updated
01 Jun 2015 1000 -- Latest values for all accounts

Однако то, что я в настоящее время наблюдаем:

Date Balance
01 Jan 2015 100 -- Sum of Balances matching this date
01 Feb 2015 150 -- As above
01 Mar 2015 500 -- As above
01 May 2015 150 -- As above
01 Jun 2015 400 -- As above

Проблема, насколько я могу судить, заключается в том, что в каждой точке данных в graph, «контекст фильтра» уменьшает только до строк, которые соответствуют дате, тогда как мне нужны все строки, включенные до этой даты, с «ранга» 1.

Для справки, я использую Excel 2013 и данные в конечном итоге поступают через Power Query (вытаскивание данных из SharePoint), поэтому я могу при необходимости работать над магией (т. е. генерируя числовой «идентификатор группы» для использования с функцией DAX MAX(), поскольку это не похоже на строки).

Надеюсь, это не смущает и заранее благодарит за любую помощь.

ответ

1

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

Предположим, у вас есть таблица дат, называемая Date.

Итак, сначала создать базовую меру

[Total Balance] := SUM(FactTable[Balance]) 

Далее вычислит первый месяц в таблице фактов для использования в качестве напольного для поиска через наши табличные значения Даты.

[First Ever Balance Date] := FIRSTDATE(ALL(FactTable[Date])) 

И теперь мы определяем последнюю дату с балансом для диапазона дат между этим первым месяцем и текущим месяцем в контексте:

[Last Balance Date] := 
LASTNONBLANK (
    DATESBETWEEN (Date[Date], [First Ever Balance Date], MAX (Date[Month])), 
    [Total Balance] 
) 

Так учитывание A111 в месяце 5/1/2015. Эта мера будет выглядеть во всех датах между 1/1/2015 (наш [First Ever Balance Date]) и 5/1/2015MAX Date[Month]), найти последнюю строку с балансом и возвращает соответствующий Date[Date] (2/1/2015).

Эта мера возвращает BLANK в течение любого месяца до первоначального баланса учетной записи. Использование Пробелы в дате фильтрации не работает, поэтому мы должны заменить эти ПУСТЫЕ значения с [First Ever Balance Date], чтобы обеспечить приработки баланс для этой учетной записи будет возвращать 0.

[Last Balance Date Remove Blanks] := 
IF (
    ISBLANK ([Last Balance Date]), 
    [First Ever Balance Date], 
    [Last Balance Date] 
) 

Теперь мы можем вычислить текущий баланс любого счета за любой месяц, просматривая баланс по состоянию на Last Balance Date Remove Blanks

[Last Balance] := 
CALCULATE (
    [Total Balance], 
    DATESBETWEEN (Date[Date], [Last Balance Date Remove Blanks], 
    [Last Balance Date Remove Blanks]) 
) 

И, наконец, мы используем SumX через счета сложить свою индивидуальную Last Balance суммы.

[Account Total Balance] := SUMX(ALL(FactTable[Account]), [Last Balance]) 

Теперь в сводной таблице вы просто положить Date [месяц] на строках и [Account Total Balance] в качестве меры. Обратите внимание, что это будет включать месяцы без строк таблицы фактов, таких как 4/1/2015 в вашем наборе образцов. Если вы хотите, чтобы исключить их, добавьте еще одну промежуточную меру считать свои фактологические строки таблицы:

[Fact Table Row Count] := COUNTROWS (FactTable) 

А затем создать меру для возврата BLANK(), если [Факт строки таблицы Count] является BLANK(), а в противном случае [ Баланс счета]

[Account Balance Hide Rows] := 
IF (
    ISBLANK ([Fact Table Row Count]), 
    BLANK(), 
    [Account Balance] 
) 
+0

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