Powerbi 如何使动态轴响应切片器值,而不使用桥接表,仅使用DAX
大家好,我有一个图表,我需要通过改变切片器的值来改变x值轴。这个切片器是黄色的,它有所有的Dims x值,它来自DimList表格。例如,目前图表是totalfreight by custid,但如果我从黄色切片器中检查empid,则需要将图表值更改为totalfreight by empid。所有切片器值都会发生这种情况Powerbi 如何使动态轴响应切片器值,而不使用桥接表,仅使用DAX,powerbi,dax,dashboard,Powerbi,Dax,Dashboard,大家好,我有一个图表,我需要通过改变切片器的值来改变x值轴。这个切片器是黄色的,它有所有的Dims x值,它来自DimList表格。例如,目前图表是totalfreight by custid,但如果我从黄色切片器中检查empid,则需要将图表值更改为totalfreight by empid。所有切片器值都会发生这种情况 但我不喜欢桥接表或任何对性能有不良影响的方法,因为FactTable有10亿行,我用SSAS(表格模型)对其进行建模,并且有一个活动连接。提前感谢。我想您指的是使用桥接表的方
但我不喜欢桥接表或任何对性能有不良影响的方法,因为FactTable有10亿行,我用SSAS(表格模型)对其进行建模,并且有一个活动连接。提前感谢。我想您指的是使用桥接表的方法。我同意,考虑到模型中的数据量,您可能会面临一些性能问题 首先,您应该尝试查看是否有其他一些Power BI前端功能可以在报告中直接使用,而无需更改数据模型。也许你可以使用Power BI书签、链接或者自定义的视觉效果 如果没有,您可以在数据模型中使用另一种方法,即不依赖桥接表。免责声明:我尚未对此进行测试-可能还涉及其他性能问题 使用各个维度中的所有成员构造一个新维度表。即,创建所有EMPID、CUSTID等的联合。确保在单独的列中指明ID的类型。该表应如下所示:
DimensionId MemberId
categoryid 1
categoryid 2
categoryid 3
custid 1
custid 2
custid 3
...
让我们将此表命名为“所有维度”。该表不应与其他表有任何关系,这类似于
更改度量值,以便在“所有维度”表中选择某项时应用虚拟关系,以正确筛选事实表:
SUM('factSale'[Freight])
将成为:
SWITCH(
SELECTEDVALUE('All Dimensions'[DimensionId]),
"categoryid", CALCULATE(SUM('factSale'[Freight]),
KEEPFILTERS(TREATAS(VALUES('All Dimensions'[MemberId]), 'factSale'[CategoryId])),
"custid", CALCULATE(SUM('factSale'[Freight]),
KEEPFILTERS(TREATAS(VALUES('All Dimensions'[MemberId]), 'factSale'[CustId])),
"empid", CALCULATE(SUM('factSale'[Freight]),
KEEPFILTERS(TREATAS(VALUES('All Dimensions'[MemberId]), 'factSale'[EmpId])),
// ... etc. for all dimensions ...
, // Fallback, when nothing is selected on 'All Dimensions'
IF(NOT ISFILTERED('All Dimensions'[MemberId]),
SUM('factSale'[Freight])
)
)
将[DimensionId]列放入切片器,并将[MemberId]列用作条形图上的轴。请注意,除非在[DimensionId]切片器上过滤了一个项目,否则图表不会显示任何内容。
说明:SWITCH语句确定是否对“所有维度”表的[DimensionId]列进行了任何选择。在这种情况下,将使用TREATAS函数对事实表应用过滤器,具体取决于选择的维度。我们使用KeepFilter来确保直接在各个维度上制作的任何现有过滤器都保持原样
如果在[DimensionId]列上未进行选择,我们希望回到标准度量值“factSale”[Freight],但由于我们不想对[MemberId]列上的所有项目重复此度量值,因此我们使用IFNOT ISFILTERED。。。如果[MemberId]当前在图表轴上使用,请确保我们只返回空白值。您是否尝试过使用断开连接的切片器?