💡 Tips

Tips, Tricks & Best Practices

Tổng hợp các mẹo, thủ thuật và best practices từ thực tế — giúp bạn làm việc nhanh hơn và tạo report chuyên nghiệp hơn.

Performance Optimization
Report chạy chậm — đây là nguyên nhân và cách fix
Vấn đềNguyên nhânGiải pháp
Report load chậm Quá nhiều visuals, measures phức tạp, dữ liệu lớn không filter Fix Dùng Aggregations, tắt Auto date/time, reduce visual count
Slicer chậm khi chọn High cardinality column (CustomerID, OrderID) Fix Dùng Dropdown slicer, search slicer, hoặc dùng filter thay slicer
DAX measure chậm FILTER iterator trên table lớn, không dùng VAR Fix Dùng CALCULATE + column filter thay FILTER, dùng VAR để cache
Import chậm / file lớn Load toàn bộ data, không filter ở source Fix Filter ở Power Query trước khi load. Dùng DirectQuery cho data warehouse
Calculated Column nặng Dùng calculated column thay measure Fix Chuyển sang Measure khi có thể. Calculated Column tốn RAM, Measure chỉ tính khi cần
Performance Analyzer: View → Performance Analyzer → Start Recording → Refresh visuals → xem DAX query time. Measure nào > 1000ms cần tối ưu.
🧮
DAX Best Practices
01
Measure không có home table
Tạo một bảng rỗng tên "Measures" (Enter Data → 1 dòng trống) và để tất cả measures ở đó. Dễ tìm, gọn Diagram view.
02
Đặt tên measure rõ ràng
Prefix theo loại: [$ Revenue MTD], [# Orders], [% Margin], [Δ YoY Growth]. Sort theo nhóm trong measures table.
03
DIVIDE thay vì /
Luôn dùng DIVIDE(a, b, 0) thay a / b. Arg thứ 3 là giá trị khi b=0 — tránh error và BLANK không mong muốn.
04
Tránh FILTER khi có thể
Chậm CALCULATE(SUM(Sales[Rev]), FILTER(Sales, Sales[Cat]="A"))
Nhanh CALCULATE(SUM(Sales[Rev]), Sales[Cat]="A")
05
Format Measures
Luôn set Format cho measure: Currency (#,##0 ₫), Percentage (0.00%), Number (#,##0). Tránh để mặc định — số hiện ra như 12345678.456789.
06
Tắt Auto Date/Time
File → Options → Data Load → tắt Auto date/time. Feature này tự tạo hidden date table cho mọi date column — tốn RAM và làm chậm model.
🔍
Drill-through
Click vào chart → xem detail ở page khác
Cách setup Drill-through
  • Tạo page detail (ví dụ: "Product Detail")
  • Kéo field vào Drill-through well (ví dụ: ProductID)
  • Power BI tự tạo nút Back
  • Ở page khác: Right-click bar → Drill through → Product Detail
Cross-report Drill-through
Cho phép drill từ report A sang report B. Cả 2 phải publish lên cùng workspace. Bật: File → Options → Current file → Report Settings → Allow visuals to use drill-through targets from other reports.
⌨️
Keyboard Shortcuts
Làm việc nhanh gấp 2x với shortcuts
ActionWindowsMac
Undo / RedoCtrl+Z / Ctrl+Y⌘Z / ⌘Y
Select All visualsCtrl+A⌘A
Multi-select visualsCtrl+Click⌘Click
Copy / Paste visualCtrl+C / Ctrl+V⌘C / ⌘V
Duplicate pageRight-click tab → DuplicateSame
Format PaneF4F4
New measure (in Data pane)Alt+NOption+N
Toggle Selection PaneView → Selection PaneSame
Performance AnalyzerView → Performance AnalyzerSame
Snap to gridView → Snap to gridSame
Lock objectsView → Lock objectsSame
DAX formatter (online)daxformatter.com — paste measure → format đẹp
Formatting Tricks
Những chi tiết nhỏ tạo ra sự khác biệt lớn
💅
Format Numbers đẹp
Dùng format string: #,##0.0 "tỷ" hoặc #,##0 "K". Hoặc dùng DAX: FORMAT([Revenue]/1e9,"#,##0.0") & " tỷ"
🎯
Highlight bar theo điều kiện
Trong Bar Chart: Format → Data colors → Advanced controls → Rule-based hoặc Field value. Measure trả về màu hex: IF([Rev]=[MaxRev],"#F0B90B","#2F6FD4")
📋
Title động theo Slicer
Tạo measure: Page Title = "Revenue — " & SELECTEDVALUE(Date[Year], "All Years"). Visual title → fx → Field value → chọn measure này.
🖼️
Background Image
Format → Canvas background → Browse image. Dùng PowerPoint/Figma thiết kế background (dark theme, logo, sections) → export PNG → import vào Power BI.
🔲
Border & Shadow
Format → General → Effects → Shadow + Border để visual nổi lên. Card shadow: offset Y=4, blur=8, color=#00000040. Nhất quán với tất cả visuals.
🔤
No Title trên cards
Card value tự nói lên nó. Dùng Subtitle (nhỏ hơn) thay Title. Tắt Title chính → thêm Text box làm custom label với font size/color tự chọn.
🔐
Row-Level Security (RLS)
Mỗi người dùng chỉ thấy data của họ
Use case: Sales manager chỉ thấy data region của họ. CEO thấy tất cả. Cùng 1 report, khác data dựa trên user đăng nhập.
// Bước 1: Modeling → Manage roles → Create role
// Đặt tên: "Vietnam Sales"
// DAX filter trên DimRegion table:
[Region] = "Vietnam"

// Hoặc dynamic RLS dựa theo user email:
[Email] = USERPRINCIPALNAME()

// Bước 2: Assign users vào roles trong Power BI Service
// Dataset → ... → Security → thêm email vào role
Dynamic RLS: Tạo bảng UserMapping (Email, Region) → filter bằng [Email] = USERPRINCIPALNAME(). Khi thêm user mới chỉ cần update bảng UserMapping, không phải tạo role mới.
🚀
Publish & Share
Từ Desktop đến Service đến người dùng
1
Publish lên Power BI Service
Home → Publish → chọn workspace. Report và Dataset được publish cùng lúc. Dataset có thể dùng lại cho nhiều reports khác.
2
Schedule Refresh
Service → Dataset → Settings → Scheduled refresh. Cần Gateway nếu data source là on-premise (SQL Server, Excel on local).
3
Share Report
Service → Share button → nhập email. Hoặc Publish to Web (public URL, không cần login — cẩn thận với data nhạy cảm). App Workspace = tốt nhất cho nhóm.
4
Embed vào SharePoint/Teams
SharePoint: Add Power BI web part → paste report URL. Teams: Add tab → Power BI → chọn report. Người trong org xem được nếu có license.