DAX-এর নাম শুনেছেন? হয়তো পাওয়ার BI বা এক্সেলের সাথে কাজ করতে গিয়ে শব্দটা আপনার কানে এসেছে। DAX মানে হলো Data Analysis Expressions। নামটা শুনেই বোঝা যাচ্ছে, এটা ডেটা বিশ্লেষণ করার একটা ভাষা। আর এই ভাষাটা কিন্তু ডেটা থেকে দারুণ সব তথ্য বের করে আনতে পারে, যা আপনার ব্যবসাকে নতুন দিশা দেখাতে সাহায্য করবে।
আজ আমরা DAX এর তিনটি গুরুত্বপূর্ণ টেবিল ফাংশন নিয়ে কথা বলব: FILTER, ALL এবং VALUES। নামগুলো হয়তো একটু কঠিন মনে হচ্ছে, কিন্তু বিশ্বাস করুন, এগুলো একবার বুঝে গেলে আপনার ডেটা অ্যানালাইসিসের কাজটা অনেক সহজ হয়ে যাবে। ভাবছেন, এই ফাংশনগুলো দিয়ে কী হবে? চলুন, একটা গল্প দিয়ে শুরু করি।
ধরুন, আপনি ঢাকার একটি পোশাক কারখানার মালিক। আপনার কারখানায় বিভিন্ন ধরনের পোশাক তৈরি হয় এবং সারা বাংলাদেশে সেগুলো বিক্রি হয়। এখন আপনি জানতে চান, গত মাসে শুধু রাজশাহী বিভাগে কত টাকার শার্ট বিক্রি হয়েছে? অথবা, আপনার কোন পোশাকের বিক্রি কমে গেছে এবং কেন? এই ধরনের জটিল প্রশ্নের উত্তর পেতে DAX ফাংশনগুলো আপনার সেরা বন্ধু হতে পারে।
DAX টেবিল ফাংশন: কেন এত গুরুত্বপূর্ণ?
ডেটা অ্যানালাইসিস মানে শুধু যোগ-বিয়োগ করা নয়। এর মানে হলো, বিশাল ডেটা সেট থেকে নির্দিষ্ট কিছু তথ্য বের করে আনা, সেগুলোকে বিশ্লেষণ করা এবং সেই বিশ্লেষণের ওপর ভিত্তি করে সঠিক সিদ্ধান্ত নেওয়া। DAX টেবিল ফাংশনগুলো আপনাকে এই কাজটিই করতে সাহায্য করে। এগুলো ডেটার টেবিল বা কলামের উপর কাজ করে এবং নতুন টেবিল বা ফিল্টার করা ডেটা ফিরিয়ে দেয়।
FILTER: আপনার ডেটাকে ছাঁকনি দিয়ে ছেঁকে নিন
ভাবুন তো, আপনার কাছে হাজার হাজার ডেটা রো আছে, কিন্তু আপনার দরকার শুধু নির্দিষ্ট কিছু ডেটা। ঠিক যেমন রান্না করার সময় আপনি চাল ধুয়ে শুধু পরিষ্কার চালটা নেন, তেমনই FILTER ফাংশন আপনার ডেটা থেকে অপ্রয়োজনীয় অংশ বাদ দিয়ে শুধু প্রয়োজনীয় অংশটুকু রাখে।
FILTER ফাংশন কী করে?
FILTER ফাংশন একটি টেবিল থেকে নির্দিষ্ট শর্ত পূরণ করে এমন রো গুলোকে বেছে নেয় এবং সেগুলোকে নিয়ে নতুন একটি টেবিল তৈরি করে। এটা অনেকটা ডেটাবেসের "WHERE" ক্লজের মতো কাজ করে।
উদাহরণ:
ধরুন, আপনার কাছে Orders
নামে একটি টেবিল আছে, যেখানে আপনার পোশাক কারখানার সব অর্ডারের তথ্য আছে। এখন আপনি শুধু শার্টের অর্ডারগুলো দেখতে চান, যার পরিমাণ ৫০০ পিসের বেশি।
FILTER(
Orders,
Orders[Product Category] = "Shirt" && Orders[Quantity] > 500
)
ব্যাখ্যা:
Orders
: এটি সেই টেবিল, যেখান থেকে আপনি ডেটা ফিল্টার করতে চান।Orders[Product Category] = "Shirt"
: এটি আপনার প্রথম শর্ত। আপনি শুধু সেই রো গুলো চান যেখানেProduct Category
কলামে "Shirt" লেখা আছে।Orders[Quantity] > 500
: এটি আপনার দ্বিতীয় শর্ত। আপনি শুধু সেই রো গুলো চান যেখানেQuantity
কলামে ৫০০ এর বেশি আছে।&&
: এই অপারেটরটি দুটি শর্তকে একসাথে যুক্ত করে। এর মানে হলো, দুটি শর্তই পূরণ হতে হবে।
এই ফাংশনটি আপনাকে Orders
টেবিলের একটি সাবসেট দেবে, যেখানে শুধু শার্টের অর্ডারগুলো অন্তর্ভুক্ত থাকবে, যাদের পরিমাণ ৫০০ পিসের বেশি। এটা আপনার ডেটা অ্যানালাইসিসের কাজকে কতটা সহজ করে দিল, ভাবুন!
ALL: সব ডেটা দেখতে চান? ক্যালকুলেশনকে মুক্ত করুন!
কখনো কি এমন হয়েছে যে আপনি একটি নির্দিষ্ট কলামের সব ডেটা দেখতে চান, কিন্তু আপনার রিপোর্টে ফিল্টার করা ডেটা দেখাচ্ছে? এখানেই ALL ফাংশন কাজে আসে। ALL ফাংশন ক্যালকুলেশনের সময় বিদ্যমান ফিল্টারগুলো সরিয়ে দেয়।
ALL ফাংশন কী করে?
ALL ফাংশন একটি টেবিল বা একটি কলামের সমস্ত রো ফিরিয়ে দেয়, যা যেকোনো ফিল্টার কনটেক্সট উপেক্ষা করে। এর মানে হলো, আপনি যখন একটি মেজার তৈরি করছেন এবং চান যে সেটি পুরো টেবিলের উপর কাজ করুক, তখন ALL ব্যবহার করতে পারেন।
উদাহরণ:
আবার সেই পোশাক কারখানার উদাহরণ। আপনি শার্টের মোট বিক্রি জানতে চান, কিন্তু আপনার রিপোর্টে শুধু রাজশাহী বিভাগের শার্টের বিক্রি দেখাচ্ছে। আপনি যদি সারা বাংলাদেশের শার্টের মোট বিক্রি দেখতে চান, তাহলে ALL ব্যবহার করতে পারেন।
ধরা যাক, আপনার একটি মেজার আছে Total Sales Amount
। এখন আপনি শার্টের মোট বিক্রয় মূল্য বের করতে চান, যা কোনো অঞ্চল বা মাস দিয়ে ফিল্টার করা হবে না।
CALCULATE(
SUM(Orders[Sales Amount]),
ALL(Orders[Product Category]) // এই কলামের উপর থেকে ফিল্টার সরিয়ে দেবে
)
ব্যাখ্যা:
CALCULATE
: এটি DAX এর সবচেয়ে শক্তিশালী ফাংশনগুলোর মধ্যে একটি। এটি একটি এক্সপ্রেশনের ক্যালকুলেশন কনটেক্সট পরিবর্তন করে।SUM(Orders[Sales Amount])
: এটি আপনার মূল ক্যালকুলেশন, যা মোট বিক্রয় মূল্য বের করে।ALL(Orders[Product Category])
: এটি CALCULATE ফাংশনকে বলে যেProduct Category
কলামের উপর থেকে যেকোনো ফিল্টার সরিয়ে দিতে।
এর ফলে, আপনি আপনার রিপোর্টে অন্য যে ফিল্টারই ব্যবহার করুন না কেন, এই মেজারটি Product Category
কলামের যেকোনো ফিল্টারকে উপেক্ষা করে সব শার্টের মোট বিক্রয় মূল্য দেখাবে। এটা তখনই দরকারি, যখন আপনি একটি নির্দিষ্ট অংশের ডেটা এবং পুরো ডেটার মধ্যে তুলনা করতে চান। যেমন, রাজশাহী বিভাগের শার্ট বিক্রি বনাম সারা বাংলাদেশের শার্ট বিক্রি।
ALL এর দুটি ব্যবহার:
- ALL(Table): যখন আপনি একটি পুরো টেবিলের সমস্ত ফিল্টার সরাতে চান।
- ALL(Table[Column]): যখন আপনি একটি নির্দিষ্ট কলামের উপর থেকে ফিল্টার সরাতে চান।
VALUES: অনন্য মানগুলো খুঁজে বের করুন
আপনি কি কখনো একটি কলামে কতগুলো ভিন্ন ভিন্ন আইটেম আছে তা জানতে চেয়েছেন? যেমন, আপনার কারখানায় মোট কত ধরনের পোশাক তৈরি হয়? বা কতগুলো ভিন্ন ভিন্ন জেলায় আপনার পণ্য বিক্রি হয়? VALUES ফাংশন এই কাজটিই করে।
VALUES ফাংশন কী করে?
VALUES ফাংশন একটি নির্দিষ্ট কলামে থাকা সমস্ত অনন্য (unique) মানগুলোর একটি টেবিল ফিরিয়ে দেয়। যদি কলামে কোনো ডুপ্লিকেট মান থাকে, তাহলে VALUES ফাংশন সেগুলোকে শুধু একবারই দেখাবে।
উদাহরণ:
আপনি জানতে চান আপনার Orders
টেবিলের Product Category
কলামে কত ধরনের পণ্য আছে।
VALUES(Orders[Product Category])
ব্যাখ্যা:
Orders[Product Category]
: এটি সেই কলাম, যেখান থেকে আপনি অনন্য মানগুলো পেতে চান।
এই ফাংশনটি একটি টেবিল ফিরিয়ে দেবে, যেখানে Product Category
কলামের সমস্ত অনন্য মান থাকবে। যেমন, "Shirt", "Pant", "Saree", "Kurti" ইত্যাদি।
VALUES এর ব্যবহার:
- স্লাইসার/ফিল্টারে অনন্য মান প্রদর্শন: যখন আপনি একটি স্লাইসার তৈরি করেন এবং চান যে সেটি শুধু কলামের অনন্য মানগুলো দেখাক।
- অন্যান্য ফাংশনের সাথে ব্যবহার: VALUES প্রায়ই CALCULATE বা FILTER ফাংশনের সাথে ব্যবহার করা হয়, যখন আপনি একটি নির্দিষ্ট কলামের অনন্য মানের উপর ভিত্তি করে কোনো শর্ত দিতে চান।
যেমন, আপনি যদি জানতে চান, কোন কোন Product Category
-এর বিক্রি গত মাসে কমে গেছে, তবে আপনি VALUES(Orders[Product Category])
ব্যবহার করে প্রতিটি ক্যাটাগরির জন্য আলাদাভাবে বিশ্লেষণ করতে পারেন।
FILTER, ALL, VALUES: কখন কোনটি ব্যবহার করবেন?
এই তিনটি ফাংশনই ডেটা টেবিলের উপর কাজ করে, কিন্তু তাদের উদ্দেশ্য ভিন্ন।
ফাংশন | প্রধান উদ্দেশ্য | কখন ব্যবহার করবেন? |
---|---|---|
FILTER | ডেটা ছাঁটাই করা | যখন আপনি একটি টেবিল থেকে নির্দিষ্ট শর্ত পূরণ করে এমন রো গুলোকে বেছে নিতে চান। |
ALL | ফিল্টার অপসারণ করা | যখন আপনি ক্যালকুলেশনের সময় বিদ্যমান ফিল্টারগুলোকে উপেক্ষা করে সমস্ত ডেটার উপর কাজ করতে চান। |
VALUES | অনন্য মান খুঁজে বের করা | যখন আপনি একটি কলামের সমস্ত অনন্য মানগুলো দেখতে চান বা সেগুলোর উপর ভিত্তি করে কাজ করতে চান। |
এই তিনটি ফাংশন একে অপরের পরিপূরক। অনেক সময় আপনি একটি DAX এক্সপ্রেশনে একাধিক ফাংশন ব্যবহার করবেন। যেমন, CALCULATE ফাংশনের সাথে FILTER এবং ALL একসাথে ব্যবহার করা খুবই সাধারণ।
বাস্তব জীবনের উদাহরণ: আপনার ব্যবসার জন্য DAX
চলুন, আমাদের পোশাক কারখানার উদাহরণটি আরও গভীরে নিয়ে যাই।
১. সর্বোচ্চ বিক্রিত পণ্য ক্যাটাগরি (FILTER ও SUMX ব্যবহার করে):
আপনি জানতে চান, গত এক বছরে আপনার কোন পণ্য ক্যাটাগরি থেকে সবচেয়ে বেশি বিক্রি হয়েছে।
CALCULATE(
SUMX(
FILTER(
Orders,
YEAR(Orders[Order Date]) = YEAR(TODAY()) - 1 // গত বছরের ডেটা
),
Orders[Sales Amount]
),
ALL(Orders[Order Date]) // অর্ডারের তারিখের উপর থেকে ফিল্টার সরিয়ে দেবে
)
এখানে FILTER
ব্যবহার করে আমরা গত বছরের অর্ডারগুলো নিচ্ছি, এবং ALL(Orders[Order Date])
ব্যবহার করে নিশ্চিত করছি যে তারিখের উপর অন্য কোনো ফিল্টার থাকলেও তা উপেক্ষা করা হবে।
২. প্রতিটি পণ্যের মোট বিক্রি বনাম মোট কারখানার বিক্রি (ALL ব্যবহার করে):
আপনি প্রতিটি শার্টের মডেলের বিক্রয় দেখতে চান এবং তার পাশে দেখতে চান যে পুরো কারখানার মোট বিক্রয়ের কত শতাংশ এটি।
প্রথমত, প্রতিটি শার্ট মডেলের বিক্রয়:
Total Sales for Product Model = SUM(Orders[Sales Amount])
এরপর, পুরো কারখানার মোট বিক্রয় (ফিল্টার উপেক্ষা করে):
Total Company Sales = CALCULATE(SUM(Orders[Sales Amount]), ALL(Orders))
এখন, শতাংশ বের করতে:
% of Total Company Sales = DIVIDE([Total Sales for Product Model], [Total Company Sales])
এই উদাহরণে, ALL(Orders)
ব্যবহার করে আমরা নিশ্চিত করছি যে Total Company Sales
মেজারটি পুরো Orders
টেবিলের উপর কাজ করবে, কোনো নির্দিষ্ট শার্ট মডেল বা অন্য কোনো ফিল্টার দ্বারা প্রভাবিত হবে না।
৩. কোন কোন শহরে আপনার পণ্য বিক্রি হয় (VALUES ব্যবহার করে):
আপনি আপনার ডেটা থেকে জানতে চান, বাংলাদেশের কোন কোন শহরে আপনার পণ্য বিক্রি হয়।
DISTINCTCOUNT(Orders[City]) // COUNTROWS(VALUES(Orders[City])) এর বিকল্প
অথবা, যদি আপনি শহরগুলোর একটি তালিকা চান:
City List = VALUES(Orders[City])
এটি আপনাকে একটি টেবিল দেবে যেখানে আপনার পণ্য বিক্রি হওয়া সব শহরের নাম থাকবে।
FAQ (সাধারণ জিজ্ঞাসা)
প্রশ্ন ১: DAX ফাংশনগুলো কি শুধু পাওয়ার BI-এর জন্য?
উত্তর: না, DAX ফাংশনগুলো শুধু পাওয়ার BI-এর জন্য নয়। এগুলো SQL Server Analysis Services (SSAS) Tabular মডেল এবং Excel Power Pivot-এও ব্যবহার করা হয়। যেখানেই Microsoft-এর Tabular ডেটা মডেল ব্যবহার করা হয়, সেখানেই DAX ব্যবহার করা হয়।
প্রশ্ন ২: FILTER, ALL এবং VALUES ফাংশনগুলোর মধ্যে প্রধান পার্থক্য কী?
উত্তর: প্রধান পার্থক্য হলো তাদের উদ্দেশ্য। FILTER ডেটা ছাঁটাই করে নির্দিষ্ট শর্ত পূরণ করা রো গুলোকে দেয়। ALL বিদ্যমান ফিল্টারগুলো সরিয়ে দেয় যাতে ক্যালকুলেশন পুরো ডেটা সেটের উপর কাজ করতে পারে। আর VALUES একটি কলামের অনন্য মানগুলো ফিরিয়ে দেয়।
প্রশ্ন ৩: আমি কি FILTER ফাংশনের মধ্যে একাধিক শর্ত ব্যবহার করতে পারি?
উত্তর: হ্যাঁ, অবশ্যই পারেন। আপনি &&
(AND) বা ||
(OR) অপারেটর ব্যবহার করে একাধিক শর্ত যুক্ত করতে পারেন। যেমন: FILTER(Table, Condition1 && Condition2)
অথবা FILTER(Table, Condition1 || Condition2)
।
প্রশ্ন ৪: ALL ফাংশন কি টেবিলের সমস্ত কলামের ফিল্টার সরিয়ে দেয়?
উত্তর: যদি আপনি ALL(Table)
ব্যবহার করেন, তাহলে এটি সেই টেবিলের সমস্ত কলামের উপর থেকে ফিল্টার সরিয়ে দেবে। কিন্তু যদি আপনি ALL(Table[Column])
ব্যবহার করেন, তাহলে এটি শুধুমাত্র নির্দিষ্ট কলামের উপর থেকে ফিল্টার সরিয়ে দেবে।
প্রশ্ন ৫: VALUES এবং DISTINCT ফাংশনের মধ্যে পার্থক্য কী?
উত্তর: VALUES একটি টেবিল (এক কলামের) ফিরিয়ে দেয় যেখানে অনন্য মানগুলো থাকে। অন্যদিকে, DISTINCT একটি কলামের সমস্ত অনন্য মানগুলো ফিরিয়ে দেয়, যা সরাসরি একটি কলাম হিসেবে ব্যবহার করা যায়। ব্যবহারিক ক্ষেত্রে, VALUES
ফাংশনটি সাধারণত ক্যালকুলেশনের কনটেক্সটে বেশি ব্যবহৃত হয়, যখন DISTINCT
ফাংশনটি মূলত একটি কলামের অনন্য মান গণনা করার জন্য DISTINCTCOUNT
এর মতো ফাংশনে ব্যবহৃত হয়।
প্রশ্ন ৬: DAX শেখা কি কঠিন?
উত্তর: প্রথমদিকে DAX কিছুটা কঠিন মনে হতে পারে, কারণ এর সিনট্যাক্স এবং কনটেক্সট বোঝার জন্য কিছুটা সময় লাগে। তবে, নিয়মিত অনুশীলন এবং বাস্তব জীবনের সমস্যা সমাধানের মাধ্যমে DAX শেখা সহজ হয়ে যায়। এর শক্তিশালী ক্ষমতা একবার আয়ত্ত করতে পারলে ডেটা অ্যানালাইসিসের কাজ অনেক সহজ হয়ে যায়।
প্রশ্ন ৭: এই ফাংশনগুলো ব্যবহার করে কি আমি নতুন কলাম তৈরি করতে পারি?
উত্তর: হ্যাঁ, আপনি এই ফাংশনগুলো ব্যবহার করে নতুন ক্যালকুলেটেড কলাম তৈরি করতে পারেন। তবে, সাধারণত এই ফাংশনগুলো মেজার (Measures) তৈরি করতে বেশি ব্যবহৃত হয়, কারণ মেজারগুলো ডাইনামিক এবং রিপোর্টের ফিল্টার অনুযায়ী ক্যালকুলেট হয়।
Key Takeaways (মূল বিষয়বস্তু)
- DAX (Data Analysis Expressions) হলো ডেটা বিশ্লেষণের জন্য একটি শক্তিশালী ভাষা, যা পাওয়ার BI, Excel Power Pivot এবং SSAS Tabular মডেলে ব্যবহৃত হয়।
- FILTER ফাংশন আপনার ডেটা থেকে নির্দিষ্ট শর্ত পূরণ করা রো গুলোকে বেছে নিয়ে একটি নতুন টেবিল তৈরি করে, যা ডেটা ছাঁটাইয়ের জন্য অপরিহার্য।
- ALL ফাংশন ক্যালকুলেশনের সময় বিদ্যমান ফিল্টারগুলোকে উপেক্ষা করে, যা আপনাকে পুরো ডেটা সেটের উপর ভিত্তি করে তুলনা এবং শতাংশের মতো বিশ্লেষণ করতে সাহায্য করে।
- VALUES ফাংশন একটি কলামের সমস্ত অনন্য (unique) মানগুলোর একটি টেবিল ফিরিয়ে দেয়, যা ডেটার বিভিন্ন ক্যাটাগরি বা আইটেম শনাক্ত করতে কার্যকর।
- এই তিনটি ফাংশন একে অপরের পরিপূরক এবং প্রায়শই একসাথে ব্যবহার করা হয় জটিল ডেটা বিশ্লেষণ এবং রিপোর্ট তৈরির জন্য।
- DAX ফাংশনগুলো আয়ত্ত করতে পারলে আপনি আপনার ডেটা থেকে আরও গভীর অন্তর্দৃষ্টি বের করতে পারবেন, যা আপনার ব্যবসাকে আরও উন্নত সিদ্ধান্ত নিতে সাহায্য করবে।
আশা করি, DAX এর এই তিনটি গুরুত্বপূর্ণ টেবিল ফাংশন – FILTER, ALL এবং VALUES – সম্পর্কে আপনার ধারণা এখন অনেক পরিষ্কার হয়েছে। ডেটা অ্যানালাইসিসের এই যাত্রাটা কিন্তু বেশ মজার। যত অনুশীলন করবেন, তত নতুন কিছু শিখবেন। তাই আর দেরি কেন? এখনই আপনার ডেটা নিয়ে কাজ শুরু করুন এবং DAX এর জাদু দেখুন! আপনার ডেটা অ্যানালাইসিসের অভিজ্ঞতা কেমন হচ্ছে, তা আমাদের জানাতে ভুলবেন না!