รู้ยัง! Excel เขียนสูตรได้ 5 ภาษา

ลองมาเดากันไหมครับว่า Excel เขียนสูตรได้กี่ภาษา?

ติ๊กต็อก ติ๊กต็อก ..

แวบแรกน่าจะนึกถึง 2 ภาษาคือ Excel Function กับ VBA
แต่แท้จริงแล้วมี 5 นั่นคือ

  1. Excel Function
  2. VBA
  3. M Code
  4. DAX
  5. MDX

แต่ละภาษาเป็นยังไง มาดูกันเลย

1. Excel Function

คือฟังก์ชันใน Excel ที่เราคุ้นเคย เช่น SUM, IF, VLOOKUP

ฟังก์ชันใน Excel มีประมาณ 500 และยังคงเพิ่มขึ้นเรื่อย ๆ

ถ้าแบ่งเป็นหมวดหมู่ (Category) มีทั้งหมด 13 กลุ่ม ได้แก่

  1. Financial
  2. Date & Time
  3. Math & Trig
  4. Statistical
  5. Lookup & Reference
  6. Database
  7. Text
  8. Logical
  9. Information
  10. Engineering
  11. Cube
  12. Compatibility
  13. Web

หืมม์.. ผมรู้ได้ไงว่ามี 13 กลุ่มน่ะหรือ?

คลิกไอคอน fx ตรง formula bar เรียกดูกลุ่มฟังก์ชันทั้งหมดได้เลย

ในทางปฏิบัติเราไม่จำเป็นต้องรู้ทุกฟังก์ชัน (ผมแทบไม่เคยใช้งานฟังก์ชันกลุ่ม Engineering หรือ Cube เลย) แต่ควรรู้ให้กว้าง และรู้หลาย ๆ กลุ่ม

คงยากที่จะบอกว่าควรรู้ฟังก์ชันอะไรบ้างเพราะการใช้งานของแต่ละคนไม่เหมือนกัน แต่โดยส่วนตัวคิดว่าควรรู้ไม่น้อยกว่า 50 ฟังก์ชัน

ทำไม?

เพราะถ้ารู้น้อยไปจะไม่คล่อง บางครั้งเขียนสูตรซ้อนกันเป็นยวง แท้จริงแล้วยวงนั้นอาจจบแค่ฟังก์ชันเดียว

หืมม์.. 50 ฟังก์ชัน ดูเยอะไปหรือ?

ไม่เยอะหรอก ตอนนี้คุณน่าจะรู้จักไม่น้อยกว่า 20 แล้ว

ไม่เชื่อ? มาลองนับกัน

  1. SUM
  2. COUNT
  3. MAX
  4. MIN
  5. AVERAGE
  6. IF
  7. OR
  8. AND
  9. IFERROR
  10. LEFT
  11. RIGHT
  12. MID
  13. VLOOKUP
  14. SUMIF
  15. SUMIFS
  16. COUNTIF
  17. COUNTIFS
  18. ROUND
  19. ROUNDUP
  20. ROUNDDOWN

คิดแบบเร็ว ๆ ยังได้ 20 ถ้าคิดต่ออีกหน่อยเผลอ ๆ เกิน 50 ใช่ไหมครับ ^__^

สำหรับใครที่ใช้ Microsoft 365 (Office 365, Excel 365) ตอนนี้ไมโครซอฟท์ปรับการเขียนสูตรครั้งใหญ่ที่เรียกว่า Dynamic Array Formula
สามารถใช้ฟังก์ชันกับช่วงข้อมูล (Range) โดยไม่ต้องกด Ctrl+Shift+Enter
ถ้าได้ผลลัพธ์มากกว่าหนึ่งค่าก็ SPILL ข้อมูลอัตโนมัติ

แถมมีฟังก์ชันใหม่ที่เจ๋งมาก ๆ อีก 8 ตัว นั่นคือ

  1. FILTER
  2. RANDARRAY
  3. SEQUENCE
  4. SORT
  5. SORTBY
  6. UNIQUE
  7. XLOOKUP
  8. XMATCH

ถ้าใครยังไม่เคยใช้ แนะนำให้ลอง โดยเฉพาะ FILTER กับ XLOOKUP มันเจ๋งมาก ๆ

2. VBA

เดิมที VBA (Visual Basic for Applications) คือปลายทางสำหรับคนรัก Excel

ทุกคนอยากใช้ VBA กันทั้งนั้น เพราะเขียนโค้ดเสร็จก็เหลือแค่ 2 อย่าง

