我有两(2)张表:“发票”和“产品”。他们看起来像这样:
**Invoices**
InvoiceID
SalesRep
**Products**
InvoiceID
ProductID
Cost
ProductName
Invoices.InvoiceID列是唯一的。任何发票都可能附有1-n个产品。在“产品”表中,可以有任意数量的重复InvoiceID,每个InvoiceID显示一个出现在该Invoice上的ProductID(及其成本)。
我们的企业出售使用我们产品的许可(不是产品本身;只是许可)。这些许可证可以每年更新一次。因此,在我们的数据库中,我们的产品具有“产品A”和“产品A(续订)”的名称。 “(续订)”位表示该产品实际上是产品A的续订,而不是首次购买许可证。除此之外,它们是相同的。
我们需要按续约和非续约(我们称为“新”)划分发票及其产品。在输出表中,无论发票有多少种产品,我们只希望每一行有一行。看起来像这样:
|Invoice ID|Sales Rep|Total Cost|Renewal Products |Renewal Cost|New Products |New Cost|
|001 |F. Smith | $100|Product A (Renewal)| $100 | | |
|002 |J. Blow | $250|Product B (Renewal)| $150 |Product A | $100|
|003 |B. Bloggs| $300| | |Product C & Product D| $300|
以此类推。请注意,如果有多个新产品或续订产品,则将它们串联在一起。我是通过DAX实现的:
New Products = CONCATENATEX (filter(Products,
Products[InvoiceID]=min(Invoices[InvoiceID]) && iserror(SEARCH("renewal",
Products[ProductName]))),
Products[ProductName],
" & " ,
Products[ProductName],
ASC)
,我为续订产品做了类似的操作。成本也相加在一起,因此,如果有多个新产品或续订产品,则它们的成本相加在一起,就像上表中的发票003一样。再次,DAX:
New Total = SUMX(FILTER(Products,
Products[Invoice ID]=min(Invoices[InvoiceID]) && iserror(SEARCH("renewal", Products[ProductName]))),
Products[Cost])
到目前为止,太好了。我的桌子看着我想要的样子。但是企业希望能够通过“新建”或“续订”对输出表进行切片。当他们选择其中一个时,就好像没有其他类型的业务一样。输出表中该业务类型的列将为空,而“总成本”列将仅显示订单中所选类型的任何项目的总成本。而且,如果任何发票只有未选择类型的产品,则该发票将完全从输出中消失。
我真的很努力地使用此切片器,因此将不胜感激地收到任何建议。非常感谢
修改
Alexis,如果原始表如下所示:
|Invoice ID|Sales Rep|Total Cost|Renewal Products |Renewal Cost|New Products |New Cost|
|001 |F. Smith | $100|Product A (Renewal)| $100 | | |
|002 |J. Blow | $250|Product B (Renewal)| $150 |Product A | $100|
|003 |B. Bloggs| $300| | |Product C & Product D| $300|
然后在仅显示“ New”(切片)后显示如下:
|Invoice ID|Sales Rep|Total Cost|Renewal Products |Renewal Cost|New Products |New Cost|
|002 |J. Blow | $100| | |Product A | $100|
|003 |B. Bloggs| $300| | |Product C & Product D| $300|
切成仅显示续订后,看起来像这样:
|Invoice ID|Sales Rep|Total Cost|Renewal Products |Renewal Cost|New Products |New Cost|
|001 |F. Smith | $100|Product A (Renewal)| $100 | | |
|002 |J. Blow | $150|Product B (Renewal)| $150 | | |
有帮助吗?
答案 0 :(得分:0)
这实际上比您预期的要简单。您需要做的就是在Products
表上创建一个计算列,以区分新行和续订行:
Slicer = IF(SEARCH("Renewal", Products[ProductName], 1, 0) > 0, "Renewal", "New")
然后将此列用作切片器,该表的行为应与您指定的一样。
注意:如果您首先创建此列,则您的度量可以引用它,而不是使用SEARCH
函数。即,您可以替换
`iserror(SEARCH("renewal", Products[ProductName]))`
使用
Products[Slicer] = "New"