4

我试图通过 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

据我所知,问题在于,在图表中的每个数据点,“过滤上下文”正在减少到仅与日期匹配的行,而我需要在该日期之前打开所有行,并带有“排名'1。

作为参考,我使用的是 Excel 2013,数据最终是通过 Power Query 输入的(从 SharePoint 中提取数据),因此如果需要,我可以在那里发挥一些作用(即生成一个数字“组 ID”以用于 DAX MAX()函数,因为它似乎不喜欢字符串)。

我希望这不会令人困惑,并提前感谢您的帮助。

4

1 回答 1

1

对此的解决方案是有一个单独的日期维度表,以便可以每月独立计算余额,而无需考虑事实表。

假设您有一个名为 Date 的日期表。

因此,首先创建基本度量

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

接下来,我们计算事实表中的第一个月,以用作查看 Date 表值的底线。

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

现在我们在上下文中确定最后一个日期,并在第一个月和当前月份之间的日期范围内取得平衡:

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

因此,请考虑a1115/1/2015月份。此度量将查看1/1/2015 (our [First Ever Balance Date]) 和5/1/2015 ( the MAX Date[Month]) 之间的所有日期,找到最后一行有余额并返回相应的Date[Date]( 2/1/2015 )。

此度量将在帐户初始余额之前的任何一个月返回 BLANK。在日期过滤中使用 BLANKS 不起作用,因此我们应该将这些 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[Month] 放在行上,并将 [Account Total Balance] 作为度量。请注意,这将包括样本集中没有事实表行的月份,例如 2015 年 4 月 1 日。如果您希望排除这些,请添加另一个中间度量来计算事实表行数:

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

如果 [Fact Table Row Count] 为 BLANK(),则创建一个度量以返回 BLANK(),否则为 [Account Total Balance]

[Account Balance Hide Rows] :=
IF (
    ISBLANK ( [Fact Table Row Count] ),
    BLANK (),
    [Account Balance]
)
于 2015-09-01T16:34:20.700 回答