我的任务是统计要求确认各种文档的用户数量。 但数据是事件日志,数据模型不符合业务规则。
我对 PowerBI 或 DAX 不太熟悉,这个问题让我很费脑筋。
我要报告的系统是一个文档管理系统。一个
Document
经过两个工作流程。
Authoring Workflow
,编辑者首先Edits
,然后Publishes
文档。Acknowledgement Workflow
,其中Users
被要求Acknowledge
已发布的文档。此步骤可以同时或顺序重复多次。业务规则规定,一旦发布文档,之前的确认请求将被忽略,但表中的确认请求。
例如,如果文档已经历两次创作和确认周期,则第一次要求 5 位用户确认。第二次要求 2 位用户确认。还有另一个文档要求 1 个用户确认,请求的用户总数是 3。(2+1)而不是 8。(5+2+1)
所有数据都存在于报告中,并且定义了关系。业务逻辑可能不会更改,并且数据模型可能会添加列和表。只要它们是从现有数据中得出的。
提前非常感谢!
// Tables
Document: Id, Description
Activity: Workflow Id*, Type, User, Executed, Acknowledged
Workflow: Document Id*, Workflow Id, Type,
文件 |ID|描述| |-|-| |D1|文件一| |D2|文档二|
工作流程 |文档 ID|类型|工作流程 ID| |-|-|-| |D1|创作|W1| |D1|致谢|W2| |D1|致谢|W3| |D1|创作|W4| |D1|致谢|W5| |D2|创作|W6| |D2|致谢|W7|
活动 |工作流程 ID|类型|用户|已执行|确认| |-|-|-|-|-| |W1|已编辑|U1|2000 年 1 月 1 日|na(空)| |W1|已发布|U1|2000 年 1 月 3 日|na| |W2|请求确认|U2|1/4/2000|null| |W2|请求确认|U3|2000 年 1 月 4 日|2000 年 1 月 5 日| |W3|请求确认|U4|1/5/2000|null| |W3|请求确认|U5|2000 年 1 月 5 日|2000 年 1 月 5 日| |W3|请求确认|U6|2000 年 1 月 5 日|2000 年 1 月 5 日| |W4|已编辑|U1|2000 年 1 月 6 日|na(空)| |W4|已发布|U1|2000 年 1 月 7 日|na(空)| |W5|请求确认|U2|1/8/2000|null| |W5|请求确认|U6|2000 年 1 月 8 日|2000 年 1 月 9 日| |W6|已编辑|U1|2000 年 1 月 1 日|na(空)| |W6|已发布|U1|2000 年 1 月 3 日|na(空)| |W7|请求确认|U2|2000 年 1 月 5 日|2000 年 1 月 8 日|
工作流程
W4
应导致来自 W2
和 W3
的前 5 个请求被忽略。
预期结果:包含两个条形的条形图。
Total Requests | === 3
Completed Requests | == 2
基本上,您需要确定每个文档的最新“发布”活动以及最近的“确认”请求。
对于发布 您可以通过向工作流表添加计算列来完成此操作。像这样的东西应该可以工作
CALCULATE(
MAX(Activity[Executed]),
FILTER(
Activity,
Activity[Workflow Id] = EARLIER(Workflow[Workflow Id])
&& Activity[Type] = "Published"
)
)
对于“确认”,创建另一个计算列
VAR CurrentWorkflowId = Activity[Workflow Id]
VAR DocumentId = LOOKUPVALUE(Workflow[Document Id], Workflow[Workflow Id], CurrentWorkflowId)
VAR MostRecentPublishDate = CALCULATE(
MAX(Workflow[MostRecentPublishDate]),
FILTER(
Workflow,
Workflow[Document Id] = DocumentId
)
)
RETURN IF(Activity[Type] = "Request Acknowledgement" && Activity[Executed] > MostRecentPublishDate, TRUE, FALSE)
然后你只需要创建两个度量来计算它们 请求总数
CALCULATE(
COUNTROWS(Activity),
Activity[IsRelevantAcknowledgment] = TRUE
)
以及总体致谢
CALCULATE(
COUNTROWS(Activity),
Activity[IsRelevantAcknowledgment] = TRUE,
NOT ISBLANK(Activity[Acknowledged])
)
让我知道这是否有效