1 คลิก
2 กระดิกเท้า!

แค่นั้นจริง ๆ
จากงานที่ใช้เคยเวลาทั้งวันอาจจบแค่การคลิกเพียงครั้งเดียว

สำหรับคนที่ยังไม่เคยใช้ VBA อาจเริ่มจาก Record Macro

แต่ถ้าต้องการเขียนคำสั่งแบบวนลูป หรือมีเงื่อนไขซับซ้อน คงต้องเขียนโค้ดเอง

ซึ่ง Excel ก็มีเครื่องมือที่ดีมากสำหรับการช่วยเขียนโค้ดนั่นคือ VBE (Visual Basic Editor)

เรียกใช้งาน VBE โดยกด Alt+F11 แล้วเขียนโค้ดได้เลย

แต่ตอนนี้ VBA อาจไม่ใช่ปลายทางสำหรับ Excel และกำลังโดนท้าทายอย่างหนัก …

ทำไม?

เหตุผลมี 3 ข้อ

  1. ต้องเซฟไฟล์เป็น .xlsm ซึ่งบางองค์กรไม่สนับสนุนให้ใช้นามสกุลนี้ด้วยเหตุผลด้านความปลอดภัย (อาจเลี่ยงเป็นนามสกุล .xlsb ได้ แต่คงต้องคุยกับหน่วยงานไอทีให้เข้าใจ)
  2. รูปแบบการทำงานบางอย่างที่เคยใช้ VBA สามารถทำได้ง่ายกว่าโดยใช้ Power Query (การรวมไฟล์ทุกไฟล์เข้าด้วยกัน การรวมทุก Sheet เข้าด้วยกันสามารถทำได้ง่ายมากโดยใช้ Power Query)
  3. ไม่รองรับการทำงานผ่านอินเทอร์เน็ต

โดยเฉพาะข้อ 3 สำคัญมาก

ทิศทางที่คุณ Satya Nadella CEO ของไมโครซอฟท์มุ่งเน้นคือ Cloud First แต่ VBA นั้นเหมาะกับการทำงานแบบ Offline การสนับสนุนหรือปรับปรุง VBA จึงแทบไม่มี

อีกทั้ง VBA ไม่ใช่ภาษายอดนิยมของโปรแกรมเมอร์ จึงมีคนใช้งานน้อยลงเรื่อย ๆ

มีเสียงเรียกร้องให้เพิ่มภาษา JavaScript, Python ใน Excel เพราะทำงานกับอินเทอร์เน็ตได้ดีกว่า ซึ่งไมโครซอฟท์ดูเหมือนจะเห็นด้วย

อีกไม่นานเราอาจจะเห็น JavaScript หรือ Python ใน Excel ก็เป็นได้

โดยส่วนตัวแล้วผมยังใช้ VBA ในบางงานนะ เวลาปรินต์ใบเสร็จรับเงิน 40 ใบ 40 บริษัท ถ้าไม่ใช้ VBA ไม่รู้จะทำยังไงจริง ๆ ^__^

3. M Code

M Code (M Language) คือภาษาที่ใช้ใน Power Query

(Power Query คืออะไร อ่านรายละเอียดได้จาก บทความนี้)

ความเจ๋งของ Power Query คือง่าย ไม่ต้องเขียนโค้ด เพราะคอนเส็ปต์คือ Codeless

Power Query มีความคล้าย VBA
ตอนแรกที่ใช้งานผมนึกถึง Record Marco เพราะหลักการคล้ายกันมาก

แค่คลิก ๆ ให้โปรแกรมจดจำรูปแบบ ถ้าต้องการอัพเดต คลิกขวาแล้ว Refresh จบ!

M Code อยู่ตรงไหน?

โดยปกติแล้วเรามองไม่เห็น M Code (เพราะไมโครซอฟท์อยากให้เป็น Codeless) ถ้าอยากเห็นให้เปิด Power Query คลิกที่ View/ Formula Bar

ก็จะเห็น M Code ของสเต็ปนั้น ๆ

แต่ถ้าต้องการเห็น M Code ของทุกสเต็ป ให้คลิก View/ Advanced Editor

ก็จะเห็นโค้ดทั้งหมด
โค้ดจะยาวหรือสั้นขึ้นกับว่ามีกี่สเต็ป

M Code มีฟังก์ชันให้ใช้เยอะมาก ตอนนี้น่าจะประมาณ 1,000 และยังคงเพิ่มขึ้นเรื่อย ๆ

