2017-05-04 2 views
1

Ich habe eine DAX-Anweisung, die immer komplexer wird, ich habe das Gefühl, dass ich sie effizient schreibe. Kann mir jemand helfen zu verstehen, wie man diese Aussage vereinfacht?Wie kann ich die folgende DAX-Anweisung vereinfachen?

EVALUATE 
ADDCOLUMNS (
    ADDCOLUMNS (
     ADDCOLUMNS (
      ADDCOLUMNS (
       ADDCOLUMNS (
        ADDCOLUMNS (
         ADDCOLUMNS (
          Query_NewSales, 
          "isKit", NOT (
           ISBLANK (
            LOOKUPVALUE (Query_Kits[KitName], Query_Kits[KitName], Query_NewSales[Item]) 
           ) 
          ) 
         ), 
         "AvgCPI", IF (
          [isKit], 
          LOOKUPVALUE (
           DAX_KitsPricedMissingRemoved[Total Price], 
           DAX_KitsPricedMissingRemoved[KitName], Query_NewSales[Item] 
          ), 
          LOOKUPVALUE (
           DAXTable_NewPurchasesGroupedByItem[AvgCPI], 
           DAXTable_NewPurchasesGroupedByItem[Item], Query_NewSales[Item] 
          ) 
         ) 
        ), 
        "isValid", NOT (ISBLANK ([AvgCPI])) 
       ), 
       "VenueFeeCalculated", IF ([isValid], [Sold Price] * [Linked.VenueFee]), 
       "TransactionFeeCalculated", IF ([isValid], [Sold Price] * [Linked.PaymentFee]) 
      ), 
      "Gross Profit", IF (
       [isValid], 
       [Sold Price] - [VenueFeeCalculated] 
        - [TransactionFeeCalculated] 
        - [Shipping Cost] 
      ) 
     ), 
     "Total Fees", [TransactionFeeCalculated] + [VenueFeeCalculated], 
     "Net Profit", IF ([isValid], [Gross Profit] - [AvgCPI]) 
    ), 
    "Fees Percent", IF ([isValid], [Linked.VenueFee] + [Linked.PaymentFee]), 
    "Shipping Percent", IF ([isValid], [Shipping Cost]/[Sold Price]), 
    "Overhead Percent", IF ([isValid], ([Sold Price] - [Gross Profit])/[Sold Price]) 
) 

Dieser Code scheint auch ineffizient, weil es eine ganze Reihe von virtuellen Tabellen erstellt, aber ohne es auf diese Weise zu tun, kann ich nicht die Spalten verweisen ich später in der Abfrage bin hinzufügen. Ich möchte keine Duplikate, Triplikate usw. haben, wenn ich die Abfrage fortsetze. Es scheint, dass es einen Weg gibt, wie ich das ohne all die Verschachtelung machen kann.

+1

Sie könnten diejenigen ADDCOLUMNS Aussagen in berechneten Spalten oder Maßnahmen, den Code zu brechen extrahieren. – David

Antwort

0

Sie können die Abfrage auf mehrere Maßnahmen brechen statt:

define measure Query_NewSales[isKit] = SUMX(Query_NewSales, IF(NOT (
    ISBLANK (
    LOOKUPVALUE(Query_Kits[KitName],Query_Kits[KitName],Query_NewSales[Item]) 
)), 1, 0)) 
measure Query_NewSales[AvgCPI] = SUMX(Query_NewSales, IF(Query_NewSales[isKit], 
    -- lookup to DAX_KitsPricedMissingRemoved 
    ,-- lookup to DAXTable_NewPurchasesGroupedByItem 
)) 
EVALUATE ADDCOLUMNS(Query_NewSales, "IsKit", Query_NewSales["IsKit"], ...)  
Verwandte Themen