在 Power BI 中并排显示半相关表的度量
Showing Side by Side Measures from Semi-Related Tables in Power BI
我在 Power BI 中有一个数据模型,除其他外,它具有以下 tables
- 员工(维度;员工 ID/name)
- 职位(维度;包含有关职位的详细信息,包括职位 ID)
- 员工历史 - 包含员工在工作中每一天的记录(快照 table);
- 工作预算历史 - 包含每天为工作编制预算的记录(快照 table)
- 日历Table
table的模型是这样的(简化版):
在 Power BI 中,我试图制作一个简化的 table 视图,其中包含基于数据集中最近一天的预算历史记录和员工历史记录的度量(简单计数 rows/distinct 日历计数 table)
但是,如果我尝试将这两种措施都放在 table 上,尝试这样做会得到以下结果。基本上,它似乎是在每个 table 之间进行交叉连接,并将员工与他们没有的工作相匹配(这在添加预算时发生)。
当然,如果我只执行一项单一措施,一切都会完美无缺。我相当确定这是因为'employee'和'budget history'在这段关系中没有真正的联系,所以它只是在没有任何上下文的情况下加入日期的所有内容。
我尝试了几种方法,例如与 userelationship() 建立非活动关系,使用视觉级别过滤器等,但我不确定在这种情况下最好的选择是什么。 (我尽量避免双向关系)
理想情况下,此信息应在该日期显示 Joe 作为总裁出席,Sally 作为操作员出席,经理职位无人,但这三者都已列入预算。
如有任何建议,我们将不胜感激。我附上了一个简化的模型 pbix 文件以供参考。
这是一个复杂的问题,原因有很多。我能够制作这份报告:
通过从 table 中删除字段“名称”并将其替换为度量:
Employee Name =
CALCULATE(
SELECTEDVALUE(Employees[Name]),
CROSSFILTER(Employees[Employee_ID], Employee_History[Employee_ID], BOTH)
)
它看起来与您想要的报告完全一样,但如果您有其他要求,则需要确保这种方法适合您。
如果是acceptable,简单说明一下:
- 问题的根本原因是缺少员工预算关系。当您将名称作为过滤器放入 table 时,它不会传播到预算 table 并导致笛卡尔积。
- 从 table 中删除姓名消除了过滤器传播的需要,但您将看不到员工姓名。我通过使用度量提取员工姓名来解决这个问题,其中所需的传播由 CROSSFILTER 函数强制执行(本质上,它就像一个临时的双向关系,只有在你需要它的时候,所以它不会对模型的其余部分产生负面影响)。
我在 Power BI 中有一个数据模型,除其他外,它具有以下 tables
- 员工(维度;员工 ID/name)
- 职位(维度;包含有关职位的详细信息,包括职位 ID)
- 员工历史 - 包含员工在工作中每一天的记录(快照 table);
- 工作预算历史 - 包含每天为工作编制预算的记录(快照 table)
- 日历Table
table的模型是这样的(简化版):
在 Power BI 中,我试图制作一个简化的 table 视图,其中包含基于数据集中最近一天的预算历史记录和员工历史记录的度量(简单计数 rows/distinct 日历计数 table)
但是,如果我尝试将这两种措施都放在 table 上,尝试这样做会得到以下结果。基本上,它似乎是在每个 table 之间进行交叉连接,并将员工与他们没有的工作相匹配(这在添加预算时发生)。
当然,如果我只执行一项单一措施,一切都会完美无缺。我相当确定这是因为'employee'和'budget history'在这段关系中没有真正的联系,所以它只是在没有任何上下文的情况下加入日期的所有内容。
我尝试了几种方法,例如与 userelationship() 建立非活动关系,使用视觉级别过滤器等,但我不确定在这种情况下最好的选择是什么。 (我尽量避免双向关系)
理想情况下,此信息应在该日期显示 Joe 作为总裁出席,Sally 作为操作员出席,经理职位无人,但这三者都已列入预算。
如有任何建议,我们将不胜感激。我附上了一个简化的模型 pbix 文件以供参考。
这是一个复杂的问题,原因有很多。我能够制作这份报告:
通过从 table 中删除字段“名称”并将其替换为度量:
Employee Name =
CALCULATE(
SELECTEDVALUE(Employees[Name]),
CROSSFILTER(Employees[Employee_ID], Employee_History[Employee_ID], BOTH)
)
它看起来与您想要的报告完全一样,但如果您有其他要求,则需要确保这种方法适合您。
如果是acceptable,简单说明一下:
- 问题的根本原因是缺少员工预算关系。当您将名称作为过滤器放入 table 时,它不会传播到预算 table 并导致笛卡尔积。
- 从 table 中删除姓名消除了过滤器传播的需要,但您将看不到员工姓名。我通过使用度量提取员工姓名来解决这个问题,其中所需的传播由 CROSSFILTER 函数强制执行(本质上,它就像一个临时的双向关系,只有在你需要它的时候,所以它不会对模型的其余部分产生负面影响)。