建立在Chris Campbell's Article关于有效项目的基础上,我想添加一个额外的维度。我的表在非规范化的2层层次结构中引用它们自己的父事项。在调用RELATED()函数之后,项目的主查找表可能如下所示:
Cases
ID | Client | ParentMatterName | MatterName | ClaimAmount | OpenDate | CloseDate
1 | Mr. Smith | ABC Ltd | ABC Ltd | $40,000 | 1 Jan 15 | 4 Aug 15
2 | Mr. Smith | ABC Ltd | John | $0 |20 Jan 15 | 7 Oct 15
3 | Mr. Smith | ABC Ltd | Jenny | $0 | 1 Jan 15 | 20 Jan 15
4 | Mrs Bow | JQ Public | JQ Public | $7,000 | 1 Jan 15 | 4 Aug 15
我的目标是确定在一个月内有多少家长组开放。例如,在1月底,将有两个(ABC Ltd和JQ public)。问题是,我还想报告在一段时间内关闭了多少事项。只有当母公司集团的最后一项事项关闭时(2015年10月7日为ABC有限公司),才会计算关闭。所以我想要的输出是:
| Jan 15 | Aug 15 | Oct 15
Count Matters Open | 2 | 2 | 0
Count Opened | 2 | 0 | 0
Count Closed | 1 | 1 | 1
怎么能确定?我可以让每一行知道其组中其他人的状态吗?
Count Matters Open:=CALCULATE (
DistinctCount(Cases[ParentMatterName]),
FILTER (
MatterListView,
[MatterOpenAtEnd] = TRUE() ),
不起作用,因为它会计算每个闭包以及每个开放物质。
答案 0 :(得分:1)
因此,您的口头描述似乎与您的输出样本不一致。以下措施适用于您描述的需求,更常见的是。
基于此要求
关闭只会在母公司集团的最后一项事项结束时计算(2015年10月7日为ABC Ltd)。
我已将两个新字段添加到Cases作为计算列,以指示给定行是代表第一个已打开的事物,还是一个代表父组中的最后一个已关闭事项:
FirstOpened=
IF(
[OpenDate] =
CALCULATE(
MIN('Cases'[OpenDate])
,ALLEXCEPT('Cases', 'Cases'[ParentMatterName])
)
,1
,0
)
LastClosed:=
IF(
[CloseDate] =
CALCULATE(
MAX('Cases'[CloseDate])
,ALLEXCEPT('Cases', 'Cases'[ParentMatterName])
)
,1
,0
)
然后我实施了以下措施:
CountMattersOpen:=
CALCULATE(
DISTINCTCOUNT('Cases'[ParentMatterName])
,FILTER(
VALUES('Cases'[OpenDate])
,'Cases'[OpenDate] <= MAX(DimDate[Date])
)
,FILTER(
VALUES('Cases'[CloseDate])
,'Cases'[CloseDate] >= MIN(DimDate[Date])
)
)
CountOpened:=
CALCULATE(
DISTINCTCOUNT('Cases'[ParentMatterName])
,FILTER(
VALUES('Cases'[OpenDate])
,'Cases'[OpenDate] <= MAX(DimDate[Date])
&& 'Cases'[OpenDate] >= MIN(DimDate[Date])
)
,'Cases'[FirstOpened] = 1
)
CountClosed:=
CALCULATE(
DISTINCTCOUNT('Cases'[ParentMatterName])
,FILTER(
VALUES('Cases'[CloseDate])
,'Cases'[CloseDate] <= MAX(DimDate[Date])
&& 'Cases'[CloseDate] >= MIN(DimDate[Date])
)
,'Cases'[LastClosed] = 1
)
这些适用于任意(连续)日期集,其中日历月代表一小部分。如果您愿意,可以选择任意两个任意日期之间的时间范围,这些措施仍然可以正常运行。如果您已将数月放入数据透视表,那么它将适用于每个数据透视表行/列的月边界。
请注意,这仅适用于日期维度的存在,并且该日期维度必须提供数据透视表的rowfilters / columnfilters。不要在数据透视表行/列中使用案例中的任何日期。
我们所做的就是使用FILTER()逐步完成组成Case [CloseDate]和Cases [OpenDate]的值列表,并过滤掉那些逻辑上不属于日期上下文的结果。数据透视表(并根据需要尊重[FirstOpened] / [LastClosed])
同样,我已经按照你的书面描述,而不是你的样本输出。
我的目标是确定在一个月内有多少家长组开放。
[CountMattersOpen]将为您提供在月末之前打开的所有内容,并在月初(或任意时间范围)之后关闭。这只计算当前日期上下文中打开的所有内容
[CountOpened]没有特定的定义,所以我把它与CountClosed相反 - 这会计算在当前日期上下文中有第一个[OpenDate]的[ParentMatterName]的数量
关闭只会在母公司集团的最后一项事项结束时计算(2015年10月7日为ABC Ltd)。
[CountClosed]为您提供在当前日期上下文中关闭最后一个子[[MatterName]]的不同[ParentMatterName]的数量。
这是我的模型图的图像(这里不需要[BeginningOfMonth]和[EndOfMonth]):
答案 1 :(得分:0)
抵消空白的一种可能方法是使用COUNTBLANK函数,并结合AND:
=
IF (
AND (
Cases[CloseDate]
= CALCULATE (
MAX ( Cases[CloseDate] ),
ALLEXCEPT (
Cases,
Cases[ParentName]
)
),
CALCULATE (
COUNTBLANK ( Cases[CloseDate] ),
ALLEXCEPT (
Cases,
Cases[ParentName]
)
)
= 0
),
1,
0
)