ทำไมเยอะจัง?

เพราะฟังก์ชันใน M Code จำเพาะกับประเภทของข้อมูล (Data Type) ถ้าต้องการผลลัพธ์แบบนี้แต่ Data Type ต่างกัน ฟังก์ชันที่ใช้ก็ต่างกัน

เช่น ต้องการเปลี่ยนประเภทข้อมูลให้เป็นตัวหนังสือ (Text) และกำหนดรูปแบบของตัวหนังสือนั้นได้ (เช่น “00000”)

ถ้าเป็น Excel Function ใช้ฟังก์ชันเดียวคือ TEXT

แต่ถ้าเป็น M Code ใช้ (อย่างน้อย) 6 ฟังก์ชันคือ

  1. Number.ToText: เปลี่ยนจาก Number เป็น Text
  2. Date.ToText: เปลี่ยนจาก วันที่ เป็น Text
  3. DateTime.ToText: เปลี่ยนจาก วันที่และเวลา เป็น Text
  4. DateTimeZone.ToText: เปลี่ยนจาก วันที่และเวลาของไทม์โซน เป็น Text
  5. Duration.ToText: เปลี่ยนจาก ช่วงเวลา เป็น Text
  6. Logical.ToText: เปลี่ยนจาก ตรรกะ (TRUE, FALSE) เป็น Text

ข้อมูลที่เป็นช่วง หลัก ๆ มี 2 แบบคือ List กับ Table

ฟังก์ชันที่ใช้กับ List หรือ Table ก็ไม่เหมือนกัน

ถ้าเป็น List ต้องใช้ฟังก์ชันที่ออกแบบมาเพื่อใช้กับ List เท่านั้น เช่น

  1. List.Combine
  2. List.Contains
  3. List.Max
  4. List.Min
  5. List.Sort

แต่ถ้าเป็น Table ต้องใช้ฟังก์ชันที่ออกแบบมาเพื่อใช้กับ Table เท่านั้น เช่น

  1. Table.Combine
  2. Table.Contains
  3. Table.Max
  4. Table.Min
  5. Table.Sort

M Code จึงมีความจุกจิกและจำเพาะมาก ๆ รวมถึงเป็น Case-Sensitive
นั่นคือโปรแกรมมองว่าตัวพิมพ์ใหญ่กับตัวพิมพ์เล็กไม่เหมือนกัน

เช่น ถ้าเขียน List.Sort แบบนี้โอเค
แต่ถ้าเขียน list.sort แบบนี้ไม่โอเค เพราะ L ต้องเป็นตัวใหญ่ และ S หน้าคำว่า Sort ก็ต้องเป็นตัวใหญ่เช่นกัน

ดูยุ่งยากจัง เราไม่ต้องรู้ M Code ได้ไหม?

คำตอบคือ ไม่ได้

ทำไม?

แม้ Power Query จะถูกออกแบบให้เป็น Codeless หรือไม่ต้องเขียนโค้ด แต่ในการทำงานจริงจะมีเงื่อนไขและเปลี่ยนแปลงอยู่เสมอ

เช่น เปลี่ยนชื่อไฟล์ เปลี่ยนที่อยู่ไฟล์ เปลื่ยนชื่อคอลัมน์ มีคอลัมน์ใหม่ พวกนี้เป็นปัญหาที่ใช้ไปสักพักแล้วจะเจอแน่นอน

ถ้าไม่รู้ M Code ก็จะเจ๊งแน่นอนเช่นกัน

ทางแก้คือต้องรู้ M Code และมีเพียงทางเดียว

อ้อ! M Code ใช้ได้ทั้งใน Excel และ Power BI แปลว่ายิงปืนนัดเดียวได้นกสองตัว ^__^

4. DAX

DAX ย่อมาจากคำว่า Data Analysis Expression (แนะนำว่าไม่ต้องแปล ยิ่งแปลยิ่งงง ^^)

เอาง่าย ๆ ว่า DAX คือภาษาที่ใช้ใน Power Pivot นอกจากนี้ยังใช้ใน Power BI และ SSAS (SQL Server Analysis Service)

แปลว่า ถ้าใช้ DAX เป็น ก็ใช้ได้ 3 โปรแกรม
นี่มันยิงปืนนัดเดียว ได้นกสามตัวชัด ๆ!

(Power Pivot ต่างจาก Pivot Table ยังไง อ่านรายละเอียดได้จาก บทความนี้)

