powerbi - 按维度切片的 HR 员工计数 - 渐变维度
问题描述
我需要计算人数,同时保持度量可按连接到事实表的任何维度进行切片。鉴于我的表和模型的性质,我需要做的是对渐变维度类型 2 进行时间点计算。
我设法使用函数 KEEPFITLES 使它工作,但我需要一个更具可扩展性的函数,它不需要我列出我想要切片的所有维度。
这是我的带有示例数据的 PowerBI 文件:https ://gofile.io/d/smS2Hr
这是我的模型的简化草图(图像):https ://ibb.co/fQYpsdx
背景:
我计算的第一个衡量标准是期初的员工人数(员工 SoP)。如果最终用户在 PowerBI 中选择 2020 年 1 月的整个月份,则期间的开始是 2020 年 1 月 1 日。因此,2020 年 1 月的“员工 SoP”将给出 2020 年 1 月 1 日的员工人数。
下面的公式计算员工 SoP 的正确值:
Employees SoP =
VAR MinDate = MIN ( 'Date'[Date]) //Mininum date selected by end-user in PowerBI
VAR Result =
CALCULATE (
DISTINCTCOUNT(Fact[EmployeeId]),
FILTER(ALL('Fact'), 'Fact'[EffectiveStartDate] <= MinDate
&& IF(ISBLANK('Fact'[EffectiveEndDate]), date(2050,1,1), Fact[EffectiveEndDate]) > MinDate
))
RETURN
Result
上述公式的问题在于,由于使用了 ALL 函数,该度量不能按任何维度进行切片,即薪酬等级和就业状况(相同的数字会重复)。
结果:
因此,我使用 KEEPFILTERS 创建了另一个度量,它运行良好。
Employees SoP KEEPFITLERS =
VAR MinDate = MIN ( 'Date'[Date]) //Mininum date selected by end-user in PowerBI
VAR Result =
CALCULATE (
DISTINCTCOUNT(Fact[EmployeeId]),
FILTER(ALL('Fact'), 'Fact'[EffectiveStartDate] <= MinDate
&& IF(ISBLANK('Fact'[EffectiveEndDate]), date(2050,1,1), Fact[EffectiveEndDate]) > MinDate
), KEEPFILTERS(PayClass), KEEPFILTERS(EmploymentStatus))
RETURN
Result
这个公式的问题是我必须在 DAX 公式中列出我想要切片的所有维度(例如,PayClass、EmploymentStatus)。这不是非常可扩展的。
我对 REMOVEFILTERS 进行了一些试验,但目前看来它不适用于 DirectQuery,因此它无法解决我的生产问题。关联:
https://docs.microsoft.com/en-us/dax/removefilters-function-dax
问题:如何使用 KEEPFILTERS 的替代方法编写此度量,我不必列出我想要切片的每个维度?
谢谢!
解决方案
我只是设法解决了我的问题。我将这两种关系都与 Dates 表“不活动”。有了它,我可以删除 DAX 公式中的“ALL”函数,现在它不仅可以计算正确的值,而且还可以很好地切片。我将不得不使用 USERELATIONSHIP 函数来计算更复杂的度量,但在大多数情况下,这个简单的解决方案就像一个魅力。
Employees SoP without ALL =
VAR MinDate = MIN ( 'Date'[Date]) //Mininum date selected by end-user in PowerBI
VAR Result =
CALCULATE (
DISTINCTCOUNT(Fact[EmployeeId]),
FILTER('Fact', 'Fact'[EffectiveStartDate] <= MinDate
&& IF(ISBLANK('Fact'[EffectiveEndDate]), date(2050,1,1), Fact[EffectiveEndDate]) > MinDate
))
RETURN
Result
推荐阅读
- ruby-on-rails - 在 html.erb 页面中显示预格式化的 HTML
- java - Spring Boot 2 Actuator /health端点在使用身份验证时不显示其他信息
- java - 何时/何地在 Google App Engine for Search API 中创建索引 - Java
- angular - 在 Angular 应用程序中显示来自 Postgres 的数据。CORS 问题
- dart - Flutter - 如何自动启用 AnimatedOpacity?
- java - 为什么在记录数、生产者和消费者数量不变的 Kafka 代理中 GC 时间会增加?
- postgresql - 在 PostgreSQL 函数中传递表列名
- java - Eclemma:for 循环中遗漏了分支——这是什么意思?
- javascript - 我如何从这个起始数组创建这个数组?
- java - Java:由于超时,对 N 系列求和失败