รู้เบื้องต้นเกี่ยวกับ DAX
ขึ้นอยู่กับหลักสูตรวิดีโอ DAX ที่แนะนำของ SQLBI
สคีมารายงาน

รายงาน

ทฤษฎี
ภาษา DAX
DAX เป็นภาษาที่ใช้งานได้การดำเนินการไหลด้วยการเรียกใช้ฟังก์ชัน
- การจัดรูปแบบรหัสมีความสำคัญใน DAX เนื่องจากทำให้การดีบักโค้ดง่ายขึ้น สำหรับการจัดรูปแบบรหัส DAX โดยอัตโนมัติเราสามารถใช้ DaxFormatter ได้โดยอัตโนมัติ
คอลัมน์ที่คำนวณได้
- คอลัมน์ที่คำนวณโดยใช้ DAX
- คำนวณเสมอสำหรับแถวปัจจุบัน
มาตรการ
- เขียนโดยใช้ dax
- อย่าทำงานทีละแถว
- ให้ใช้ตารางและผู้รวบรวม
- ไม่มีแนวคิด«แถวปัจจุบัน»
การตั้งชื่อการประชุม
- มาตรการไม่ได้อยู่ในตาราง => หลีกเลี่ยงชื่อตารางในมาตรการอ้างอิง วิธีนี้ง่ายกว่าที่จะย้ายไปยังตารางอื่นและระบุว่าเป็นมาตรการ
- ดังนั้น:
- คอลัมน์ที่คำนวณได้ -> ตาราง [คอลัมน์]
- มาตรการ -> [วัด]
มาตรการเทียบกับคอลัมน์ที่คำนวณได้
- ใช้คอลัมน์เมื่อ:
- จำเป็นต้องหั่นหรือกรองตามค่า
- ใช้การวัดเมื่อ:
- การคำนวณเปอร์เซ็นต์หรืออัตราส่วน
- ต้องการการรวมที่ซับซ้อน
- การใช้พื้นที่และ CPU:
- คอลัมน์ใช้หน่วยความจำ
- มาตรการใช้ CPU
ฟังก์ชั่นการรวม
- ทำงานเฉพาะในคอลัมน์ตัวเลข
- รวมเพียงหนึ่งคอลัมน์
ฟังก์ชั่นการรวม« x »
- ตัววนซ้ำ: มีประโยชน์ในการรวมสูตร
- วนซ้ำบนตารางและประเมินการแสดงออกสำหรับแต่ละแถว
- รับสองพารามิเตอร์เสมอ:
- ตารางเพื่อวนซ้ำ
- สูตรเพื่อประเมินสำหรับแต่ละแถว
- ตัวอย่าง:
SUMX (
Sales,
Sales[Price] * Sales[Quantity]
)
ใช้ตัวแปร
- มีประโยชน์มากในการหลีกเลี่ยงการแสดงย่อยซ้ำในรหัสของคุณ
- ตัวอย่าง:
Quantity =
VAR TotalQuantity = SUM ( Sales[Quantity] )
RETURN
IF (
TotalQuantity > 1000,
TotalQuantity * 0.95,
TotalQuantity * 1.25
)
ฟังก์ชั่นวันที่
DATE, DATEVALUE, DAY, EDATE,
EOMONTH, HOUR, MINUTE,
MONTH, NOW, SECOND, TIME,
TIMEVALUE, TODAY, WEEKDAY,
WEEKNUM, YEAR, YEARFRAC
ฟังก์ชั่นตาราง
- ฟังก์ชั่นพื้นฐานที่ทำงานบนตารางเต็มและส่งคืนตารางเป็นผล
FILTER
ALL
VALUES
DISTINCT
RELATEDTABLE
- ผลลัพธ์ของพวกเขามักจะใช้ในฟังก์ชั่นอื่น ๆ
- พวกเขาสามารถรวมเข้าด้วยกันเพื่อสร้างนิพจน์ที่ซับซ้อน
กรอง
- เพิ่มเงื่อนไขใหม่โดย จำกัด จำนวนแถวของตาราง
- ส่งคืนตารางที่สามารถวนซ้ำได้โดยฟังก์ชั่น« x »
ทั้งหมด
- ส่งคืนแถวทั้งหมดของตารางในขณะที่ไม่สนใจบริบทตัวกรอง
- ส่งคืนตารางที่สามารถวนซ้ำได้โดยฟังก์ชั่น« x »
- สามารถใช้กับคอลัมน์เดียว
ALL ( Customers[CustomerName] ) ผลลัพธ์เป็นตารางที่มีหนึ่งคอลัมน์
แตกต่าง
- ส่งคืนค่าที่แตกต่างกันของคอลัมน์เฉพาะที่มองเห็นได้ในบริบทปัจจุบัน
NumOfProducts =
COUNTROWS (
DISTINCT ( Product[ProductCode] )
)
ที่เกี่ยวข้อง
- ส่งคืนตารางที่มีแถวทั้งหมดที่เกี่ยวข้องกับปัจจุบัน
NumOfProducts = COUNTROWS ( RELATEDTABLE ( Product ) )
บริบทการประเมินผล
1. บริบทตัวกรอง
- กำหนดโดย:
- การเลือกแถว
- การเลือกคอลัมน์
- รายงานตัวกรอง
- ตัวเลือกตัวแบ่ง
- แถวนอกบริบทของตัวกรองไม่ได้รับการพิจารณาสำหรับการคำนวณ
- กำหนดโดยอัตโนมัติโดย pivottable สามารถสร้างด้วยฟังก์ชั่นเฉพาะได้เช่นกัน
2. บริบทแถว
- กำหนดโดย:
- คำจำกัดความคอลัมน์ที่คำนวณได้
- กำหนดโดยอัตโนมัติสำหรับแต่ละแถว
- ฟังก์ชั่นการวนซ้ำแถว
- SUMX, ค่าเฉลี่ย ...
- ทั้งหมด« x »ฟังก์ชั่นและตัววนซ้ำ
- กำหนดโดยสูตรผู้ใช้
- จำเป็นต้องประเมินค่าคอลัมน์เป็นแนวคิดของ "แถวปัจจุบัน"
- ตารางบริบทตัวกรองตัวกรอง บริบทแถววนรอบแถว!
คำนวณ
- แทนที่บริบทของตัวกรองบางส่วน
- เงื่อนไข
- สามารถแทนที่ทั้งหมดได้
- สามารถแทนที่คอลัมน์เดียว
- คำนวณงานในบริบทตัวกรอง
- ตัวกรองจะได้รับการประเมินในบริบทตัวกรองด้านนอกจากนั้นรวมกันเข้าด้วยกันและในที่สุดก็ใช้เพื่อสร้างบริบทตัวกรองใหม่ซึ่ง DAX ประเมินนิพจน์
- synthax:
CALCULATE (
Expression,
Filter1,
…
Filtern
)
1. ตัวกรองและผลรวมอยู่ในตารางเดียวกัน คุณสามารถรับผลลัพธ์เดียวกันโดยใช้ตัวกรอง
NumOfBigSales =
CALCULATE (
SUM ( Sales[SalesAmount] ),
Sales[SalesAmount] > 100
)
2. กรองตัวกรองในคอลัมน์เดียวเท่านั้น ทั้งหมดใช้กับตารางคอลัมน์เดียว
CALCULATE (
SUMX (
Orders,
Orders[Amount]
),
ALL ( Orders[Channel] )
)
ตัวกรองและความสัมพันธ์
-ความสัมพันธ์ส่งผลกระทบต่อบริบทของตัวกรอง
ที่เกี่ยวข้อง
RELATED ( table[column] )
- เปิดบริบทแถวใหม่บนตารางเป้าหมาย
- การติดตามความสัมพันธ์
- เปิดใช้งานการกรองด้านหนึ่งไปอีกด้านหนึ่ง
ที่เกี่ยวข้อง
RELATEDTABLE ( table )
- กรองตารางพารามิเตอร์
- ส่งคืนแถวที่เกี่ยวข้องกับแถวปัจจุบันเท่านั้น
- มันเป็นเพื่อนที่เกี่ยวข้อง
การเปลี่ยนบริบท
- คำนวณดำเนินการอื่น:
- หากดำเนินการภายในบริบทแถว
- ต้องใช้บริบทแถว
- แปลงเป็นบริบทตัวกรองที่เทียบเท่า
- นำไปใช้กับโมเดลข้อมูลก่อนที่จะคำนวณนิพจน์
- ตัวอย่าง:
SUM() vs CALCULATE(SUM())
Time Intelligence
- Time Intelligence ต้องการตารางวันที่
- คุณสมบัติตารางวันที่:
- ควรมีวันที่ทั้งหมด
- จาก 1 °ของเดือนมกราคมถึง 31 °ของเดือนธันวาคม
- ไม่มีหลุม
- มิฉะนั้นสติปัญญาเวลาจะไม่ทำงาน
- Time Intelligence ครอบคลุม:
- ปีจนถึงปัจจุบัน
- ไตรมาสจนถึงปัจจุบัน
- ใช้งานทั้งหมด
- ช่วงเวลาเดียวกันของปีก่อน
- การคำนวณวันทำงาน
- ปีงบประมาณ
- เป็นต้น
- การรวม:
- YTD: ปีจนถึงปัจจุบัน
- QTD: ไตรมาสจนถึงปัจจุบัน
- MTD: เดือนจนถึงปัจจุบัน
ปฏิทิน
- ส่งคืนตารางที่มีคอลัมน์เดียวชื่อ "วันที่" ซึ่งมีชุดวันที่ต่อเนื่องกันในช่วงที่กำหนดรวม
CALENDAR (
DATE ( YEAR ( MIN ( Sales[Order Date] ) ), 1, 1 ),
DATE ( YEAR ( MIN ( Sales[Order Date] ) ), 12, 31 )
)
ปฏิทิน
- สร้างตารางปฏิทินโดยอัตโนมัติตามเนื้อหาฐานข้อมูล คุณสามารถระบุเดือนที่แล้ว (มีประโยชน์สำหรับปีบัญชี)
- ปฏิทินใช้วันที่ทั้งหมดในโมเดลไม่รวมคอลัมน์และตารางที่คำนวณได้เท่านั้น
ปีจนถึงปัจจุบัน
DATESYTD และ TOTALYTD
SalesAmountYTD =
CALCULATE (
SUM ( Sales[SalesAmount] ),
DATESYTD ( 'Date'[Date] )
)
SalesAmountYTD :=
TOTALYTD (
SUM ( Sales[SalesAmount] ),
'Date'[Date],
"06-30"
)
ช่วงเวลาเดียวกันของปีที่แล้ว
Sales_SPLY =
CALCULATE (
SUM ( Sales[SalesAmount] ),
SAMEPERIODLASTYEAR ( 'Date'[Date] )
)
ใช้งานทั้งหมด
- การเรียกใช้ทั้งหมดต้องใช้ตัวกรองที่ชัดเจน
SalesAmountRT =
CALCULATE (
SUM ( Sales[SalesAmount] ),
FILTER ( ALL ( 'Date' ), 'Date'[Date] <= MAX ( 'Date'[Date] ) )
)