合并的多列行的切片器
Slicer for Merged, Multi-Column Rows
我有两 (2) 个 table:发票和产品。它们看起来像这样:
**Invoices**
InvoiceID
SalesRep
**Products**
InvoiceID
ProductID
Cost
ProductName
Invoices.InvoiceID 列是唯一的。任何发票都可能附有 1-n 种产品。在产品 table 中,可以有任意数量的重复 InvoiceID,每个都显示该发票上出现的一个 ProductID(及其成本)。
我们的企业出售使用我们产品的许可证(不是产品本身;只是许可证)。这些许可证可以每年更新。所以在我们的数据库中,我们的产品有像 'Product A' 和 'Product A (Renewal)' 这样的名称。 '(Renewal)' 位表示该产品实际上是产品 A 的续订,而不是首次购买许可证。除此之外,它们是相同的。
我们需要按续订和非续订(我们称之为新)拆分我们的发票及其产品。在输出 table 中,我们只需要每张发票一行,无论它有多少产品。它看起来像这样:
|Invoice ID|Sales Rep|Total Cost|Renewal Products |Renewal Cost|New Products |New Cost|
|001 |F. Smith | 0|Product A (Renewal)| 0 | | |
|002 |J. Blow | 0|Product B (Renewal)| 0 |Product A | 0|
|003 |B. Bloggs| 0| | |Product C & Product D| 0|
等等。请注意,如果有多个 New 或 Renewal 产品,它们将被串联起来。我通过 DAX 实现了这一点:
New Products = CONCATENATEX (filter(Products,
Products[InvoiceID]=min(Invoices[InvoiceID]) && iserror(SEARCH("renewal",
Products[ProductName]))),
Products[ProductName],
" & " ,
Products[ProductName],
ASC)
我为 Renewal 产品做了一个类似的。成本也加在一起,因此如果有多个新产品或续订产品,它们的成本加在一起,就像上面 table 中的发票 003 一样。同样,DAX:
New Total = SUMX(FILTER(Products,
Products[Invoice ID]=min(Invoices[InvoiceID]) && iserror(SEARCH("renewal", Products[ProductName]))),
Products[Cost])
到目前为止,还不错。我让 table 看起来像我想要的那样。但是企业希望能够通过 New 或 Renewal 对输出 table 进行切片。当他们选择其中一个时,就好像其他类型的企业根本不存在一样。输出 table 中该业务类型的列将为空,总成本列将仅显示订单中所选类型的任何项目的总成本。如果任何发票只有未选择类型的产品,则该发票将从输出中完全消失。
我真的很苦恼这个切片器,所以任何建议都将不胜感激。非常感谢
编辑
Alexis,如果原来的table是这样的:
|Invoice ID|Sales Rep|Total Cost|Renewal Products |Renewal Cost|New Products |New Cost|
|001 |F. Smith | 0|Product A (Renewal)| 0 | | |
|002 |J. Blow | 0|Product B (Renewal)| 0 |Product A | 0|
|003 |B. Bloggs| 0| | |Product C & Product D| 0|
然后切片后只显示新的,它看起来像这样:
|Invoice ID|Sales Rep|Total Cost|Renewal Products |Renewal Cost|New Products |New Cost|
|002 |J. Blow | 0| | |Product A | 0|
|003 |B. Bloggs| 0| | |Product C & Product D| 0|
切片后只显示续订,它看起来像这样:
|Invoice ID|Sales Rep|Total Cost|Renewal Products |Renewal Cost|New Products |New Cost|
|001 |F. Smith | 0|Product A (Renewal)| 0 | | |
|002 |J. Blow | 0|Product B (Renewal)| 0 | | |
有帮助吗?
这实际上比您想象的要简单。您需要做的就是在 Products
table 上创建一个计算列来区分新行和续订行:
Slicer = IF(SEARCH("Renewal", Products[ProductName], 1, 0) > 0, "Renewal", "New")
然后将此列用作切片器,table 应该按照您指定的方式运行。
注意:如果您首先创建此列,则您的度量可以引用它而不是使用 SEARCH
函数。即,您可以替换
`iserror(SEARCH("renewal", Products[ProductName]))`
和
Products[Slicer] = "New"
我有两 (2) 个 table:发票和产品。它们看起来像这样:
**Invoices**
InvoiceID
SalesRep
**Products**
InvoiceID
ProductID
Cost
ProductName
Invoices.InvoiceID 列是唯一的。任何发票都可能附有 1-n 种产品。在产品 table 中,可以有任意数量的重复 InvoiceID,每个都显示该发票上出现的一个 ProductID(及其成本)。
我们的企业出售使用我们产品的许可证(不是产品本身;只是许可证)。这些许可证可以每年更新。所以在我们的数据库中,我们的产品有像 'Product A' 和 'Product A (Renewal)' 这样的名称。 '(Renewal)' 位表示该产品实际上是产品 A 的续订,而不是首次购买许可证。除此之外,它们是相同的。
我们需要按续订和非续订(我们称之为新)拆分我们的发票及其产品。在输出 table 中,我们只需要每张发票一行,无论它有多少产品。它看起来像这样:
|Invoice ID|Sales Rep|Total Cost|Renewal Products |Renewal Cost|New Products |New Cost|
|001 |F. Smith | 0|Product A (Renewal)| 0 | | |
|002 |J. Blow | 0|Product B (Renewal)| 0 |Product A | 0|
|003 |B. Bloggs| 0| | |Product C & Product D| 0|
等等。请注意,如果有多个 New 或 Renewal 产品,它们将被串联起来。我通过 DAX 实现了这一点:
New Products = CONCATENATEX (filter(Products,
Products[InvoiceID]=min(Invoices[InvoiceID]) && iserror(SEARCH("renewal",
Products[ProductName]))),
Products[ProductName],
" & " ,
Products[ProductName],
ASC)
我为 Renewal 产品做了一个类似的。成本也加在一起,因此如果有多个新产品或续订产品,它们的成本加在一起,就像上面 table 中的发票 003 一样。同样,DAX:
New Total = SUMX(FILTER(Products,
Products[Invoice ID]=min(Invoices[InvoiceID]) && iserror(SEARCH("renewal", Products[ProductName]))),
Products[Cost])
到目前为止,还不错。我让 table 看起来像我想要的那样。但是企业希望能够通过 New 或 Renewal 对输出 table 进行切片。当他们选择其中一个时,就好像其他类型的企业根本不存在一样。输出 table 中该业务类型的列将为空,总成本列将仅显示订单中所选类型的任何项目的总成本。如果任何发票只有未选择类型的产品,则该发票将从输出中完全消失。
我真的很苦恼这个切片器,所以任何建议都将不胜感激。非常感谢
编辑
Alexis,如果原来的table是这样的:
|Invoice ID|Sales Rep|Total Cost|Renewal Products |Renewal Cost|New Products |New Cost|
|001 |F. Smith | 0|Product A (Renewal)| 0 | | |
|002 |J. Blow | 0|Product B (Renewal)| 0 |Product A | 0|
|003 |B. Bloggs| 0| | |Product C & Product D| 0|
然后切片后只显示新的,它看起来像这样:
|Invoice ID|Sales Rep|Total Cost|Renewal Products |Renewal Cost|New Products |New Cost|
|002 |J. Blow | 0| | |Product A | 0|
|003 |B. Bloggs| 0| | |Product C & Product D| 0|
切片后只显示续订,它看起来像这样:
|Invoice ID|Sales Rep|Total Cost|Renewal Products |Renewal Cost|New Products |New Cost|
|001 |F. Smith | 0|Product A (Renewal)| 0 | | |
|002 |J. Blow | 0|Product B (Renewal)| 0 | | |
有帮助吗?
这实际上比您想象的要简单。您需要做的就是在 Products
table 上创建一个计算列来区分新行和续订行:
Slicer = IF(SEARCH("Renewal", Products[ProductName], 1, 0) > 0, "Renewal", "New")
然后将此列用作切片器,table 应该按照您指定的方式运行。
注意:如果您首先创建此列,则您的度量可以引用它而不是使用 SEARCH
函数。即,您可以替换
`iserror(SEARCH("renewal", Products[ProductName]))`
和
Products[Slicer] = "New"