การใช้งาน DAX ใน Power Pivot มักใช้ผ่าน Measure

Measure นั้นคล้ายกับ Calculated Field ของ Pivot Table แต่ที่เจ๋งกว่าคือเขียนสูตรโดยใส่เงื่อนไขยังไงก็ได้ แถมปรับฟอร์แมตได้ตามต้องการ

ความดีงามของ DAX คือเป็นภาษาที่ทรงพลัง (Powerful) และคำนวณเร็ว

การทำรีพอร์ตบางอย่าง ถ้าใช้ Excel Function อาจต้องสร้าง ‘ตารางทด’ เพื่อคำนวณสองสามสเต็ปแล้วค่อยจับมารวมกัน
แต่ DAX สามารถทำให้ทุกอย่างจบในสูตรเดียว

เช่น ต้องการสร้างรีพอร์ตแสดงว่าในแต่ละเดือน ลูกค้า 2 เจ้าแรกที่ซื้อสินค้ามากที่สุดคือใคร และซื้อกี่บาท (TopN Customer Name & Sales)
รีพอร์ตที่ว่า หน้าตาแบบนี้

ถ้าสร้างด้วย Excel Function ต้องสร้าง ‘ตารางทด’ มาช่วย 2-3 สเต็ป แล้วค่อยจับรวมกัน แถมต้องทำแมนวลบางขั้นตอน

แต่ถ้าใช้ DAX ไม่ต้องมีตารางทดและไม่มีขั้นตอนที่แมนวลเลย ทุกอย่างเป็นออโต้ทั้งหมด

หรือถ้าต้องการสร้างรีพอร์ตแสดงว่าในแต่ละเดือนมีลูกค้าที่ Active อยู่กี่ราย
คำว่า Active คือ มียอดซื้ออย่างน้อยหนึ่งครั้งใน 6 เดือนล่าสุด
รีพอร์ตที่ว่า หน้าตาแบบนี้

ก็สร้างได้โดยใช้ DAX ไม่ต้องมีตารางทดใด ๆ และทุกอย่างจบในสูตรเดียว

DAX มีฟังก์ชันให้ใช้ไม่น้อยกว่า 200 และยังคงมีเพิ่มขึ้นเรื่อย ๆ

DAX มีความคล้าย Excel Function ดูเผิน ๆ แทบจะเหมือนกันเลย ลักษณะการใช้งานก็คล้ายกัน

บางฟังก์ชันก็ซ้ำกัน เช่น SUM, IF, MAX, VALUE

แต่บางฟังก์ชันก็ไม่ซ้ำ เช่น SUMX, VALUES, CALCULATE, USERELATIONSHIP, SAMEPERIODLASTYEAR

DAX เป็นภาษาที่ทางเทคนิคเรียกว่า Functional Language หรือภาษาที่มีลักษณะการเขียนแบบฟังก์ชัน (เหมือน Excel Function นั่นแหละ)

ด้วยความที่เป็น Functional Language จึงต้องเขียนซ้อนกัน ถ้าเงื่อนไขซ้อนกันหลายชั้นจะอ่านยากมาก
(ต่างจาก VBA, M Code ที่สามารถแบ่งเป็นสเต็ปย่อยเพื่อลดความซับซ้อน)

เช่น สูตรหาชื่อลูกค้าและยอดขายที่เป็น Top N ถ้าไม่จัดฟอร์แมตจะเป็นแบบนี้

TopNCustName&Sales=IF([Sales]>0,CONCATENATEX(TOPN([TopNSelected],Customers,[Sales],DESC),
Customers[CustomerName]&FORMAT([Sales]," #,##0,k")," | ",[Sales],DESC))

แค่เห็นก็ไม่อยากแกะสูตรแล้วใช่ไหมครับ T_T

แต่ถ้าจัดฟอร์แมตจะอ่านง่ายขึ้น แบบนี้

TopNCustName&Sales =
IF([Sales]>0,
    CONCATENATEX(
       TOPN(
          [TopNSelected],
          Customers,
          [Sales],
          DESC
        ),
        Customers[CustomerName]&
           FORMAT([Sales]," #,##0,k"),
        " | ",
        [Sales],
        DESC
    )
)

ถ้าถามว่าใน 4 ภาษา อะไรยากสุด?

ในมุมมองของผมคือ DAX

ทำไม?

เพราะ DAX เป็นภาษาที่ต้องดูบริบท

บริบทที่ว่าคือ หน้าตาของ Data Model และหน้าตาของรีพอร์ตที่ต้องการ

อะไรคือ Data Model?

Data Model คือ ความสัมพันธ์ของตาราง หน้าตาประมาณนี้

นี่มันฐานข้อมูลไม่ใช่เหรอ?

ใช่แล้ว Data Model ก็คือความสัมพันธ์ของตารางในฐานข้อมูล และ DAX ก็คือภาษาที่ใช้สรุปข้อมูลจากฐานข้อมูล

แล้วทำไมต้องดูหน้าตาของรีพอร์ตที่ต้องการ?

เพื่อดูว่ารีพอร์ตนี้มีอะไรเป็นเงื่อนไข และมีอะไรเป็น filter context บ้าง

นั่นคือ ถ้า Data Model ของเราไม่เหมือนคนอื่น ก็ใช้ DAX สูตรเดียวกันไม่ได้ (แปลว่าไม่สามารถนำสูตร DAX ของคนอื่นมาใช้ได้ตรง ๆ)
หรือ ถ้ารีพอร์ตที่ต้องการมีหน้าตาเปลี่ยนแปลงไป ก็ใช้ DAX สูตรเดิมที่เคยเขียนไว้ไม่ได้ ต้องเขียนสูตรใหม่

DAX จึงมีความซับซ้อนมาก แม้เป็น functional language คล้ายกับ Excel Function แต่มุมมองการใช้งานคล้าย SQL มากกว่า

อ้อ! ถ้าใครจะใช้ Power Pivot หรือใช้ DAX แนะนำให้ใช้ Excel 2019 หรือ Microsoft 365 เท่านั้น ถ้าเป็นเวอร์ชันอื่น (Excel 2010, 2013, 2016) ไม่แนะนำเลย เพราะมีบั๊กและปัญหาจุกจิกเยอะ

5. MDX

MDX ย่อมาจากคำว่า Multidimentional Expression (แนะนำว่าไม่ต้องแปลเช่นกัน) เป็นภาษาที่ใช้ในโปรแกรม SSAS (SQL Server Analysis Service) ทั้งแบบ Multidimentional และ Tabular

แต่ MDX ก็สามารถใช้ใน Excel ได้เช่นกัน โดยใช้ผ่าน Power Pivot ส่วนใหญ่มักใช้สร้าง Sets

Sets คืออะไร?

Sets คือสิ่งที่อยู่ใน PivotTable Analyze/ Fields Items & Sets

ไม่ว่าจะเป็น Sets ที่ Based on Row Items

หรือ Based on Column Items

ลักษณะการใช้งานของ Sets คล้าย Calculated Item ของ Pivot Table แต่เจ๋งกว่าตรงที่ใส่สูตรได้

ภาษาที่ใช้เขียนสูตรใน Sets ก็คือ MDX นั่นเอง

อ้อ! Calculated Item ไม่เหมือน Calculated Field นะครับ

ถ้าใครใช้ Pivot Table บ่อย ๆ น่าจะเคยเห็นเมนูคำสั่ง Calculated Item ด้านล่างของ Calculated Field

Calculated Item หน้าตาประมาณนี้

สำหรับผู้ใช้งาน Excel (เช่นผม) อาจไม่ค่อยคุ้นกับไวยากรณ์หรือ Syntax ของ MDX เพราะการอ้างอิงต่างจาก Excel หรือ DAX ค่อนข้างมาก

เช่น ถ้าต้องการอ้างอิงปี 2020 จากคอลัมน์ Year ในตาราง Date ต้องเขียนเป็น
[Date].[Year].&[2020]

การใช้ภาษา MDX ใน Excel ในทางปฏิบัตินั้นมีน้อยมาก ถ้าต้องใช้มักเลี่ยงไปใช้ DAX แทน เพราะให้ผลลัพธ์ได้เหมือนกัน

แต่กูรูบางท่าน เช่น Chris Webb (คนนี้เก่งมาก ๆ) ให้ความเห็นว่าการใช้ MDX ใน Excel ยังเป็นสิ่งจำเป็น

โดยส่วนตัวผมยังชอบใช้ DAX มากกว่า เพราะใช้ MDX ไม่เป็น ^^

แล้วเราควรรู้กี่ภาษา?

ในมุมมองของผม เราควรรู้อย่างน้อย 1 ภาษา โดยมี Excel Function เป็นตัวยืนพื้น

แปลว่า อาจเป็น
Excel Function + VBA
Excel Function + M Code
Excel Function + M Code + DAX
Excel Function + VBA + M Code + DAX

ทำไมต้องมี Excel Function เป็นตัวยืนพื้น?

เพราะ Excel Function คือพื้นฐาน มีความคล่องตัว มีความเสถียร ใช้กับข้อมูลแบบใดก็ได้ แสดงผลได้ทันที ไม่ต้องรีเฟรช และไม่ต้องใช้กับฟีเจอร์อื่น

VBA ต้องเซฟไฟล์เป็น .xlsm, .xlsb เท่านั้น
M Code ต้องใช้กับ Power Query เท่านั้น ถ้าเกิดการเปลี่ยนแปลงก็ต้องรีเฟรช
DAX, MDX ต้องใช้กับ Power Pivot เท่านั้น ถ้าเกิดการเปลี่ยนแปลงก็ต้องรีเฟรชเช่นกัน

Excel Function จึงมีความคล่องตัวมากที่สุด

แต่.. รู้แค่ Excel Function อย่างเดียวไม่พอ เพราะไม่ตอบโจทย์ในบางงาน และคำนวณค่อนข้างช้าเมื่อเทียบกับภาษาอื่น

ถ้าต้องการรวมไฟล์ 100 ไฟล์จากโฟลเดอร์ หรือรวมข้อมูล 20 Sheet เข้าด้วยกัน แบบนี้ M Code เก่งมาก

ถ้าต้องทำอะไรซ้ำ ๆ เช่น ปรินต์ใบเสร็จ 100 ใบให้กับลูกค้า 100 คน แบบนี้ VBA เก่งมาก

ถ้าเจอรีพอร์ตยาก ๆ ต้องดึงข้อมูลมาประมวลผลจากหลาย ๆ ตาราง แบบนี้ต้องพึ่งพา DAX

ทุกภาษาต่างมีจุดเด่นของตัวเอง อยู่ที่การนำไปใช้

ถ้าใครใช้ได้ 1 ภาษา ถือว่า ดี
ถ้าใครใช้ได้ 2 ภาษา ถือว่า เยี่ยม
ถ้าใครใช้ได้ 3 ภาษา ถือว่า เจ๋ง
ถ้าใครใช้ได้ 4 ภาษา ถือว่า สุดยอด
ถ้าใครใช้ได้ 5 ภาษา ถือว่า ไม่ใช่คนแล้ว ^^

ถ้าคุณชอบบทความแนวนี้ สามารถอัพเดตบทความใหม่โดยคลิก Like เฟซบุ๊กเพจวิศวกรรีพอร์ต
อย่าลืมแชร์ให้เพื่อนอ่านเพื่อเป็นกำลังใจให้คนเขียนด้วยนะครับ ^__^

Reference:
https://exceljet.net/dynamic-array-formulas-in-excel
https://www.facebook.com/santipong.nasui/posts/3714998025181028
https://docs.microsoft.com/en-us/dax/dax-function-reference#:~:text=In%20this%20article&text=This%20function%20reference%20provides%20detailed,Analysis%20Expression%20(DAX)%20formulas.
https://blog.crossjoin.co.uk/2012/10/07/introduction-to-mdx-for-powerpivot-users-part-1/
https://blog.crossjoin.co.uk/2012/10/11/introduction-to-mdx-for-powerpivot-users-part-2-basic-sets/
https://blog.crossjoin.co.uk/2012/10/21/introduction-to-mdx-for-powerpivot-users-part-3-the-members-and-crossjoin-functions/
https://blog.crossjoin.co.uk/2012/11/05/introduction-to-mdx-for-powerpivot-users-part-4-filtering/
https://blog.crossjoin.co.uk/2012/12/18/introduction-to-mdx-for-powerpivot-users-part-5-mdx-queries/
https://support.microsoft.com/en-us/office/analysis-services-mdx-query-designer-power-pivot-30ab91f9-82a6-4f95-a5ec-2b6b7ab5cbcf?ui=en-us&rs=en-us&ad=us

วิศวกรรีพอร์ต

คนธรรมดาผู้มีประสบการณ์ทำงานหลากหลายตำแหน่ง คลุกคลีกับการทำรีพอร์ตมาโดยตลอด สุดท้ายค้นพบแนวทางของตัวเอง จึงอยากแบ่งปันเคล็ดลับและประสบการณ์ให้กับผู้สนใจ

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.